none
MySql Daten verarbeiten

    Frage

  • Hallo,

    leider scheitere ich an dem Problem aus einer MySql-Tabelle einzelne Datensätze auszulesen. Der Adapter liefert mir eine Nachricht mit allen Datensätzen:

    <ns0:ccData xmlns:ns0="http://xxx/ccData">
      <Table>
        <transferid>10</transferid>
        <salutation>salutation_0</salutation>
        <firstname>firstname_0</firstname>
        <lastname>lastname_0</lastname>
        <completed>10</completed>
      </Table>
      <Table>
        <transferid>10</transferid>
        <salutation>salutation_0</salutation>
        <firstname>firstname_0</firstname>
        <lastname>lastname_0</lastname>
        <completed>10</completed>
      </Table>
      <Table>
        <transferid>10</transferid>
        <salutation>salutation_0</salutation>
        <firstname>firstname_0</firstname>
        <lastname>lastname_0</lastname>
        <completed>10</completed>
      </Table>
    </ns0:ccData>

    jetzt geht es darum jeden Datensatz einzeln zu verarbeiten. Wenn ich versuche mit "Envelope = Yes" und dem entsprechenden "Body XPath" die Daten zu Verarbeiten "wie es im Buche :-)) steht" zu verarbeiten, kommt leider nur die Fehlermeldung: "Finding the document specification by message type "http://xxx/ccData#ccData" failed.". Mit dem WCF-SQL Adapter und TypedPolling funktioniert das, allerdings fällt auf, dass die XSD-Definition eine Ebene weniger hat als beim SQL-Adapter. Hier das XSD vom MySql-Adapter:

    <?xml version="1.0" encoding="utf-16"?>
    <xs:schema xmlns:b="http://schemas.microsoft.com/BizTalk/2003" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:ns1="http://xxx/ccData" targetNamespace="http://xxx/ccData" id="ccDataSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema">
      <xs:annotation>
        <xs:appinfo>
          <msbtsodbc:SQLCMD xmlns:msbtsodbc="http://schemas.microsoft.com/BizTalk/2003">SELECT * FROM xxx WHERE completed=0</msbtsodbc:SQLCMD>
          <msbtsodbc:ODBCCMD xmlns:msbtsodbc="http://schemas.microsoft.com/BizTalk/2003">SELECT * FROM xxx WHERE completed=0</msbtsodbc:ODBCCMD>
          <msbtsodbc:ResponseRootName xmlns:msbtsodbc="http://schemas.microsoft.com/BizTalk/2003">Mysql/ccData</msbtsodbc:ResponseRootName>
          <msbtsodbc:ResponseNS xmlns:msbtsodbc="http://schemas.microsoft.com/BizTalk/2003">http://xxx</msbtsodbc:ResponseNS>
          <b:schemaInfo is_envelope="yes" />
        </xs:appinfo>
      </xs:annotation>
      <xs:element msdata:IsDataSet="true" msdata:UseCurrentLocale="true" name="ccData">
        <xs:annotation>
          <xs:appinfo>
            <b:recordInfo body_xpath="/*[local-name()='ccData' and namespace-uri()='http://xxx/ccData']" />
          </xs:appinfo>
        </xs:annotation>
        <xs:complexType>
          <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element name="Table">
              <xs:complexType>
                <xs:sequence>
                  <xs:element minOccurs="0" name="transferid" type="xs:int" />
                  <xs:element minOccurs="0" name="salutation" type="xs:string" />
                  <xs:element minOccurs="0" name="firstname" type="xs:string" />
                  <xs:element minOccurs="0" name="lastname" type="xs:string" />
                  <xs:element minOccurs="0" name="completed" type="xs:int" />
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:choice>
        </xs:complexType>
      </xs:element>
    </xs:schema>
    Danke!
    Freitag, 23. März 2012 09:19

Antworten

  • Hallo,
     
    Das ist eigentlich “expected behavior”. Hintergrund: wenn man das einkommende Dokument als Envelope konfiguriert, werden die einzelnen Einträge als Komplette dokumente extrahiert, d. h. man hat für jede “Table” ein eigenes Dokument und muss ergo auch ein geeignetes Dokument-Schema bereitstellen (sofern man nicht auf die Annehmlichkeiten verzichten will und einfach mit einem unbekannten XML Dokument arbeiten will – was ich aber nicht unbedingt empfehlen würde).
     
    Allerdings würde ich in diesem Fall davon abraten, das eingegangene Dokument wie beschrieben zu verarbeiten, da man damit den globalen Schema-Namespace ziemlich “verdreckt” – Table ohne Namespace ist sehr allgemein und bereits, wenn man eine 2. Tabelle über den mySQL Adapter abziehen will, hat man eine Kollision (lässt sich zwar über Handarbeit abdecken, ist aber nicht sehr schön).
     
    Daher mein Vorschlag, auf ein anderes Pattern auszuweichen: man kann die Zerlegung auch nachgeschaltet in einer Orchestration durch Aufruf einer Pipeline realisieren. Das Ganze basiert dann auf dem CallPipeline Pattern (ist im SDK).
     
    Die Vorgehensweise ist dann:
     
    1. Dokument wird einfach eingelesen (kein Envelope auf der eingehenden Dokumentstruktur definiert)
    2. Dokument landet in einer “Vor-Orchestration”:
        2a. Transformation in ein “angenehmes” Dokumentformat, welches als Envelope konfiguriert ist und strukturell schön passt.   
        2b. Call Pipeline zur Zerlegung des Dokuments
        2c. Submit der Einzeldokumente in die MessageBox (oder alternativ ein Start Orchestration).
     
    Das Ganze kann man ggf. in einer einzelnen Transaktion zusammenfassen (die Vor-Orchestration als Transaction Type = Atomic konfigurieren), so dass die Performance-Kosten überschaubar bleiben.
     
    Grüße
     
    Jörg Fischer
     
     
    "KriegerK" schrieb im Newsbeitrag news:c6b77277-274a-47d5-a9a2-a55b5b006066...

    Hallo Herr Hauth,

    mit dem WCF-SQL-Adapter war es mir biher nicht möglich eine Verbindung zur MySql-Datenbank herzustellen. Hätten Sie hierfür einen Tipp? Mit ODBC ist es nicht nur sehr langsam und leider musste ich extra einen 32-bit Host konfigurieren damit der Adapter überhaupt fehlerfrei eine Verbindung herstellt. Dem XML-Disassembler habe ich genau so konfiguriert wie Sie es sagen, Ergebnis:

    Finding the document specification by message type "Table" failed.

    oder:

    Finding the document specification by message type "transferid" failed.

    hierbei habe ich mit dem BodyXPath probiert:

    /*[local-name()='ccData' and namespace-uri()='http://xxx/ccData'] und

    /*[local-name()='ccData' and namespace-uri()='http://xxx/ccData']/*[local-name()='Table' and namespace-uri()=''] mehr kann ich beim Envelope über die VS GUI nicht auswählen.

    Das Envelope-Schema:

     

    <?xml version="1.0" encoding="utf-16"?>
    <xs:schema xmlns:b="http://schemas.microsoft.com/BizTalk/2003" xmlns:ns1="http://xxx/ccData" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://xxx/ccData" id="ccDataSchema">
     <xs:annotation>
      <xs:appinfo>
       <msbtsodbc:SQLCMD xmlns:msbtsodbc="http://schemas.microsoft.com/BizTalk/2003">SELECT * FROM xxx WHERE completed=0</msbtsodbc:SQLCMD>
       <msbtsodbc:ODBCCMD xmlns:msbtsodbc="http://schemas.microsoft.com/BizTalk/2003">SELECT * FROM xxx WHERE completed=0</msbtsodbc:ODBCCMD>
       <msbtsodbc:ResponseRootName xmlns:msbtsodbc="http://schemas.microsoft.com/BizTalk/2003">Mysql/ccData</msbtsodbc:ResponseRootName>
       <msbtsodbc:ResponseNS xmlns:msbtsodbc="http://schemas.microsoft.com/BizTalk/2003">http://xxx</msbtsodbc:ResponseNS>
       <b:schemaInfo is_envelope="yes" xmlns:b="http://schemas.microsoft.com/BizTalk/2003"/>
      </xs:appinfo>
     </xs:annotation>
     <xs:element name="ccData" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
      <xs:annotation>
       <xs:appinfo>
        <b:recordInfo body_xpath="/*[local-name()='ccData' and namespace-uri()='http://xxx/ccData']/*[local-name()='Table' and namespace-uri()='']"/>
       </xs:appinfo>
      </xs:annotation>
      <xs:complexType>
       <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="Table" maxOccurs="1">
         <xs:complexType>
          <xs:sequence>
           <xs:any/>
          </xs:sequence>
         </xs:complexType>
        </xs:element>
       </xs:choice>
      </xs:complexType>
     </xs:element>
    </xs:schema>

    und das Dokument-Schema.

    <?xml version="1.0" encoding="utf-16"?>
    <xs:schema xmlns="http://xxx/ccData" xmlns:b="http://schemas.microsoft.com/BizTalk/2003" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://xxx/ccData">
    	<xs:element name="Table">
    		<xs:complexType>
    			<xs:sequence>
    				<xs:element name="transferid" type="xs:int" minOccurs="0"/>
    				<xs:element name="salutation" type="xs:string" minOccurs="0"/>
    				<xs:element name="firstname" type="xs:string" minOccurs="0"/>
    				<xs:element name="lastname" type="xs:string" minOccurs="0"/>
    				<xs:element name="completed" type="xs:int" minOccurs="0"/>
    			</xs:sequence>
    		</xs:complexType>
    	</xs:element>
    </xs:schema>

    Was mache ich nur falsch?

    Danke!


    Jörg Fischer
    • Als Antwort markiert KriegerK Montag, 26. März 2012 10:42
    Montag, 26. März 2012 08:41
    Moderator

Alle Antworten

  • Hallo KriegerK,



    grundsätzlich solltest du die WCF Adapter bevorzugen, sprich wenn der WCF-SQL alles sauber abbildet, wäre es der richtige Weg. Ich verstehe das Problem aber noch nicht genau. Du hast ein Envelope Schema erstellt (http://xxx/ccData#ccData) mit dem entsprechenden Body XPath sowie ein Body XML (#Table). Dann hast du eine Pipeline mit XMLDisassembler Komponente und gibst Body und Envelope XPath an? Dann sollte eigentlich auch alles sauber funktionieren und du solltest x einzelne Nachrichten in der Messagebox sehen.

    If you like my post or consider it as a valid answer, please use the buttons to show me - Oliver

    Microsoft Most Valuable Professional for BizTalk Server
    http://i.evolved.cc

    Samstag, 24. März 2012 11:08
  • Hallo Herr Hauth,

    mit dem WCF-SQL-Adapter war es mir biher nicht möglich eine Verbindung zur MySql-Datenbank herzustellen. Hätten Sie hierfür einen Tipp? Mit ODBC ist es nicht nur sehr langsam und leider musste ich extra einen 32-bit Host konfigurieren damit der Adapter überhaupt fehlerfrei eine Verbindung herstellt. Dem XML-Disassembler habe ich genau so konfiguriert wie Sie es sagen, Ergebnis:

    Finding the document specification by message type "Table" failed.

    oder:

    Finding the document specification by message type "transferid" failed.

    hierbei habe ich mit dem BodyXPath probiert:

    /*[local-name()='ccData' and namespace-uri()='http://xxx/ccData'] und

    /*[local-name()='ccData' and namespace-uri()='http://xxx/ccData']/*[local-name()='Table' and namespace-uri()=''] mehr kann ich beim Envelope über die VS GUI nicht auswählen.

    Das Envelope-Schema:


    <?xml version="1.0" encoding="utf-16"?>
    <xs:schema xmlns:b="http://schemas.microsoft.com/BizTalk/2003" xmlns:ns1="http://xxx/ccData" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://xxx/ccData" id="ccDataSchema">
     <xs:annotation>
      <xs:appinfo>
       <msbtsodbc:SQLCMD xmlns:msbtsodbc="http://schemas.microsoft.com/BizTalk/2003">SELECT * FROM xxx WHERE completed=0</msbtsodbc:SQLCMD>
       <msbtsodbc:ODBCCMD xmlns:msbtsodbc="http://schemas.microsoft.com/BizTalk/2003">SELECT * FROM xxx WHERE completed=0</msbtsodbc:ODBCCMD>
       <msbtsodbc:ResponseRootName xmlns:msbtsodbc="http://schemas.microsoft.com/BizTalk/2003">Mysql/ccData</msbtsodbc:ResponseRootName>
       <msbtsodbc:ResponseNS xmlns:msbtsodbc="http://schemas.microsoft.com/BizTalk/2003">http://xxx</msbtsodbc:ResponseNS>
       <b:schemaInfo is_envelope="yes" xmlns:b="http://schemas.microsoft.com/BizTalk/2003"/>
      </xs:appinfo>
     </xs:annotation>
     <xs:element name="ccData" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
      <xs:annotation>
       <xs:appinfo>
        <b:recordInfo body_xpath="/*[local-name()='ccData' and namespace-uri()='http://xxx/ccData']/*[local-name()='Table' and namespace-uri()='']"/>
       </xs:appinfo>
      </xs:annotation>
      <xs:complexType>
       <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="Table" maxOccurs="1">
         <xs:complexType>
          <xs:sequence>
           <xs:any/>
          </xs:sequence>
         </xs:complexType>
        </xs:element>
       </xs:choice>
      </xs:complexType>
     </xs:element>
    </xs:schema>

    und das Dokument-Schema.

    <?xml version="1.0" encoding="utf-16"?>
    <xs:schema xmlns="http://xxx/ccData" xmlns:b="http://schemas.microsoft.com/BizTalk/2003" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://xxx/ccData">
    	<xs:element name="Table">
    		<xs:complexType>
    			<xs:sequence>
    				<xs:element name="transferid" type="xs:int" minOccurs="0"/>
    				<xs:element name="salutation" type="xs:string" minOccurs="0"/>
    				<xs:element name="firstname" type="xs:string" minOccurs="0"/>
    				<xs:element name="lastname" type="xs:string" minOccurs="0"/>
    				<xs:element name="completed" type="xs:int" minOccurs="0"/>
    			</xs:sequence>
    		</xs:complexType>
    	</xs:element>
    </xs:schema>

    Was mache ich nur falsch?

    Danke!

    Montag, 26. März 2012 06:38
  • Hallo,
     
    Das ist eigentlich “expected behavior”. Hintergrund: wenn man das einkommende Dokument als Envelope konfiguriert, werden die einzelnen Einträge als Komplette dokumente extrahiert, d. h. man hat für jede “Table” ein eigenes Dokument und muss ergo auch ein geeignetes Dokument-Schema bereitstellen (sofern man nicht auf die Annehmlichkeiten verzichten will und einfach mit einem unbekannten XML Dokument arbeiten will – was ich aber nicht unbedingt empfehlen würde).
     
    Allerdings würde ich in diesem Fall davon abraten, das eingegangene Dokument wie beschrieben zu verarbeiten, da man damit den globalen Schema-Namespace ziemlich “verdreckt” – Table ohne Namespace ist sehr allgemein und bereits, wenn man eine 2. Tabelle über den mySQL Adapter abziehen will, hat man eine Kollision (lässt sich zwar über Handarbeit abdecken, ist aber nicht sehr schön).
     
    Daher mein Vorschlag, auf ein anderes Pattern auszuweichen: man kann die Zerlegung auch nachgeschaltet in einer Orchestration durch Aufruf einer Pipeline realisieren. Das Ganze basiert dann auf dem CallPipeline Pattern (ist im SDK).
     
    Die Vorgehensweise ist dann:
     
    1. Dokument wird einfach eingelesen (kein Envelope auf der eingehenden Dokumentstruktur definiert)
    2. Dokument landet in einer “Vor-Orchestration”:
        2a. Transformation in ein “angenehmes” Dokumentformat, welches als Envelope konfiguriert ist und strukturell schön passt.   
        2b. Call Pipeline zur Zerlegung des Dokuments
        2c. Submit der Einzeldokumente in die MessageBox (oder alternativ ein Start Orchestration).
     
    Das Ganze kann man ggf. in einer einzelnen Transaktion zusammenfassen (die Vor-Orchestration als Transaction Type = Atomic konfigurieren), so dass die Performance-Kosten überschaubar bleiben.
     
    Grüße
     
    Jörg Fischer
     
     
    "KriegerK" schrieb im Newsbeitrag news:c6b77277-274a-47d5-a9a2-a55b5b006066...

    Hallo Herr Hauth,

    mit dem WCF-SQL-Adapter war es mir biher nicht möglich eine Verbindung zur MySql-Datenbank herzustellen. Hätten Sie hierfür einen Tipp? Mit ODBC ist es nicht nur sehr langsam und leider musste ich extra einen 32-bit Host konfigurieren damit der Adapter überhaupt fehlerfrei eine Verbindung herstellt. Dem XML-Disassembler habe ich genau so konfiguriert wie Sie es sagen, Ergebnis:

    Finding the document specification by message type "Table" failed.

    oder:

    Finding the document specification by message type "transferid" failed.

    hierbei habe ich mit dem BodyXPath probiert:

    /*[local-name()='ccData' and namespace-uri()='http://xxx/ccData'] und

    /*[local-name()='ccData' and namespace-uri()='http://xxx/ccData']/*[local-name()='Table' and namespace-uri()=''] mehr kann ich beim Envelope über die VS GUI nicht auswählen.

    Das Envelope-Schema:

     

    <?xml version="1.0" encoding="utf-16"?>
    <xs:schema xmlns:b="http://schemas.microsoft.com/BizTalk/2003" xmlns:ns1="http://xxx/ccData" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://xxx/ccData" id="ccDataSchema">
     <xs:annotation>
      <xs:appinfo>
       <msbtsodbc:SQLCMD xmlns:msbtsodbc="http://schemas.microsoft.com/BizTalk/2003">SELECT * FROM xxx WHERE completed=0</msbtsodbc:SQLCMD>
       <msbtsodbc:ODBCCMD xmlns:msbtsodbc="http://schemas.microsoft.com/BizTalk/2003">SELECT * FROM xxx WHERE completed=0</msbtsodbc:ODBCCMD>
       <msbtsodbc:ResponseRootName xmlns:msbtsodbc="http://schemas.microsoft.com/BizTalk/2003">Mysql/ccData</msbtsodbc:ResponseRootName>
       <msbtsodbc:ResponseNS xmlns:msbtsodbc="http://schemas.microsoft.com/BizTalk/2003">http://xxx</msbtsodbc:ResponseNS>
       <b:schemaInfo is_envelope="yes" xmlns:b="http://schemas.microsoft.com/BizTalk/2003"/>
      </xs:appinfo>
     </xs:annotation>
     <xs:element name="ccData" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
      <xs:annotation>
       <xs:appinfo>
        <b:recordInfo body_xpath="/*[local-name()='ccData' and namespace-uri()='http://xxx/ccData']/*[local-name()='Table' and namespace-uri()='']"/>
       </xs:appinfo>
      </xs:annotation>
      <xs:complexType>
       <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="Table" maxOccurs="1">
         <xs:complexType>
          <xs:sequence>
           <xs:any/>
          </xs:sequence>
         </xs:complexType>
        </xs:element>
       </xs:choice>
      </xs:complexType>
     </xs:element>
    </xs:schema>

    und das Dokument-Schema.

    <?xml version="1.0" encoding="utf-16"?>
    <xs:schema xmlns="http://xxx/ccData" xmlns:b="http://schemas.microsoft.com/BizTalk/2003" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://xxx/ccData">
    	<xs:element name="Table">
    		<xs:complexType>
    			<xs:sequence>
    				<xs:element name="transferid" type="xs:int" minOccurs="0"/>
    				<xs:element name="salutation" type="xs:string" minOccurs="0"/>
    				<xs:element name="firstname" type="xs:string" minOccurs="0"/>
    				<xs:element name="lastname" type="xs:string" minOccurs="0"/>
    				<xs:element name="completed" type="xs:int" minOccurs="0"/>
    			</xs:sequence>
    		</xs:complexType>
    	</xs:element>
    </xs:schema>

    Was mache ich nur falsch?

    Danke!


    Jörg Fischer
    • Als Antwort markiert KriegerK Montag, 26. März 2012 10:42
    Montag, 26. März 2012 08:41
    Moderator
  • Hallo Herr Fischer,

    vielen Dank! Ich war mir im unklaren welcher Weg der richtige ist, es gibt im Internet verschiedene Lösungsansätze. Ich probier das mal, jedoch komme ich mit einem Ergebnis vermutlich erst nach Ostern.

    Vielen Dank!

    Montag, 26. März 2012 10:42
  • Hallo Herr Fischer,

    leider habe ich wohl ein Verständnisproblem. Ich habe es genau so wie Sie es sagen mit CallPipeline und einem "angenehmen" Dokumentformat. Leider mit dem selben Ergebnis:

    Finding the document specification by message type "Table" failed. Verify the schema deployed properly.

    ich muss mir das noch einmal ansehen. Ich habe das Problem jetzt in den Griff bekommen in dem ich das Dokument per xpath zerlege und dann in einem Loop verarbeite. Leider kann ich so keine großen Dokumente verarbeiten, hierzu muss ich dann den Eingabedatenstrom mit einem XMLReader (SaxReader) zerlegen und dann erst der BizTalk-Orchestration zuführen. Schade das es (anscheinend?) keinen "schönen" MySQL-Adapter für BizTalk, analog WCF-SQL gibt.

    Vielen Dank!

    K. Krieger

    Das wichtigste hier in aller Kürze

    Anzahl Dokumente:

    nRecordCount = System.Convert.ToInt32(xpath(M_MYSQL, "count(//Table)"));

    Zerlegen in die Einzelteile:

    sXPath = System.String.Format("//Table[position()={0}]", actRecord);

    M_SINGLE = xpath(M_MYSQL, sXPath);

    Hierbei ist M_SINGLE die Message mit dem Schema eines einzelnen Dokuments. M_MYSQL die Struktur wie oben. In diesem Fall kann die SQL_Anweisung mit dem LIMIT-Befehl auf eine gefällige "Daten"-Größe zerlegt werden.

    Montag, 16. April 2012 12:36
  • Hallo,
     
    Wenn Sie möchten, können Sie ja mal einen excerpt aus Ihrem mySQL Schema schicken – ich baue dann gerne mal ein exemplarische Lösung auf.
     
    Grüße
     
    Jörg Fischer
     
     
    "KriegerK" schrieb im Newsbeitrag news:ca74cada-b68d-4584-9e4a-98768645e521...

    Hallo Herr Fischer,

    leider habe ich wohl ein Verständnisproblem. Ich habe es genau so wie Sie es sagen mit CallPipeline und einem "angenehmen" Dokumentformat. Leider mit dem selben Ergebnis:

    Finding the document specification by message type "Table" failed. Verify the schema deployed properly.

    ich muss mir das noch einmal ansehen. Ich habe das Problem jetzt in den Griff bekommen in dem ich das Dokument per xpath zerlege und dann in einem Loop verarbeite. Leider kann ich so keine großen Dokumente verarbeiten, hierzu muss ich dann den Eingabedatenstrom mit einem XMLReader (SaxReader) zerlegen und dann erst der BizTalk-Orchestration zuführen. Schade das es (anscheinend?) keinen "schönen" MySQL-Adapter für BizTalk, analog WCF-SQL gibt.

    Vielen Dank!

    K. Krieger

    Das wichtigste hier in aller Kürze

    Anzahl Dokumente:

    nRecordCount = System.Convert.ToInt32(xpath(M_MYSQL, "count(//Table)"));

    Zerlegen in die Einzelteile:

    sXPath = System.String.Format("//Table[position()={0}]", actRecord);

    M_SINGLE = xpath(M_MYSQL, sXPath);

    Hierbei ist M_SINGLE die Message mit dem Schema eines einzelnen Dokuments. M_MYSQL die Struktur wie oben. In diesem Fall kann die SQL_Anweisung mit dem LIMIT-Befehl auf eine gefällige "Daten"-Größe zerlegt werden.


    Jörg Fischer
    Donnerstag, 19. April 2012 19:20
    Moderator
  • Hallo Herr Fischer,

    vielen Dank, hier das Schema.

    <?xml version="1.0" encoding="utf-16"?>
    <xs:schema xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:b="http://schemas.microsoft.com/BizTalk/2003" xmlns:ns0="http://newsletter2crm.c2crm" targetNamespace="http://newsletter2crm.c2crm" id="c2crmSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    	<xs:annotation>
    		<xs:appinfo>
    			<msbtsodbc:SQLCMD xmlns:msbtsodbc="http://schemas.microsoft.com/BizTalk/2003">SELECT * FROM xxx WHERE completed=0</msbtsodbc:SQLCMD>
    			<msbtsodbc:ODBCCMD xmlns:msbtsodbc="http://schemas.microsoft.com/BizTalk/2003">SELECT * FROM xxx WHERE completed=0</msbtsodbc:ODBCCMD>
    			<msbtsodbc:ResponseRootName xmlns:msbtsodbc="http://schemas.microsoft.com/BizTalk/2003">c2crm</msbtsodbc:ResponseRootName>
    			<msbtsodbc:ResponseNS xmlns:msbtsodbc="http://schemas.microsoft.com/BizTalk/2003">http://c2crm</msbtsodbc:ResponseNS>
    		</xs:appinfo>
    	</xs:annotation>
    	<xs:element msdata:IsDataSet="true" msdata:UseCurrentLocale="true" name="c2crm">
    		<xs:complexType>
    			<xs:choice minOccurs="0" maxOccurs="unbounded">
    				<xs:element name="Table">
    					<xs:complexType>
    						<xs:sequence>
    							<xs:element minOccurs="0" name="transferid" type="xs:int"/>
    							<xs:element minOccurs="0" name="salutation" type="xs:string"/>
    							<xs:element minOccurs="0" name="firstname" type="xs:string"/>
    							<xs:element minOccurs="0" name="lastname" type="xs:string"/>
    							<xs:element minOccurs="0" name="emailaddress" type="xs:string"/>
    							<xs:element minOccurs="0" name="language" type="xs:string"/>
    							<xs:element minOccurs="0" name="country" type="xs:string"/>
    							<xs:element minOccurs="0" name="classificationbaseid1" type="xs:string"/>
    							<xs:element minOccurs="0" name="classificationbaseid2" type="xs:string"/>
    							<xs:element minOccurs="0" name="classificationbaseid3" type="xs:string"/>
    							<xs:element minOccurs="0" name="classificationbaseid4" type="xs:string"/>
    							<xs:element minOccurs="0" name="classificationbaseid5" type="xs:string"/>
    							<xs:element minOccurs="0" name="status" type="xs:int"/>
    							<xs:element minOccurs="0" name="deleted" type="xs:int"/>
    							<xs:element minOccurs="0" name="completed" type="xs:int"/>
    						</xs:sequence>
    					</xs:complexType>
    				</xs:element>
    			</xs:choice>
    		</xs:complexType>
    	</xs:element>
    </xs:schema>

    Danke!
    Dienstag, 24. April 2012 06:23