Menulis templat konektor Layanan Web SAP ECC 7.51 untuk ECMA2Host
Panduan ini memandu Anda melalui proses pembuatan templat untuk konektor Web Service Extensibility Connectivity Management Agent (ECMA) untuk mengelola pengguna SAP ECC.
Batasan dan asumsi
Templat ini menunjukkan cara mengelola pengguna. Jenis objek lain seperti Grup Aktivitas Lokal, Peran, dan Profil tidak dicakup oleh panduan ini karena ECMA2Host saat ini tidak mendukung referensi multinilai. Operasi kata sandi juga berada di luar cakupan untuk panduan ini.
Panduan ini tidak mencakup pembuatan akun layanan dalam SAP yang digunakan untuk memanggil fungsi BAPI yang diekspos. Ini mengasumsikan bahwa akun demo yang telah dibuat sebelumnya Pengembang digunakan dengan profil RFC_ALL yang memberikan izin ke BAPI yang disebutkan dalam artikel ini.
Alat Konfigurasi Layanan Web tidak mendukung fitur berikut yang diekspos di SAP secara default: Kebijakan WSP dan beberapa pengikatan per titik akhir. Ini memang mengharapkan WSDL dengan SOAP 1.1 saja, pengikatan gaya dokumen all-in-one tanpa kebijakan.
Fungsi SAP ECC BAPI yang digunakan dalam templat ini:
- BAPI_USER_GETLIST - dapatkan daftar semua pengguna yang tersambung ke sistem ini.
- BAPI_USER_GETDETAIL - dapatkan detail pengguna tertentu.
- BAPI_USER_CREATE1 - membuat pengguna.
- BAPI_USER_DELETE - menghapus pengguna.
- BAPI_USER_CHANGE - memperbarui pengguna.
Semua properti pengguna SAP dalam panduan ini diperlakukan sebagai properti bernilai tunggal.
Bahasa pemrograman yang digunakan adalah Visual Basic.
Menentukan titik akhir layanan web dan membuat skema
Sebelum Anda dapat merancang alur kerja impor dan ekspor, Anda perlu membuat templat dan menentukan titik akhir dengan fungsi SAP BAPI yang diekspos melalui antarmuka SOAP. Kemudian buat skema objek ECMA2 dan propertinya tersedia dalam templat ini.
- Dari folder "C:\Program Files\Microsoft ECMA2Host\Web Service Configuration Tool", mulai alat Konfigurasi Layanan Web wsconfigTool.exe
- Dari menu File-New, pilih Buat Proyek SOAP baru
- Pilih Proyek SOAP dan pilih Tambahkan Layanan Web baru.
- Beri nama layanan web ANDA SAPECC, berikan URL untuk mengunduh WSDL yang diterbitkan, masukkan SAPECC sebagai namespace layanan. Nama Layanan Web membantu Anda membedakan layanan web ini dalam templat Anda dari yang lain. Namespace mendefinisikan nama namespace Microsoft .NET yang digunakan untuk menghasilkan kelas. Pilih Mode autentikasi dasar kecuali diinstruksikan sebaliknya oleh administrator SAP. Pilih Berikutnya.
- Berikan kredensial untuk menyambungkan ke titik akhir SAP ECC. Pilih Berikutnya.
- Pada halaman titik akhir dan operasi, pastikan BAPI ditampilkan dan pilih Selesai
Catatan
jika Anda melihat lebih dari satu titik akhir, maka Anda mengaktifkan pengikatan SOAP 1.2 dan SOAP 1.1. Hal ini menyebabkan konektor gagal. Ubah definisi pengikatan Anda di SOAMANAGER dan simpan hanya satu. Kemudian tambahkan kembali layanan web.
- Simpan proyek ke folder C:\Program Files\Microsoft ECMA2Host\Service\ECMA.
- Pilih pada tab Tipe Objek dan pilih untuk menambahkan jenis objek Pengguna. Pilih Ok.
- Perluas tab Jenis Objek dan pilih definisi Jenis pengguna.
- Tambahkan atribut berikut ke dalam skema dan pilih userName sebagai jangkar.
- Simpan proyek Anda.
Nama | Tipe | Jangkar |
---|---|---|
kota | string | |
perusahaan | string | |
departemen | string | |
surat elektronik | string | |
waktu kedaluwarsa | string | |
nama depan | string | |
nama belakang | string | |
nama tengah | string | |
nomor telepon | string | |
jabatan | string | |
userName | string | diperiksa |
Membuat alur kerja Impor Penuh
Alur kerja Impor, meskipun bersifat opsional di ECMA2Host, memungkinkan Anda mengimpor pengguna SAP yang ada ke dalam cache dalam memori ECMA2Host dan menghindari pengguna duplikat yang dibuat selama provisi.
Jika Anda tidak membuat alur kerja impor, maka konektor Anda beroperasi dalam mode Ekspor-saja dan menyebabkan ECMA2Host selalu melakukan operasi Buat pengguna, bahkan untuk pengguna yang sudah ada. Ini dapat menyebabkan kegagalan atau duplikat ketika BAPI SAP standar digunakan kecuali duplikat ditangani oleh alur kerja ekspor.
SAP ECC tidak menawarkan mekanisme bawaan untuk membaca perubahan yang dilakukan sejak bacaan terakhir.
Oleh karena itu, kami hanya menerapkan alur kerja Impor Penuh. Jika Anda perlu menerapkan Impor Delta karena alasan performa, konsultasikan dengan administrator SAP Anda untuk daftar BAPI dan publikasikan sebagai layanan web SOAP. Kemudian, terapkan alur kerja Impor Delta menggunakan pendekatan berikut seperti yang dijelaskan dan properti customData yang berisi tanda waktu dari eksekusi yang berhasil sebelumnya.
SAP ECC menawarkan beberapa fungsi BAPI untuk mendapatkan daftar pengguna dengan properti mereka:
- BAPI_USER_GETLIST - dapatkan daftar semua pengguna yang tersambung ke sistem ini.
- BAPI_USER_GETDETAIL - dapatkan detail pengguna tertentu.
Hanya kedua BAPI ini yang digunakan untuk mengambil pengguna yang ada dari SAP ECC dalam templat ini.
- Navigasi ke Jenis Objek - Pengguna - Impor Penuh alur kerja dan dari Kotak Alat di sebelah kanan, seret dan jatuhkan aktivitas Urutan ke panel perancang alur kerja.
- Di kiri bawah, temukan tombol Variabel dan pilih untuk memperluas daftar variabel yang ditentukan dalam Urutan ini.
- Tambahkan variabel berikut. Untuk memilih jenis variabel yang dihasilkan dari SAP WSDL, pilih Telusuri Jenis dan perluas jenis yang dihasilkan, lalu perluas namespace SAPECC.
Nama | Tipe Variabel | Cakupan | Bawaan |
---|---|---|---|
selRangeTable | SAPECC. TABLE_OF_BAPIUSSRGE | Urutan | TABLE_OF_BAPIUSSRGE baru dengan {.item = BAPIUSSRGE baru(){BAPIUSSRGE baru}} |
getListRetTable | SAPECC. TABLE_OF_BAPIRET2 | Urutan | TABLE_OF_BAPIRET2 baru |
ukuran halaman | Int32 | Urutan | 200 |
returnedSize | Int32 | Urutan | |
usersTable | SAPECC. TABLE_OF_BAPIUSNAME | Urutan | new TABLE_OF_BAPIUSNAME() |
- Dari kotakalat, seret dan letakkan empat aktivitas Menetapkan ke dalam aktivitas Urutan dan tetapkan nilai-nilai berikut:
selRangeTable.item(0).PARAMETER = "USERNAME"
selRangeTable.item(0).SIGN = "I" selRangeTable.item(0).OPTION = "GT" selRangeTable.item(0).LOW = ""
Parameter ini digunakan untuk memanggil fungsi BAPI_USER_GETLIST dan untuk mengimplementasikan penomoran halaman.
- Untuk menerapkan penomoran halaman, dari Kotak Alat seret dan letakkan aktivitas DoWhile di dalam aktivitas Urutan Anda setelah operasi Tetapkan terakhir.
- Di panel kanan beralih ke tab Properti dan masukkan kondisi ini untuk DoWhile
- daur:
returnedSize = pageSize
- Pilih Variabel dan tambahkan properti currentPageNumber dari jenis int32 dalam siklus DoWhile dengan nilai default 0.
- Langkah opsional: jika Anda berencana untuk menerapkan alur kerja Impor Delta, maka dari Kotak Alat seret dan jatuhkan Aktivitas Penugasan ke dalam Aktivitas Urutan Anda setelah siklus DoWhile. Atur nilai ini:
-
customData(schemaType.Name + "_lastImportTime") = DateTimeOffset.UtcNow.Ticks.ToString()
Ini menyimpan tanggal dan waktu eksekusi impor penuh terakhir dan tanda waktu ini nantinya dapat digunakan dalam alur kerja Impor Delta.
- Dari Panel Alat, seret dan letakkan aktivitas Urutan ke dalam aktivitas DoWhile Anda. Seret dan letakkan aktivitas WebServiceCall di dalam aktivitas Urutan tersebut dan pilih nama layanan SAPECC, titik akhir ZSAPCONNECTORWS, dan operasi BAPI_USER_GETLIST.
- Pilih pada ... Tombol Argumen untuk menentukan parameter untuk panggilan layanan web sebagai berikut:
Nama | Arah | Tipe | Nilai |
---|---|---|---|
MAX_ROWS | Dalam | Int32 | ukuranHalaman |
MAX_ROWSSpecified | Dalam | Boolean | Benar |
KEMBALI | Masuk/Keluar | TABLE_OF_BAPIRET2 | getListRetTable |
Pengalaman Pemilihan | Masuk/Keluar | TABLE_OF_BAPIUSSEXP | |
Rentang_Pilihan | Masuk/Keluar | TABLE_OF_BAPIUSSRGE | selRangeTable |
DAFTAR PENGGUNA | Masuk/Keluar | TABLE_OF_BAPIUSNAME | tabel pengguna |
DENGAN_NAMA_PENGGUNA | Dalam | String | |
ROWS | Keluar | Int32 | returnedSize |
- Pilih OK. Tanda peringatan menghilang. Daftar pengguna yang disimpan dalam variabel usersTable. Karena SAP tidak mengembalikan daftar lengkap pengguna dalam satu respons, kita perlu menerapkan penomoran halaman dan memanggil fungsi ini beberapa kali saat beralih halaman. Kemudian untuk setiap pengguna yang diimpor, Anda perlu mendapatkan detail pengguna tersebut dengan melakukan panggilan terpisah. Itu berarti bahwa untuk lanskap dengan 1.000 pengguna dan ukuran halaman 200, konektor Layanan Web melakukan 5 panggilan untuk mengambil daftar pengguna dan 1.000 panggilan individual untuk mengambil detail pengguna. Untuk meningkatkan performa, minta tim SAP Anda untuk mengembangkan program BAPI kustom yang mencantumkan semua penggunaan dengan properti mereka. Ini menghindari kebutuhan melakukan 1.000 panggilan individu dan mengekspos fungsi BAPI melalui titik akhir SOAP WS.
- Dari Kotak Alat, seret dan letakkan aktivitas IF di dalam aktivitas DoWhile Anda setelah aktivitas WebServiceCall selesai. Tentukan kondisi ini untuk memeriksa respons yang tidak kosong dan tidak adanya kesalahan:
IsNothing(getListRetTable.item) OrElse getListRetTable.item.Count(Function(errItem) errItem.TYPE.Equals("E") = True) = 0
- Dari Kotak Alat, seret dan letakkan aktivitas Throw ke cabang Else dari aktivitas IF Anda untuk melemparkan kesalahan jika impor gagal. Beralih ke tab Properti dan masukkan ekspresi ini untuk properti Pengecualian dari aktivitas Lempar:
New Exception(getListRetTable.item.First(Function(retItem) retItem.TYPE.Equals("E")).MESSAGE)
- Untuk memproses daftar pengguna yang diimpor, seret dan letakkan aktivitas ForEachWithBodyFactory dari Kotak Alat ke cabang Then dari aktivitas IF. Beralih ke tab Properti dan pilih SAPECC. BAPIUSNAME sebagai TypeArgument. Pilih tombol ..., lalu ketik ekspresi ini untuk properti nilai:
if(usersTable.item,Enumerable.Empty(of BAPIUSNAME)())
- Dari Kotak Alat, seret dan letakkan aktivitas Sequence di dalam aktivitas ForEach Anda. Memiliki jendela aktivitas Urutan ini aktif, pilih tombol Variabel dan tentukan variabel ini:
Nama | Tipe Variabel | Cakupan | Bawaan |
---|---|---|---|
perusahaan | SAPECC.BAPIUSCOMP | Urutan | BAPIUSCOMP() baru |
alamat | SAPECC. BAPIADDR3 | Urutan | new BAPIADDR3() |
pengaturan bawaan | SAPECC. BAPIDEFAUL | Urutan | new BAPIDEFAUL() |
logondata | SAPECC.BAPILOGOND | Urutan | BAPILOGOND() baru |
getDetailRetTable | SAPECC. TABLE_OF_BAPIRET2 | Urutan | new TABLE_OF_BAPIRET2() |
Aktivitas IF Anda terlihat seperti ini:
- Seret dan letakkan aktivitas CreateCSEntryChangeScope di dalam kegiatan Sequence Anda. Di properti DN, masukkan schemaType.Name & item.USERNAME. Di bidang CreateAnchorAttribute AnchorValue masukkan item.username.
- Untuk mengambil detail setiap pengguna, dari "Toolbox" seret dan letakkan aktivitas "WebServiceCall" ke dalam aktivitas "Sequence," tepat sebelum aktivitas "CreateAnchorAttribute." Pilih nama layanan SAPECC, endpoint ZSAPCONNECTORWS, dan operasi BAPI_USER_GET_DETAIL. Pilih pada ... Tombol Argumen untuk menentukan parameter untuk panggilan layanan web sebagai berikut:
Nama | Arah | Tipe | Nilai |
---|---|---|---|
KEMBALI | Masuk/Keluar | TABLE_OF_BAPIRET2 | getDetailRetTable |
NAMA PENGGUNA | Dalam | String | item.username |
ALAMAT | Keluar | BAPIADDR3 | alamat |
PERUSAHAAN | Keluar | BAPIUSCOMP | perusahaan |
Pengaturan Bawaan | Keluar | BAPIUSDEFAUL | pengaturan bawaan |
LOGONDATA | Keluar | BAPILOGOND | logonData |
DENGAN_NAMA_PENGGUNA | Dalam | String | |
ROWS | Kehabisan | Int32 | returnedSize |
- Pilih OK. Tanda peringatan menghilang. Detail pengguna disimpan dalam variabel yang tercantum di atas. Aktivitas IF Anda terlihat seperti ini:
- Untuk memeriksa hasil operasi BAPI_USER_GET_DETAIL, dari Toolbox, seret dan letakkan aktivitas IF dan letakkan di dalam aktivitas Sequence di antara aktivitas WebServiceCall dan CreateAnchorAttribute. Masukkan kondisi ini:
IsNothing(getDetailRetTable.item) OrElse getDetailRetTable.item.Count(Function(errItem) errItem.TYPE.Equals("E") = True) = 0
Karena detail pengguna yang hilang tidak boleh diperlakukan sebagai peristiwa bencana, kami ingin menunjukkan kesalahan ini dan melanjutkan pemrosesan pengguna lain. Seret dan jatuhkan aktivitas Urutan ke cabang Else dari aktivitas IF Anda. Tambahkan aktivitas Log di dalam aktivitas Urutan baru tersebut. Beralih ke tab Properti dan ubah properti Tingkat ke Tinggi, Tag ke Pelacakan. Masukkan yang berikut ini ke dalam properti LogText: string.Join("\n", getDetailRetTable.item.Select (Function(item) item.MESSAGE ))
- Seret dan letakkan aktivitas Urutan ke dalam cabang Then dari aktivitas IF. Seret dan letakkan aktivitas CreateAnchorAttribute yang ada ke Aktivitas Sequence di dalam cabang Then dari aktivitas IF. Aktivitas ForEach Anda sekarang terlihat seperti ini:
- Untuk setiap properti pengguna seperti kota, perusahaan, departemen, dan email, tambahkan aktivitas IF setelah aktivitas CreateAnchorAttribute dan periksa nilai yang tidak kosong dengan memasukkan kondisi seperti
Not string.IsNullOrEmpty(address.city)
serta menambahkan aktivitas CreateAttributeChange ke bagian Kemudian dari aktivitas IF tersebut.
Misalnya: Tambahkan aktivitas CreateAttributeChange untuk semua properti pengguna menggunakan tabel pemetaan ini:
Properti Pengguna ECMA | Properti SAP |
---|---|
kota | kota.alamat |
departemen | alamat.departemen |
perusahaan | company.company |
alamat.email | |
nama depan | alamat.namaDepan |
nama belakang | alamat.namaBelakang |
nama tengah | alamat.namaTengah |
jabatan | alamat.fungsi |
waktu kedaluwarsa | logonData.GLTGB |
nomorTelepon | alamat.TEL1_NOMOR |
- Terakhir, tambahkan aktivitas SetImportStatusCode setelah aktivitas CreateAttributeChange terakhir. Setel ErrorCode ke Sukses di cabang Then. Tambahkan satu lagi aktivitas kode SetImportStatus ke cabang Else dan atur ErrorCode ke ImportErrorCustomContinueRun.
- Ciutkan aktivitas Sequence di dalam aktivitas ForEach sehingga siklus DoWhile Anda terlihat seperti ini:
- Untuk mengambil halaman pengguna yang berikutnya, perbarui properti
selRangeTable.item(0).LOW
. Seret dan letakkan aktivitas IF ke dalam aktivitas Urutan di dalam DoWhile. Tempatkan setelah aktivitas IF yang ada. Masukkan returnedSize>0 sebagai Kondisi. Tambahkan aktivitas Assign ke cabang Then dari aktivitas IF dan aturselRangeTable.item(0).LOW
keusersTable.item(returnedSize-1).username
.
Anda menyelesaikan definisi alur kerja Impor Penuh.
Membuat Alur Kerja Penambahan Ekspor
Untuk membuat pengguna di SAP ECC, Anda dapat memanggil program BAPI_USER_CREATE1 dan menyediakan semua parameter termasuk nama akun dan kata sandi awal. Jika Anda memerlukan nama akun untuk dibuat di sisi SAP, konsultasikan dengan administrator SAP Anda dan gunakan fungsi BAPI kustom yang mengembalikan properti userName dari akun pengguna yang baru dibuat.
Panduan ini tidak menunjukkan penetapan lisensi, grup aktivitas lokal atau global, sistem, atau profil. Konsultasikan dengan administrator SAP Anda dan ubah alur kerja ini dengan sesuai.
Tidak perlu menerapkan penomoran halaman dalam alur kerja ekspor. Hanya ada satu objek objectToExport yang tersedia dalam konteks alur kerja.
- Navigasi ke Jenis Objek - Pengguna ->> Ekspor -> Tambahkan alur kerja dan dari Kotak Alat di seret dan letakkan aktivitas Urutan ke panel perancang alur kerja.
- Di kiri bawah, temukan tombol Variabel dan pilih untuk memperluas daftar variabel yang ditentukan dalam Urutan ini.
- Tambahkan variabel berikut. Untuk memilih jenis variabel yang dihasilkan dari SAP WSDL, pilih Telusuri Jenis dan perluas jenis yang dihasilkan, lalu perluas namespace SAPECC. Ini menginisialisasi struktur data yang digunakan oleh program BAPI_USER_CREATE1.
Nama | Tipe Variabel | Cakupan | Bawaan |
---|---|---|---|
alamat | SAPECC. BAPIADDR3 | Urutan | BAPIADDR3 baru() |
userName | String | Urutan | |
kata sandi | SAPECC.BAPIPWD | Urutan | BAPIPWD() baru |
perusahaan | SAPECC.BAPIUSCOMP | Urutan | new BAPIUSCOMP() |
default | SAPECC. BAPIDEFAUL | Urutan | BAPIDEFAUL() baru |
logOnData | SAPECC.BAPILOGOND | Urutan | BAPILOGOND() baru |
bapiret2Table | SAPECC. TABLE_OF_BAPIRET2 | Urutan | TABLE_OF_BAPIRET2 baru() |
- Saat kami mendefinisikan properti userName sebagai ID yang tidak dapat diubah, jangkar, kita perlu mengekstrak nilai userName dari kumpulan jangkar objek ekspor kita. Seret dan letakkan aktivitas ForEachWithBodyFactory dari Panel Alat ke dalam aktivitas Urutan Anda. Ganti nama variabel item dengan jangkar, beralihlah ke properti dan pilih TypeArgument dari
Microsoft.MetadirectoryServices.AnchorAttribute
. Di bidang Nilai, ketikobjectToExport.AnchorAttributes
.
- Untuk mengekstrak nilai string dari jangkar userName, seret dan letakkan aktivitas Switch di dalam aktivitas ForEach. Di jendela popup, pilih jenis sakelar
Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AnchorAttributeNameWrapper
. Masukkan nilai Ekspresi: New AnchorAttributeNameWrapper(jangkar.Nama). - Pilih opsi Tambahkan kasus baru di area Aktivitas Switch. Ketik userName sebagai Nilai Kasus. Seret dan letakkan Tetapkan aktivitas ke dalam isi kasus userName dan tetapkan jangkar. Value.ToString() ke variabel userName.
- Sekarang setelah kita mengekstrak nilai userName dari properti jangkar objek yang diekspor, kita perlu mengisi struktur lain seperti perusahaan, default, alamat, data masuk yang berisi detail pengguna SAP lainnya. Kami melakukan ini dengan meninjau sekumpulan perubahan atribut.
- Runtuhkan aktivitas ForEach Anda dan seret serta lepaskan aktivitas ForEachWithBothFactory lainnya ke dalam urutan aktivitas Anda setelah aktivitas ForEach yang ada. Ganti nama variabel item dengan attributeChange, beralihlah ke properti dan pilih TypeArgument dari
Microsoft.MetadirectoryServices.AttributeChange
. Di bidang Nilai, ketikobjectToExport.AttributeChanges
.
- Seret dan letakkan aktivitas Switch ke dalam isi aktivitas ForEach Anda.
- Di menu popup, pilih
Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AttributeNameWrapper
dan pilih Ok. - Masukkan ekspresi berikut: New AttributeNameWrapper(attributeChange.Name). Anda akan melihat ikon peringatan di sudut kanan atas aktivitas Switch Anda tentang atribut yang tidak teratasi yang ditentukan dalam skema dan tidak ditetapkan ke properti apa pun.
- Pilih pada area Tambahkan kasus baru pada aktivitas Beralih dan ketik nilai kasus kota.
- Seret dan letakkan Tetapkan aktivitas ke dalam isi kasus ini. Tetapkan
attributeChange.ValueChanges(0).Value.ToString()
ke address.city.
- Tambahkan kasus dan penugasan lain yang hilang. Gunakan tabel pemetaan ini sebagai panduan:
Kasus | Penugasan |
---|---|
kota | address.city = attributeChange.ValueChanges(0)Value.ToString() |
perusahaan | company.company = attributeChange.ValueChanges(0)Value.ToString() |
departemen | address.department = attributeChange.ValueChanges(0)Value.ToString() |
address.e_mail = attributeChange.ValueChanges(0)Value.ToString() | |
waktu kedaluwarsa | logOnData.GLTGB = attributeChange.ValueChanges(0)Value.ToString() |
nama depan | address.firstname = attributeChange.ValueChanges(0)Value.ToString() |
nama belakang | address.lastname = attributeChange.ValueChanges(0)Value.ToString() |
nama tengah | address.middlename = attributeChange.ValueChanges(0)Value.ToString() |
nomor telepon | alamat.TEL1_Numbr = attributeChange.ValueChanges(0)Value.ToString() |
jabatan | address.function = attributeChange.ValueChanges(0)Value.ToString() |
export_password | kata sandi. BAPIPWD1 = attributeChange.ValueChanges(0)Value.ToString() |
Di sini, export_password adalah atribut virtual khusus yang selalu didefinisikan dalam skema dan dapat digunakan untuk meneruskan kata sandi awal pengguna yang dibuat.
- Lipat aktivitas ForEach Anda dan seret dan jatuhkan aktivitas IF ke dalam aktivitas Urutan, setelah aktivitas ForEach kedua, untuk memvalidasi properti pengguna, sebelum mengajukan permintaan pembuatan pengguna. Kita memerlukan setidaknya 3 nilai yang tidak kosong: nama pengguna, nama belakang, kata sandi awal. Masukkan kondisi ini:
(String.IsNullOrEmpty(address.lastname) = False ) AND (String.IsNullOrEmpty(userName) = False) AND (String.IsNullOrEmpty(password.BAPIPWD1) = False)
- Di cabang Else dari aktivitas IF, tambahkan satu lagi aktivitas IF karena kita ingin menampilkan kesalahan yang berbeda tergantung pada apa yang kurang. Masukkan nilai kondisi: String.IsNullOrEmpty(userName). Seret dan Letakkan
CreateCSEntryChangeResult
aktivitas ke kedua cabang aktivitas IF kedua dan siapkan ErrorCode danExportErrorMissingAnchorComponent
ExportErrorMissingProvisioningAttribute
.
- Seret dan letakkan aktivitas Urutan di cabang kosong Lalu dari aktivitas IF pertama. Seret dan letakkan aktivitas WebServiceCall di dalam aktivitas Sequence. Pilih nama layanan SAPECC, titik akhir ZSAPCONNECTORWS, dan operasi BAPI_USER_CREATE1. Pilih pada ... Tombol Argumen untuk menentukan parameter untuk panggilan layanan web sebagai berikut:
Nama | Petunjuk | Tipe | Nilai |
---|---|---|---|
ALAMAT | Dalam | BAPIADDR3 | alamat |
PERUSAHAAN | Dalam | BAPIUSCOMP | perusahaan |
PENGATURAN DEFAULT | Dalam | BAPIDEFAUL | pengaturan awal |
LOGONDATA | Dalam | BAPILOGOND | logOnData |
KATA SANDI | Dalam | BAPIPWD | kata sandi |
KEMBALI | Masuk-Keluar | TABLE_OF_BAPIRET2 | bapiret2Table |
Registrasi Mandiri | Dalam | String | "X" |
NAMA PENGGUNA | Dalam | String | userName |
- Pilih OK. Tanda peringatan menghilang.
- Untuk memproses membuat hasil permintaan pengguna, seret dan letakkan aktivitas IF di dalam aktivitas Urutan setelah aktivitas WebServiceCall. Masukkan kondisi berikut:
IsNothing (bapiret2Table.item) OrElse bapiret2Table.item.Count(Function(errItem) errItem.TYPE.Equals("E") = True) <> 0
- Jika kami tidak mendapatkan kesalahan, kami berasumsi bahwa operasi ekspor berhasil diselesaikan, dan kami ingin menunjukkan keberhasilan ekspor objek ini dengan membuat CSEntryChangeResult dengan status Keberhasilan. Seret dan letakkan aktivitas CreateCSEntryChangeResult ke cabang Else dari aktivitas IF Anda dan pilih kode kesalahan Success.
- Opsional: Jika panggilan layanan web mengembalikan nama akun pengguna yang dihasilkan, kita perlu memperbarui nilai jangkar objek yang diekspor. Untuk melakukannya, seret dan letakkan
CreateAttrubuteChange
aktivitas ke dalam aktivitasCreateCSEntryChangeResult
dan pilih untuk menambahkan nama pengguna. Kemudian seret dan letakkanCreateValueChange
aktivitas di dalam aktivitasCreateAttributeChange
dan masukkan nama variabel yang dihasilkan oleh aktivitas panggilan layanan web. Dalam panduan ini, Anda menggunakan variabel userName yang tidak diperbarui saat diekspor.
- Langkah terakhir dalam alur kerja Penambahan Ekspor adalah menangani dan mencatat kesalahan ekspor. Seret dan letakkan Aktivitas Urutan ke dalam cabang kosong Then Aktivitas IF Anda.
- Seret dan letakkan aktivitas Log ke dalam aktivitas Urutan. Beralih ke tab Properti dan masukkan nilai LogText dari:
bapiret2Table.item.First(Function(retItem) retItem.TYPE.Equals("E"))
. PESAN. Pertahankan level pencatatan tinggi dan tag Jejak. Ini mencatat pesan kesalahan ke ConnectorsLog atau log peristiwa ECMA2Host saat pelacakan verbose diaktifkan. - Seret dan letakkan Aktivitas sakelar di dalam aktivitas Urutan setelah aktivitas Log. Di jendela popup, pilih jenis String untuk nilai sakelar. Masukkan ekspresi berikut:
bapiret2Table.item.First(Function(retItem) retItem.TYPE.Equals("E")).NUMBER
- Pilih pada Kasus default dan seret dan letakkan aktivitas CreateCSEntryChangeResult ke dalam isi kasus ini. Pilih Kode kesalahan ExportErrorInvalidProvisioningAttributeValue.
- Pilih pada area Tambahkan kasus baru dan ketik nilai kasus 224. Seret dan letakkan
CreateCSEntryChangeResult
aktivitas ke dalam isi kasus ini. PilihExportErrorCustomContinueRun
kode kesalahan.
Anda menyelesaikan definisi Ekspor Tambahkan alur kerja.
Membuat alur kerja untuk menghapus data ekspor
Untuk menghapus pengguna di SAP ECC, Anda dapat memanggil program BAPI_USER_DELETE dan memberikan nama akun untuk dihapus dalam sistem yang terhubung. Konsultasikan dengan Administrator SAP Anda untuk menentukan apakah skenario ini wajib. Paling sering, akun SAP ECC tidak dihapus tetapi diatur kedaluwarsa untuk menyimpan catatan historis.
Panduan ini tidak mencakup skenario yang terkait dengan sistem Administrasi Pengguna Umum SAP, deprovisi pengguna dari sistem yang terhubung, pencabutan lisensi, dll.
Tidak perlu menerapkan penomoran halaman dalam alur kerja ekspor. Hanya ada satu objek objectToExport yang tersedia dalam konteks alur kerja.
- Arahkan ke Jenis Objek -> Pengguna -> Ekspor -> Hapus alur kerja dan dari Kotak Alat di sebelah kanan, seret dan jatuhkan aktivitas Sequence ke desainer alur kerja.
- Di kiri bawah, temukan tombol Variabel dan pilih untuk memperluas daftar variabel yang ditentukan dalam Urutan ini.
- Tambahkan variabel berikut. Untuk memilih jenis variabel yang dihasilkan dari SAP WSDL, pilih Telusuri Jenis dan perluas jenis yang dihasilkan, lalu perluas namespace SAPECC. Ini menginisialisasi struktur data yang digunakan oleh program BAPI_USER_DELETE.
Nama | Tipe Variabel | Cakupan | Bawaan |
---|---|---|---|
userName | String | Urutan | |
bapiret2Table | SAPECC. TABLE_OF_BAPIRET2 | Urutan | buat TABLE_OF_BAPIRET2 baru() |
- Saat kami mendefinisikan properti userName sebagai ID yang tidak dapat diubah, jangkar, kita perlu mengekstrak nilai userName dari kumpulan jangkar objek ekspor kita. Seret dan letakkan aktivitas ForEachWithBodyFactory dari Kotak Alat ke dalam aktivitas Sequence Anda. Ganti nama variabel item dengan jangkar, beralihlah ke properti dan pilih TypeArgument dari
Microsoft.MetadirectoryServices.AnchorAttribute
. Di bidang Nilai, ketikobjectToExport.AnchorAttributes
.
- Untuk mengekstrak nilai string jangkar userName, seret dan letakkan aktivitas Switch di dalam aktivitas ForEach. Di jendela popup, pilih jenis sakelar
Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AnchorAttributeNameWrapper
. Masukkan nilai Ekspresi: BaruAnchorAttributeNameWrapper(anchor.Name)
. Pilih Tambahkan area kasus baru aktivitas Switch. Ketik userName sebagai Nilai Kasus. Seret dan letakkan Tetapkan aktivitas ke dalam isi kasus userName dan tetapkananchor.Value.ToString()
ke variabel userName. - Seret dan letakkan aktivitas WebSeviceCall di dalam aktivitas Urutan setelah aktivitas ForEach. Pilih nama layanan SAPECC, endpoint ZSAPCONNECTORWS, dan operasi BAPI_USER_DELETE. Pilih pada ... Tombol Argumen untuk menentukan parameter untuk panggilan layanan web sebagai berikut:
Nama | Arah | Tipe | Nilai |
---|---|---|---|
KEMBALI | Masuk/Keluar | TABEL_DARI_BAPIRET2 | bapiret2Tabel |
NAMA PENGGUNA | Dalam | String | userName |
- Pilih OK. Tanda peringatan menghilang.
- Untuk memproses menghapus hasil permintaan pengguna, seret dan letakkan aktivitas IF di dalam aktivitas Urutan setelah aktivitas WebServiceCall. Masukkan kondisi berikut:
If(bapiRet2Table.item, Enumerable.Empty(Of BAPIRET2)()).Count(Function(errItem) errItem.TYPE.Equals("E") = True) <> 0
- Jika kami tidak mendapatkan kesalahan, kami berasumsi bahwa operasi penghapusan berhasil diselesaikan dan kami ingin menunjukkan keberhasilan ekspor objek ini dengan membuat
CSEntryChangeResult
dengan status Berhasil. Seret dan letakkanCreateCSEntryChangeResult
aktivitas ke cabang Else dari aktivitas IF Anda dan pilih kode kesalahan Success.
- Langkah terakhir dalam alur kerja Hapus Ekspor adalah menangani dan mencatat kesalahan ekspor. Seret dan letakkan aktivitas urutan ke dalam cabang kosong bagian Lalu aktivitas IF Anda.
- Tarik dan lepaskan aktivitas Log ke dalam aktivitas Sequence. Beralih ke tab Properti dan masukkan nilai LogText dari:
bapiRetTable.item.First(Function(retItem) retItem.TYPE.Equals("E")= True).MESSAGE
. Pertahankan tingkat logging tinggi dan tag Trace. Ini mencatat pesan kesalahan ke log peristiwa ConnectorsLog atau ECMA2Host saat pelacakan verbose diaktifkan. - Seret dan letakkan Aktivitas sakelar di dalam aktivitas Urutan setelah aktivitas Log. Di jendela popup, pilih jenis String untuk nilai sakelar. Masukkan ekspresi berikut:
bapiret2Table.item.First(Function(retItem) retItem.TYPE.Equals("E")).NUMBER
- Pilih pada Kasus default dan seret dan letakkan aktivitas CreateCSEntryChangeResult ke dalam isi kasus ini. Pilih Kode kesalahan ExportErrorSyntaxViolation.
- Pilih pada area Tambahkan kasus baru dan ketik nilai kasus 124. Seret dan letakkan
CreateCSEntryChangeResult
aktivitas ke dalam isi kasus ini. PilihExportErrorCustomContinueRun
kode kesalahan.
Anda menyelesaikan definisi alur kerja Ekspor Hapus.
Membuat alur kerja Penggantian Ekspor
Untuk memperbarui pengguna di SAP ECC, Anda dapat memanggil program BAPI_USER_CHANGE dan menyediakan semua parameter termasuk nama akun dan semua detail pengguna, termasuk yang tidak berubah. Mode ekspor ECMA2 ketika semua atribut pengguna harus disediakan disebut Ganti. Sebagai perbandingan, mode ekspor AttributeUpdate hanya menyediakan atribut yang sedang diubah, dan ini dapat menyebabkan beberapa properti pengguna tertimpa oleh nilai kosong. Oleh karena itu, konektor Webservice selalu menggunakan mode ekspor Object Replace dan diharapkan konektor dikonfigurasi untuk jenis ekspor: Replace.
Alur kerja Ekspor Ganti hampir identik dengan alur kerja Ekspor Tambahkan. Satu-satunya perbedaan adalah Anda perlu menentukan parameter tambahan seperti addressX atau companyX untuk program BAPI_USER_CHANGE. X di akhir addressX menunjukkan bahwa struktur alamat memang berisi perubahan.
- Navigasikan ke Jenis Objek -> Pengguna -> Ekspor -> Ganti alur kerja dan dari Kotak Alat, seret dan lepas aktivitas Urutan ke dalam panel perancang alur kerja.
- Di kiri bawah, temukan tombol Variabel dan pilih untuk memperluas daftar variabel yang ditentukan dalam Urutan ini.
- Tambahkan variabel berikut. Untuk memilih jenis variabel yang dihasilkan dari SAP WSDL, pilih Telusuri Jenis dan perluas jenis yang dihasilkan, lalu perluas namespace SAPECC. Ini menginisialisasi struktur data yang digunakan oleh program BAPI_USER_CHANGE.
Nama | Tipe Variabel | Cakupan | Bawaan |
---|---|---|---|
userName | String | Urutan | |
bapiret2Table | SAPECC. TABLE_OF_BAPIRET2 | Urutan | TABLE_OF_BAPIRET2 baru() |
addressX | SAPECC. BAPIADDR3X | Urutan | BAPIADDR3X baru() |
alamat | SAPECC. BAPIADDR3 | Urutan | BAPIADDR3 baru() |
companyX | SAPECC. BAPIUSCOMX | Urutan | new BAPIUSCOMX() |
perusahaan | SAPECC.BAPIUSCOMP | Urutan | BAPIUSCOMP() baru |
defaultsX | SAPECC. BAPIDEFAX | Urutan | BAPIDEFAX() baru |
pengaturan bawaan | SAPECC. BAPIDEFAUL | Urutan | BAPIDEFAUL() baru |
logOnDataX | SAPECC. BAPILOGONX | Urutan | BAPILOGONX() baru |
logOnData | SAPECC.BAPILOGOND | Urutan | BAPILOGOND() baru |
Alur kerja Penggantian Ekspor Anda terlihat seperti ini:
- Saat kami mendefinisikan properti userName sebagai ID yang tidak dapat diubah, jangkar, kita perlu mengekstrak nilai userName dari kumpulan jangkar objek ekspor kita. Seret dan letakkan aktivitas ForEachWithBodyFactory dari Kotak Alat ke aktivitas Secuens Anda. Ganti nama variabel item dengan jangkar, beralihlah ke properti dan pilih TypeArgument dari
Microsoft.MetadirectoryServices.AnchorAttribute
. Di bidang Nilai, ketikobjectToExport.AnchorAttributes
.
- Untuk mengekstrak nilai string jangkar userName, seret dan letakkan aktivitas Switch di dalam aktivitas ForEach. Di jendela popup, pilih jenis sakelar
Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AnchorAttributeNameWrapper
. Masukkan nilai Ekspresi: BaruAnchorAttributeNameWrapper(anchor.Name)
. Pilih Tambahkan area kasus baru pada aktivitas Switch. Ketik userName sebagai Nilai Kasus. Seret dan letakkan Tetapkan aktivitas ke dalam isi kasus userName dan tetapkananchor.Value.ToString()
ke variabel userName. Alur kerja Penggantian Ekspor Anda terlihat seperti ini:
- Sekarang setelah kita mengekstrak nilai userName dari properti jangkar objek yang diekspor, kita perlu mengisi struktur lain seperti perusahaan, default, alamat, data masuk yang berisi detail pengguna SAP lainnya. Kami melakukan ini dengan menelusuri kumpulan semua atribut yang ditentukan dalam skema.
- Tutup aktivitas ForEach Anda dan seret dan letakkan aktivitas ForEachWithBothFactory lain ke dalam aktivitas Sequence Anda setelah aktivitas ForEach yang ada. Ganti nama variabel item dengan schemaAttr, beralihlah ke properti dan pilih TypeArgument dari
Microsoft.MetadirectoryServices.SchemaAttribute
. Di bidang Nilai, ketikschemaType.Attributes
.
- Seret dan letakkan aktivitas Urutan ke dalam isi aktivitas ForEach Anda. Di kiri bawah, temukan tombol Variabel dan pilih untuk memperluas daftar variabel yang ditentukan dalam Urutan ini. Tambahkan variabel berikut: xValue dari tipe String. Seret dan jatuhkan aktivitas "Tetapkan" ke dalam aktivitas "Urutan" Anda. Tetapkan ekspresi xValue:
If(objectToExport.AttributeChanges.Contains(schemaAttr.Name), objectToExport.AttributeChanges(schemaAttr.Name).ValueChanges(0).Value.ToString(), String.Empty)
Ini akan mengekstrak perubahan yang direncanakan untuk diekspor untuk atribut ini, atau menginisialisasinya dengan string kosong. Alur kerja Penggantian Ekspor Anda terlihat seperti ini:
- Seret dan jatuhkan aktivitas Beralih setelah aktivitas Tetapkan. Di menu popup, pilih
Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AttributeNameWrapper
dan pilih Ok. Masukkan ekspresi berikut: BaruAttributeNameWrapper(schemaAttr.Name)
. Anda akan melihat ikon peringatan di sudut kanan atas aktivitas Switch Anda tentang atribut yang belum diolah yang ditentukan dalam skema dan tidak ditetapkan ke properti apa pun. Pilih pada area Tambahkan kasus baru pada aktivitas Beralih dan ketik nilai kasus kota. Seret dan letakkan aktivitas Sequence ke dalam isi kasus ini. Seret dan letakkan aktivitas Tetapkan ke dalam isi kasus ini. Tetapkan nilai "X" ke addressX.city. Seret dan letakkan aktivitas Tetapkan lain ke dalam isi kasus ini. Tetapkan xValue ke address.city. Alur kerja Penggantian Ekspor Anda terlihat seperti ini:
10.Tambahkan kasus dan penugasan lain yang hilang. Gunakan tabel pemetaan ini sebagai panduan:
Kasus | Penugasan |
---|---|
kota | addressX.city = "X" address.city = xValue |
perusahaan | companyX.company = "X" company.company = xValue |
departemen | address.departmentX = "X" address.department = xValue |
alamatX.e_mail = "X" alamat.e_mail = nilaiX | |
waktu kedaluwarsa | logOnDataX.GLTGB = "X" logOnData.GLTGB = xValue |
nama depan | addressX.firstname = "X" address.firstname = xValue |
nama belakang | addressX.lastname = "X" address.lastname = xValue |
nama tengah | addressX.middlename = "X" address.middlename = xValue |
nomor telepon | addressX.TEL1_Numbr = alamat "X". TEL1_Numbr = xValue |
jabatan | addressX.function = "X" address.function = xValue |
Alur kerja Penggantian Ekspor Anda terlihat seperti ini:
Sebelum memanggil program BAPI_USER_CHANGE, kita perlu memeriksa nama pengguna yang tidak kosong. Ciutkan kedua aktivitas ForEach dan seret dan lepaskan aktivitas IF setelah aktivitas ForEach kedua. Masukkan kondisi berikut:
String.IsNullOrEmpty(userName ) = False
Ketika nama pengguna kosong, kami ingin menunjukkan bahwa operasi tidak berhasil. Seret dan jatuhkan
CreateCSEntryChangeResult
aktivitas ke cabang Else dari aktivitas IF Anda dan pilihExportErrorCustomContinueRun
kode kesalahan. Alur kerja Penggantian Ekspor Anda terlihat seperti ini:Seret dan letakkan aktivitas urutan di cabang Kemudian kosong dari aktivitas IF pertama. Seret dan letakkan aktivitas WebSeviceCall di dalam aktivitas Urutan. Pilih nama layanan SAPECC, titik akhir ZSAPCONNECTORWS, dan operasi BAPI_USER_CHANGE. Pilih pada ... Tombol Argumen untuk menentukan parameter untuk panggilan layanan web sebagai berikut:
Nama | Arah | Tipe | Nilai |
---|---|---|---|
ALAMAT | Dalam | BAPIADDR3 | alamat |
ADDRESSX | Dalam | BAPIADDR3X | addressX |
PERUSAHAAN | Dalam | BAPIUSCOMP | perusahaan |
COMPANYX | Dalam | BAPIUSCOMX | perusahaan |
DEFAULT | Dalam | BAPIDEFAUL | default |
DEFAULTSX | Dalam | BAPIDEFAX | defaultsX |
LOGONDATA | Dalam | BAPILOGOND | logOnData |
LOGONDATAX | Dalam | BAPILOGONX | logOnDataX |
KEMBALI | Masuk/Keluar | Tabel_BAPIRET2 | bapiret2Table |
NAMA PENGGUNA | Dalam | String | userName |
- Pilih OK. Tanda peringatan menghilang. Alur kerja Penggantian Ekspor Anda terlihat seperti ini:
- Untuk memproses perubahan hasil permintaan pengguna, seret dan letakkan aktivitas IF di dalam aktivitas Urutan setelah aktivitas WebServiceCall. Masukkan kondisi berikut:
Not IsNothing(bapiret2Table.item) AndAlso bapiret2Table.item.Count(Function(errItem) errItem.TYPE.Equals("E") = True) <> 0
- Jika kami tidak mendapatkan kesalahan, kami berasumsi bahwa operasi ekspor berhasil diselesaikan, dan kami ingin menunjukkan keberhasilan ekspor objek ini dengan membuat
CSEntryChangeResult
dengan status Berhasil. Seret dan letakkanCreateCSEntryChangeResult
aktivitas ke cabang Lain dari aktivitas IF Anda dan pilih Kode kesalahan keberhasilan. - Seret dan letakkan aktivitas Urutan ke cabang 'Then' dari aktivitas IF Anda. Tambahkan aktivitas log dengan nilai LogText dari
string.Join("\n",bapiret2Table.item.Where(Function(retItem) retItem.TYPE.Equals("E")).Select(Function(r) r.MESSAGE))
dan Tag kesalahan. Tambahkan aktivitasCreateCSEntryChangeResult
setelah aktivitas Log dengan kode kesalahanExportErrorCustomContinueRun
. Alur kerja Penggantian Ekspor Anda terlihat seperti ini:
Anda menyelesaikan definisi alur kerja Ekspor Ganti.
Langkah selanjutnya adalah mengonfigurasi konektor ECMA2Host Webservice menggunakan templat ini.