BizTalk 2010: تعيين XSD مع الكثير من العناصر مع نفس الاسم

StackOverflow https://stackoverflow.com/questions/3716608

سؤال

في Bitzalk 2010 ، يجب أن أقوم بتخطيط من مدخلات إلى XML مع الهيكل التالي:

<REQUEST>
  <PROGRAM name="PROGRAM123">
    <INPUT>
      <INSTRUCT name="INSTR1">
         <FIELD name="FIELD11">VALUE1</FIELD>
         <FIELD name="FIELD12">VALUE2</FIELD>
         <FIELD name="FIELD13">VALUE3</FIELD>
       </INSTRUCT>
       <INSTRUCT name="INSTR2">
         <FIELD name="FIELD21">VALUE4</FIELD>
         <FIELD name="FIELD22">VALUE5</FIELD>
         <FIELD name="FIELD23">VALUE6</FIELD>
         <FIELD name="FIELD24">VALUE7</FIELD>
       </INSTRUCT>
       <INSTRUCT name="INSTR2">
         <FIELD name="FIELD21">VALUE8</FIELD>
         <FIELD name="FIELD22">VALUE9</FIELD>
         <FIELD name="FIELD23">VALUE10</FIELD>
         <FIELD name="FIELD24">VALUE11</FIELD>
       </INSTRUCT>
     </INPUT>
   </PROGRAM>
</REQUEST>

كان XSD المولد هكذا:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="REQUEST" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  <xs:element name="REQUEST" msdata:IsDataSet="true" msdata:Locale="en-US">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="PROGRAM">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="INPUT" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="INSTRUCT" minOccurs="0" maxOccurs="unbounded">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="FIELD" nillable="true" minOccurs="0" maxOccurs="unbounded">
                            <xs:complexType>
                              <xs:simpleContent msdata:ColumnName="FIELD_Text" msdata:Ordinal="1">
                                <xs:extension base="xs:string">
                                  <xs:attribute name="name" type="xs:string" />
                                </xs:extension>
                              </xs:simpleContent>
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                        <xs:attribute name="name" type="xs:string" />
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>    
            </xs:sequence>
            <xs:attribute name="name" type="xs:string" />
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
</xs:schema>

كان الهيكل الذي تم إنشاؤه "عامًا" مجرد "عام" ، وكان علي استخدام Functoid حلقة الجدول لتعيينه في BizTalk. لدي المعلومات من هذا الحل: http://hestia.typepad.com/flatlander/2007/01/mapping_fixed_e.htmlولكن هذا يبدو مرهقًا جدًا بالنسبة لي (لدي 40 حقلًا مع بعض القيم الثابتة).

احتمال آخر هو استخدام XSLT. لكن ليس لدي أي خبرة معها وأفضل أن أتعرض لها مباشرة في BizTalk (بدون XSLT)

هل هناك إمكانية إنشاء مخطط XSD ، لذلك كان لدي جميع الحقول في محرر الخريطة وإنشاء رسم الخرائط هناك (دون استخدام الجدول functoid).

سيتم تقدير أي أفكار / تعليقات (حتى لو كانت الإجابة هي: "استخدم XSLT")

هل كانت مفيدة؟

المحلول

FWIW ننتهي عمومًا باستخدام XSLT لأي خرائط غير تافهة على أي حال.

و BizTalk يخلق XSLT لك على أي حال :)

هكذا أوصي:

  • افعل قدر الإمكان مع BizTalk Mapper (يبدو أن الطلب والبرنامج والمدخلات والإرشاد قابلة للتطبيق)
  • تجميع مشروعك
  • انقر على الخاص بك .btm ملف في Solution Explorer في Visual Studio ، ثم حدد "إظهار جميع الملفات" في الأعلى. يجب أن ترى الآن ملفًا مخفيًا SameFileName.btm.cs. في هذا الملف هو XSLT الذي يولده BizTalk. انسخ XSLT هذا ، ولصقه في ملف جديد - احفظ هذا كـ .xslt. ستحتاج إلى استبدال الاقتباسات المزدوجة مع عروض أسعار واحدة.
  • افتح .btm (MAP) الأصلي مرة أخرى. انقر على منطقة الخريطة الرمادية بين المخططات (خصائص الشبكة). في خاصية "مسار XSLT المخصص" ، حدد ملف .xslt الذي تم إنشاؤه حديثًا.

لقد أعطاك Mapper's BizTalk برنامجًا رئيسيًا على XSLT الخاص بك ، ويجب أن تكون قادرًا على التقاط XSLT الأساسي بسهولة. واحد gotcha - تأكد من أنك تتذكر بادئة الاسم المستعارة (عادة S1)

تحرير: لاحظ أن ما سبق لـ BizTalk 2009

يحرر

كإجراء وقائي للعقل ، في الخريطة المرئية لـ BTM ، أقترح عليك حذف جميع خطوط التعيين يدويًا من منطقة التعيين الرمادية ، في حالة نسيان أنك تستخدم الآن XSLT المخصصة. إذا قمت باختبار خريطة باستخدام XSLT مخصص ، فإن Mapper يصدر تذكيرًا بأن ملف XSLT يتم استخدامه ويتم تجاهل الخريطة المرئية.

نصائح أخرى

هناك طريقة أبسط للحصول على XLST المولدة (وعمومًا الطريقة الموصى بها التي نجحت منذ ما لا يقل عن BTS2006) هي النقر بزر الماوس الأيمن على ملف BTM في مستكشف الحل الخاص بك واختيار "التحقق من صحة الخريطة". يمنحك إخراج هذا كلا من كائنات XSLT و extension في الملفات المستقلة (بعض functoids ومراجع الفئة الخارجية تستخدم ملف كائنات الامتداد).

من هنا يمكنك حفظ وتعديل إخراج XSLT - لا تحتاج إلى تحليل ملف .btm.cs أو القلق بشأن مشكلات ترميز السلسلة مثل فقدان اقتباس مزدوج هرب حول سمة أو مساحة اسم ...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top