Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Tujuan dari sampel ini adalah untuk membangun aplikasi prosesor pesan yang disusun yang memproses item baris individual dari pesan agregat.
Secara khusus kami akan membangun jadwal orkestrasi yang:
Menerima pesan pertukaran batch yang terdiri dari beberapa pesanan pembelian.
Membongkar pesan pertukaran ke dalam dokumen pesanan pembelian individual.
Memproses setiap dokumen – mengonversi setiap pesanan pembelian menjadi pesan faktur.
Merakit semua pesan faktur ke dalam pertukaran batch.
Langkah #3 disederhanakan untuk tujuan sampel. Misalnya, dalam aplikasi yang lebih kompleks, orkestrasi dapat mengirim pesanan pembelian yang dibongkar ke sistem inventarisasi back-end yang berbeda dan kemudian setelah mengumpulkan semua respons, menggabungkannya ke dalam satu pesan faktur batch.
Untuk informasi lebih lanjut tentang pola prosesor pesan yang disusur, lihat [1].
Apa fungsi sampel ini
Ada dua proyek dalam solusi sampel, yang keduanya dijelaskan secara rinci di bagian berikut.
Alur dan Skema
Alur dan proyek skema berisi:
Skema file datar untuk pertukaran pesanan pembelian input dan untuk pertukaran faktur output.
Petakan untuk mengubah dokumen pesanan pembelian menjadi dokumen faktur.
Menerima dan mengirim alur.
Skema File Datar Untuk Pertukaran Input dan Output
Aplikasi sampel kami akan bekerja dengan pertukaran dalam format file datar. Di bawah ini adalah contoh pertukaran pesanan pembelian dan pertukaran faktur:
Pertukaran pesanan pembelian (CMPInput.txt):
Northwind Shipping
Batch type:Purchase Orders
PO1999-10-20
US Alice Smith 123 Maple Street Mill Valley CA 90952
US Robert Smith 8 Oak Avenue Old Town PA 95819
Hurry, my lawn is going wild!
ITEMS,ITEM872-AA|Lawnmower|1|148.95|Confirm this is electric,ITEM926-AA|Baby Monitor|1|39.98|Confirm this is electric|1999-10-21
PO1999-10-21
US John Dow 123 Elm Street Mill Valley CA 90952
US July Dow 8 Pine Avenue Old Town PA 95819
Please ship it urgent!
ITEMS,ITEM398-BB|Tire|4|324.99|Wrap them up nicely,ITEM201-BB|Engine Oil|1|12.99|SAE10W30|1999-05-22
PO1999-10-23
US John Connor 123 Cedar Street Mill Valley CA 90952
US Sarah Connor 8 Grass Avenue Old Town PA 95819
Use cheapest shipping method.
ITEMS,ITEM101-TT|Plastic flowers|10|4.99|Fragile handle with care,ITEM202-RR|Fertilizer|1|10.99|Lawn fertilizer,ITEM453-XS|Weed killer|1|5.99|Lawn weed killer|1999-05-25
Dokumen pertukaran, atau pesanan pembelian, memiliki header yang mengidentifikasi jenis dokumen apa yang dikandungnya:
Northwind Shipping
Batch type:Purchase Orders
Pertukaran ini terdiri dari tiga dokumen pesanan pembelian. Satu instans terdiri dari informasi yang ditunjukkan di bawah ini. Seperti yang Anda lihat, ini berisi informasi seperti alamat untuk penagihan dan pengiriman serta daftar item yang dipesan.
PO1999-10-20
US Alice Smith 123 Maple Street Mill Valley CA 90952
US Robert Smith 8 Oak Avenue Old Town PA 95819
Hurry, my lawn is going wild!
ITEMS,ITEM872-AA|Lawnmower|1|148.95|Confirm this is electric,ITEM926-AA|Baby Monitor|1|39.98|Confirm this is electric|1999-10-21
Pertukaran faktur yang ingin kita hasilkan untuk ini akan terlihat seperti berikut ini:
Northwest Shipping
DocumentTypes:Invoices
INVOICE1999-10-20
BILLTO,US,Alice Smith,123 Maple Street,Mill Valley,CA,90952
872-AA Lawnmower 1 148.95 Confirm this is electric
926-AA Baby Monitor 1 39.98 Confirm this is electric
INVOICE1999-10-21
BILLTO,US,John Dow,123 Elm Street,Mill Valley,CA,90952
398-BB Tire 4 324.99 Wrap them up nicely
201-BB Engine Oil 1 12.99 SAE10W30
INVOICE1999-10-20
BILLTO,US,John Connor,123 Cedar Street,Mill Valley,CA,90952
101-TT Plastic flowers 10 4.99 Fragile handle with care
202-RR Fertilizer 1 10.99 Lawn fertilizer
453-XS Weed killer 1 5.99 Lawn weed killer
Pertukaran ini berisi subset informasi yang berada dalam pertukaran pesanan pembelian dan juga format pertukaran serta format header berbeda.
Header adalah sebagai berikut:
Northwest Shipping
DocumentTypes:Invoices
Dan instans dokumen mencakup hal-hal berikut:
INVOICE1999-10-20
BILLTO,US,Alice Smith,123 Maple Street,Mill Valley,CA,90952
872-AA Lawnmower 1 148.95 Confirm this is electric
926-AA Baby Monitor 1 39.98 Confirm this is electric
Hal pertama yang perlu kita buat skema file datar untuk:
Dokumen pesanan pembelian (PO.xsd)
Dokumen faktur (Invoice.xsd)
Header pesanan pembelian (POHeader.xsd)
Header faktur (InvoiceHeader.xsd)
Untuk sampel ini, kami tidak akan menjelaskan proses pembuatan skema file datar. Untuk mempelajari cara membuat skema file datar dari instans dokumen, lihat bagian dokumentasi "Membuat skema file datar dari instans dokumen".
Peta untuk Mengubah Dokumen Pesanan Pembelian Menjadi Dokumen Faktur
Peta (PO2Invoice.btm) mengubah instans pesanan pembelian menjadi dokumen faktur.
Terima dan Kirim Alur
Alur penerima (FFReceivePipeline.btp) berisi komponen pembingkar file datar yang digunakan untuk memproses pertukaran pesanan pembelian. Secara khusus, untuk pertukaran dalam file CMPInput.txt, ia menghapus header pertukaran dan menghasilkan tiga dokumen XML yang sesuai dengan tiga pesanan pembelian.
Pembbongkar file datar dalam alur penerima dikonfigurasi seperti yang ditunjukkan:
Skema dokumen: PipelinesAndSchemas.PO
Skema header: PipelinesAndSchemas.POHeader
Pertahankan header: Palsu
Pertukaran yang dapat dipulihkan: Palsu
Skema trailer: (Tidak ada)
Validasi struktur dokumen: Palsu
Alur kirim (FFSendPipeline.btp) berisi komponen perakitan file datar yang digunakan untuk membuat pertukaran faktur agregat.
Perakitan file datar dalam alur pengiriman dikonfigurasi seperti yang ditunjukkan:
Skema dokumen: PipelinesandSchemas.Invoice
Skema header: PipelinesAndSchemas.InvoiceHeader
Pertahankan tanda urutan byte: Palsu
Charset target: (Tidak ada)
Skema trailer: (Tidak ada)
Jadwal Orkestrasi
Jadwal orkestrasi (CMP.odx) adalah tempat semua pemrosesan utama terjadi. Secara khusus tindakan berikut dilakukan:
Alur penerima dijalankan untuk membongkar pertukaran pesanan pembelian
Setiap pesan output dari alur penerima diubah
Alur pengiriman dijalankan untuk merakit pertukaran faktur
Membuat Jadwal Orkestrasi dan Menentukan Variabel Global
Orkestrasi kami akan menerima pertukaran file datar sebagai input dan akan mengirim pertukaran file datar sebagai output. Karena itu, kita perlu menentukan pesan input dan output (masing-masing disebut InputInterchange dan OutputInterchange) sebagai jenis agnostik (yaitu memiliki jenis System.Xml. XmlDocument).
Selain itu, kita perlu menentukan cakupan atom di mana kita akan memproses pesan. Ini diperlukan karena alur penerima dapat dijalankan dalam cakupan atomik.
Menjalankan Alur Penerimaan
Sebagai langkah berikutnya, kita akan menambahkan logika untuk menjalankan alur penerima untuk pesan yang diterima dalam orkestrasi. Untuk melakukan ini, pertama-tama kami mendeklarasikan variabel (disebut RcvPipeOutput) jenis Microsoft.XLANGs.Pipeline.ReceivePipelineOutputMessages dalam cakupan. Variabel ini adalah enumerator yang memungkinkan kita untuk menelusuri pesan output alur penerima. Perhatikan bahwa untuk mengakses jenis ini, serta semua jenis lainnya untuk eksekusi alur dari orkestrasi, Anda perlu menambahkan referensi ke rakitan berikut:
Microsoft.XLANGs.Pipeline.dll
Microsoft.BizTalk.Pipeline.dll
Tidak ada jaminan bahwa alur penerima akan selalu berhasil dijalankan. Terkadang pesan mungkin salah bentuk, yang akan menyebabkan pemrosesan alur gagal. Ketika alur gagal dieksekusi dalam orkestrasi, ada pengecualian yang dilemparkan yang dapat ditangkap dan logika penanganan kesalahan dapat dilakukan. Agar kita dapat menangkap pengecualian yang dilemparkan oleh alur, kita perlu menjalankan alur dalam cakupan non-atomik dengan penanganan pengecualian. Kode aktual untuk menjalankan alur dipanggil dari bentuk ekspresi dalam cakupan tersebut.
Dalam bentuk ekspresi ExecuteRcvPipe, tulis baris kode berikut untuk menjalankan alur penerima:
RcvPipeOutput = Microsoft.XLANGs.Pipeline.XLANGPipelineManager.ExecuteReceivePipeline(typeof(PipelinesAndSchemas.FFReceivePipeline), InputInterchange);
Mari kita analisis baris kode ini secara lebih rinci. Seperti yang Anda lihat, kami memanggil metode statis ExecuteReceivePipeline yang mengambil sebagai parameter jenis alur penerima untuk dijalankan dan pesan input. Akibatnya, menghasilkan objek enumerator dengan serangkaian pesan output. Hasilnya ditetapkan ke variabel jenis ReceivePipelineOutputMessages yang ditentukan dalam cakupan ini sebelumnya.
Kami juga telah menyertakan blok penanganan pengecualian untuk cakupan eksekusi alur. Blok ini menangkap pengecualian jenis XLANGPipelineManagerException dan kemudian karena alasan kesederhanaan hanya mengakhiri instans orkestrasi dengan pesan kesalahan yang disesuaikan.
Dalam skenario yang lebih kompleks, penanganan kesalahan tambahan dapat dilakukan di sini, seperti pembuatan atau pesan pemberitahuan kesalahan dan mengirimkannya ke pengguna bisnis atau administrator menggunakan email.
Mengubah Pesan Output Alur
Setelah alur dijalankan dan kumpulan pesan yang dibongkar telah diproduksi, kita perlu mengubah setiap pesan output menjadi format yang berbeda.
Untuk menggunakan transformasi dalam orkestrasi, kita perlu menentukan dua pesan – input dan output transformasi. Kami akan mendefinisikan pesan-pesan tersebut dalam cakupan atom. Pesan input transformasi yang disebut TmpMessageIn akan berjenis PipelinesAndSchemas.PO. Pesan output transformasi yang disebut TmpMessageOut akan berjenis PipeliensAndSchemas.Invoice. Kami akan menerapkan peta PO2Invoice.btm yang didefinisikan dalam proyek PipelinesAndSchemas.
Karena kita ingin memetakan setiap pesan output alur, kita perlu melakukan transformasi dalam perulangan. Kami akan menggunakan bentuk perulangan dengan kondisi untuk keluar seperti di bawah ini:
RcvPipeOutput.MoveNext()
Metode MoveNext() adalah metode standar antarmuka IEnumerator .NET yang memungkinkan untuk bergerak dalam kumpulan pesan output alur. Ketika mencapai akhir koleksi, ia mengembalikan false.
Bentuk konstruksi pertama digunakan untuk membuat pesan orkestrasi TmpMessageIn dari pesan output alur.
Kode dalam bentuk konstruksi:
TmpMessageIn = null;
RcvPipeOutput.GetCurrent(TmpMessageIn);
Dalam kode ini kita pertama kali menginisialisasi pesan orkestrasi ke null dan kemudian mengaturnya ke pesan saat ini dari kumpulan pesan output alur.
Dalam bentuk konstruksi kedua transformasi aktual TmpMessageIn dilakukan dan TmpMessageOut jenis PipelinesAndSchemas.Invoice dibangun.
Menjalankan Kirim Alur
Langkah pemrosesan terakhir dalam orkestrasi adalah menjalankan alur pengiriman file datar untuk merakit semua pesan xml yang diubah menjadi satu pertukaran file datar.
Untuk menjalankan alur pengiriman, kita perlu menggunakan variabel jenis Microsoft.XLANGs.Pipeline.SendPipelineInputMessages yang disebut SendPipeInput yang akan menyimpan kumpulan pesan orkestrasi yang perlu diproses dalam alur kirim.
Dalam ekspresi terakhir perulangan tempat kita melakukan transformasi, kita akan menulis kode yang akan menambahkan setiap pesan yang diubah ke koleksi pesan untuk mengirim alur:
SendPipeInput.Add(TmpMessageOut);
Mirip dengan bagian di mana kita menjalankan menerima alur kode untuk eksekusi alur kirim ditempatkan dalam cakupan non-atomik dengan blok penanganan pengecualian. Kode eksekusi alur kirim terletak dalam bentuk penetapan pesan dari blok konstruksi.
OutputInterchange = null;
Microsoft.XLANGs.Pipeline.XLANGPipelineManager.ExecuteSendPipeline(typeof(PipelinesAndSchemas.FFSendPipeline), SendPipeInput, OutputInterchange);
Blok konstruksi digunakan untuk membangun jenis agnostik (yaitu System.Xml. Pesan output alur XmlDocument) OutputInterchange. Kemudian dalam bentuk penetapan pesan, pesan yang baru dibuat diinisialisasi ke null. Setelah itu metode statis ExecuteSendPipeline dipanggil untuk menjalankan alur kirim. Metode ini mengambil sebagai parameter jenis alur kirim untuk dijalankan, pesan input dan referensi ke pesan output tempat output alur akan disimpan.
Seperti halnya eksekusi alur penerima, di sini kami juga memiliki blok penanganan pengecualian untuk cakupan eksekusi alur. Blok ini menangkap pengecualian jenis XLANGPipelineManagerException dan kemudian karena alasan kesederhanaan hanya mengakhiri instans orkestrasi dengan pesan kesalahan yang disesuaikan.
Tempat Menemukan Sampel Ini
Tabel berikut mencantumkan file untuk sampel ini.
| File | Deskripsi |
|---|---|
| Cleanup.bat | Digunakan untuk membatalkan penyebaran rakitan dan menghapusnya dari cache perakitan global (GAC). Menghapus port kirim dan terima. Menghapus direktori virtual Microsoft Internet Information Services (IIS) sesuai kebutuhan. |
| ComposedMessageProcessor.sln | File solusi Visual Studio untuk sampel. |
| ComposedMessageProcessorBinding.xml | Mengikat file untuk sampel. |
| Setup.bat | Digunakan untuk membangun dan menginisialisasi sampel ini. |
| Di folder Orkestrasi: CMP.odx |
Orkestrasi yang menjalankan alur penerima untuk membongkar pesan, mengubah setiap pesan yang dibongkar lalu menjalankan pengiriman alur untuk merakit pesan menjadi pertukaran. |
| Di folder Orkestrasi: Orchestration.btproj |
Proyek BizTalk untuk orkestrasi. |
| Di folder Orkestrasi: SuspendMessage.odx |
Orkestrasi yang digunakan untuk menangguhkan pesan yang gagal memproses alur. |
| Di folder PipelinesAndSchemas: CMPInput.xml, CMPOutput.xml |
Instans dokumen input dan output untuk sampel. |
| Di folder PipelinesAndSchemas: FFReceivePipeline.btp, FFSendPipeline.btp |
Menerima dan mengirim alur dengan komponen file datar. Alur ini dijalankan dalam orkestrasi. |
| Di folder PipelinesAndSchemas: Invoice.xsd, InvoiceHeader.xsd |
Skema file datar untuk dokumen output dan header. |
| Di folder PipelinesAndSchemas: PO.xsd, POHeader.xsd |
Skema file datar untuk dokumen input dan header. |
| Di folder PipelinesAndSchemas: PropertySchema.xsd |
Skema properti untuk sampel. |
Membangun dan Menginisialisasi Sampel
Gunakan prosedur berikut untuk membangun dan menginisialisasi sampel Buat.
Untuk membangun dan menginisialisasi sampel Buat
Di jendela perintah, navigasikan ke folder berikut:
<Samples Path>\Pipelines\ComposedMessageProcessor
Jalankan Setup.bat file, yang melakukan tindakan berikut:
Membuat folder input (Masuk) dan output (Keluar) untuk sampel ini di folder :
<Samples Path>\Pipelines\ComposedMessageProcessor
Mengkompilasi proyek Visual Studio untuk sampel ini.
Membuat aplikasi baru yang disebut "Sampel CMP" dan menyebarkan rakitan sampel ke dalamnya.
Membuat dan mengikat lokasi penerimaan BizTalk Server, dan port kirim dan terima.
Mendaftarkan dan memulai orkestrasi, mengaktifkan lokasi terima, dan memulai port kirim.
Jika Anda memilih untuk membuka dan membangun proyek dalam sampel ini tanpa menjalankan Setup.bat file, Anda harus terlebih dahulu membuat pasangan kunci nama yang kuat menggunakan utilitas Nama Kuat .NET Framework (sn.exe). Gunakan pasangan kunci ini digunakan untuk menandatangani rakitan yang dihasilkan.
Sebelum mencoba menjalankan sampel ini, konfirmasikan bahwa BizTalk Server tidak melaporkan kesalahan apa pun selama proses build dan inisialisasi.
Untuk membatalkan perubahan yang dibuat oleh Setup.bat, Anda harus melakukan hal berikut:
Hentikan dan mulai ulang instans host dari konsol Administrasi BizTalk Server.
Jalankan Cleanup.bat. Anda harus menjalankan Cleanup.bat sebelum menjalankan Setup.bat untuk kedua kalinya.
Menjalankan sampel
Gunakan prosedur berikut untuk menjalankan sampel ComposedMessageProcessor.
Untuk menjalankan sampel ComposedMessageProcessor
Salin file teks CMPInput.txt yang terletak di folder PipelinesAndSchemas. Tempelkan file ke dalam folder Masuk.
Amati file teks yang dibuat di folder Keluar. File ini berisi rekaman yang sama dengan CMPInput.txt, tetapi format data dalam file berbeda.
Saat pesan melewati BizTalk Server, hal berikut ini terjadi:
Pesan akan dibongkar dan dikonversi menjadi pesan XML. Setiap pesan dipetakan ke format yang berbeda.
Semua pesan yang dipetakan dirakit bersama-sama dan dikonversi menjadi format file datar.