Bagikan melalui


Mengelola Perilaku Pemeta Bawaan Menggunakan <mapsource>

Anda dapat memodifikasi perilaku default tertentu dari BizTalk Mapper dengan memodifikasi atribut elemen mapsource langsung dalam file sumber peta (.btm).

Mengoptimalkan Generasi Kode Functoid untuk Pemetaan Nilai

Ketika Pemeta menghasilkan kode XSLT untuk memanggil functoid Pemetaan Nilai , variabel digunakan untuk menyimpan hasilnya. Anda dapat menggunakan flag OptimizeValueMapping untuk mengoptimalkan Pemetaan Nilai functoid sehingga variabel dihasilkan hanya ketika pernyataan if dievaluasi menjadi True. Misalnya, dengan OptimizeValueMapping diatur ke Tidak:

<xsl:variable name="var:v5" select="ScriptNS0:FormatMessage(…)" />  
<xsl:if test="string($var:v4)='true'">  
     <xsl:variable name="var:v6" select="string($var:v5)" />  
     <ns0:text>  
          <xsl:value-of select="$var:v6" />  
     </ns0:text>  
</xsl:if>  

Kode ini dapat dioptimalkan dengan memindahkan pemanggilan functoid Pemetaan Nilai ke dalam isi if pernyataan, memastikan bahwa pemanggilan hanya terjadi ketika diperlukan. Mengatur OptimizeValueMapping ke Ya menghasilkan kode berikut:

<xsl:if test="string($var:v4)='true'">  
     <xsl:variable name="var:v5" select="ScriptNS0:FormatMessage(…)" />  
     <xsl:variable name="var:v6" select="string($var:v5)" />  
     <ns0:text>  
          <xsl:value-of select="$var:v6" />  
     </ns0:text>  
</xsl:if>  

Pemeta melakukan pengoptimalan ini secara otomatis jika Anda mengatur atribut OptimizeValueMapping dari elemen mapsource dalam file sumber peta (.btm) ke Ya seperti yang ditunjukkan:

<mapsource Name="BizTalk Map" BizTalkServerMapperTool_Version="2.0" Version="2" XRange="100" YRange="420" OmitXmlDeclaration="Yes" TreatElementsAsRecords="No" OptimizeValueMapping="Yes" GenerateDefaultFixedNodes="Yes" CopyPIs="No" method="xml" xmlVersion="1.0" IgnoreNamespacesForLinks="Yes">  

Mengakomodasi Skema dengan Dampak Besar

Ketika Pemeta menggunakan skema yang memiliki jejak instans yang sangat besar dengan struktur kompleks yang dalam dan/atau simpul rekursif, menguji peta, memvalidasi peta, atau mengkompilasi peta dapat memakan waktu lama atau, dalam kasus yang lebih buruk, mengakibatkan kesalahan "kehabisan memori". Ini bisa terjadi dengan skema kecil dan kompleks serta dengan skema besar.

Masalah dengan skema kompleks adalah karena Pemeta harus memuat seluruh pohon skema secara rekursif untuk mencari simpul yang memiliki tautan terhubung atau properti Nilai yang ditetapkan padanya. Anda dapat meringankan masalah ini dengan mengatur bendera GenerateDefaultFixedNodes dari elemen mapsource dalam file .btm ke Tidak seperti yang ditunjukkan:

<mapsource Name="BizTalk Map" BizTalkServerMapperTool_Version="2.0" Version="2" XRange="100" YRange="420" OmitXmlDeclaration="Yes" TreatElementsAsRecords="No" OptimizeValueMapping="No" GenerateDefaultFixedNodes="No" CopyPIs="No" method="xml" xmlVersion="1.0" IgnoreNamespacesForLinks="Yes">  

Dengan pengaturan ini, Pemeta tidak perlu membuat simpul kompilator internal yang terkait dengan setiap simpul skema skema target. Hanya simpul tertaut yang diperhitungkan oleh kompilator. Ini secara signifikan mengurangi konsumsi memori dan mempercepat proses saat melakukan operasi "peta uji" atau "validasi peta", mengkompilasi peta, atau menyimpan peta.

Namun, ketika bendera GenerateDefaultFixedNodes diatur ke Tidak, nilai bidang default yang diatur dalam skema target tidak dipertahankan dalam instans yang dihasilkan oleh peta. Ini adalah masalah ketika nilai-nilai ini diperlukan dalam instans target. Untuk menghindari hal ini, nilai yang diperlukan harus diatur lagi secara eksplisit di peta. Anda dapat mengatur flag GenerateDefaultFixedNodes ke RequiredDefaults, yang berarti bahwa semua simpul yang diperlukan dimasukkan. Ini mencakup simpul tertaut, simpul yang memiliki nilai default, simpul dengan properti MinOccurs diatur ke lebih besar dari atau sama dengan satu, dan simpul yang induknya wajib ada.

Nota

Setelah Anda mengatur GenerateDefaultFixedNodes ke No atau RequiredDefaults, Anda harus menguji peta dan memverifikasi bahwa outputnya sama seperti ketika GenerateDefaultFixedNodes diatur ke nilai default Ya, di mana semua simpul diperhitungkan oleh kompilator.

Mengelola Penggunaan for-each dengan Looping, Kondisional, dan Functoid Pemetaan Nilai

Saat Anda menggunakan functoid Looping, functoid Kondisional, atau functoid Pemetaan Nilai, sebuah xsl:for-each pernyataan dihasilkan dalam peta yang dikompilasi. Jika bidang anak dari skema tujuan memiliki kemunculan maksimum yang tidak terbatas, xsl:for-each pernyataan dimasukkan ke bidang anak. Jika bidang anak tidak memiliki batas maksimum, pernyataan xsl:for-each diletakkan di bidang induknya.

Namun, karena lokasi pernyataan xsl:for-each memengaruhi hasil peta, Anda mungkin menginginkan pernyataan xsl:for-each ditempatkan pada bidang anak dari skema tujuan, terlepas dari apakah kemunculan maksimum bidang anak diatur ke 1.

Anda dapat mengontrol penempatan xsl:for-each pernyataan dengan memodifikasi nilai atribut TreatElementsAsRecords dalam file peta (.btm) seperti yang ditunjukkan:

<mapsource Name="BizTalk Map" BizTalkServerMapperTool_Version="2.0" Version="2" XRange="100" YRange="420" OmitXmlDeclaration="Yes" TreatElementsAsRecords="No" OptimizeValueMapping="No" GenerateDefaultFixedNodes="Yes" CopyPIs="No" method="xml" xmlVersion="1.0" IgnoreNamespacesForLinks="Yes">  

Ketika atribut ini diatur ke Ya, pernyataan xsl:for-each diletakkan di bidang anak dari skema tujuan, terlepas apakah kemunculan maksimum bidang anak diatur ke 1.

Mempertahankan Urutan Saat Memetakan Grup Sekuens Berulang

Grup urutan dalam skema XSD tidak menyediakan konteks perulangan karena tidak diwakili dalam instans pesan. Tanpa kemungkinan perulangan pada grup urutan, kompilator Mapper tidak menghasilkan XSLT yang sesuai untuk mempertahankan urutan segmen. Akibatnya, konteks relatif yang ada dalam instans input hilang, yang membuat instans output tidak berguna untuk pemrosesan lebih lanjut yang tergantung pada konteks relatif.

Anda dapat menggunakan bendera PreserveSequenceOrder untuk mempertahankan urutan rekaman saat memetakan urutan berulang ke urutan berulang lainnya. Secara default, nilai bendera diatur ke Tidak untuk mempertahankan fungsionalitas peta yang ada yang dibuat di versi BizTalk Server sebelumnya di mana bendera tidak ada. Dalam peta yang baru dibuat, bendera akan ada dengan nilainya diatur ke Tidak. Untuk mempertahankan urutan segmen, Anda harus secara eksplisit mengatur nilai ke Ya dalam file .btm seperti yang ditunjukkan:

<mapsource Name="BizTalk Map" BizTalkServerMapperTool_Version="2.0" Version="2" XRange="100" YRange="420" OmitXmlDeclaration="Yes" TreatElementsAsRecords="No" OptimizeValueMapping="No" GenerateDefaultFixedNodes="Yes" PreserveSequenceOrder="Yes" CopyPIs="No" method="xml" xmlVersion="1.0" IgnoreNamespacesForLinks="Yes">  

Berikut ini adalah contoh instans input:

<Name>Person1</Name>  
<Gender>Male</Gender>  
<Address>Bellevue</Address>  
<Name>Person2</Name>  
<Gender>Female</Gender>  
<Address>Redmond</Address>  

Dengan bendera PreserveSequenceOrder diatur ke Tidak, instans output akan terlihat seperti berikut ini:

<Name>Person1</Name>  
<Name>Person2</Name>  
<Gender>Male</Gender>  
<Gender>Female</Gender>  
<Address>Bellevue</Address>  
<Address>Redmond</Address>  

Dengan bendera PreserveSequenceOrder diatur ke Ya, instans output akan terlihat seperti berikut ini:

<Name>Person1</Name>  
<Gender>Male</Gender>  
<Address>Bellevue</Address>  
<Name>Person2</Name>  
<Gender>Female</Gender>  
<Address>Redmond</Address>  

Lihat Juga

Membuat Peta Menggunakan BizTalk Mapper