none
Biztalkserver - XML Mapping: Quellfeld optional, Zielfeld ist aber pflicht ?!

    Frage

  • Hallo zusammen,
    Das Problem wie amn aus dem Titel entnehmen kann ist:
    Beim Mapping von Quell-XMLSchmea auf Ziel-XMLSchema sind manche Felder im Quellschema als Optional bezeichnet und im normalen Betrieb kommen sie mancham garnichts vor. Und wenn das der Fall ist, dann soll in der XML-Ausgabe trotzdem auftauchen, mit einer Konstanten ID und eben leeren inhalt z.B. "<Test id="1234"></Test>".
    Das Problem ist, dass der Biztalk-Server sie weg lässt, wenn aus der Quelle nichts kommt.

    http://msdn.microsoft.com/de-de/library/aa560554.aspx

    Wie kann ich das umgehen. Also wenn die Daten aus der Quelle fehlen, dass sollen im Ziel trotzdem mit leeren Inhalt ausgegeben werden?

    Vielen Dank im Voraus!

    Freitag, 27. Januar 2012 11:38

Alle Antworten

  • Hallo,
     
    Dafür gibt es unterschiedliche Herangehensweisen, hier z. B.:
     
    Zuerst kann man den “Element exists” Functoid verwenden um abzuleiten, ob das Feld existiert oder, dann über einen not Functoid, eben nicht. Mit diesem Ergebnis geht man in den Value Mapping Functoid hinein, wobei dann als 2. Parameter der Konstante Wert konfiguriert wird.
     
    Also:
     
    <Quellfeld> –> <Element Exists Functoid> –> <Not Functoid> –> <Value Mapping Functoid (1), direkt aus <Quellfeld> (2)> –> <Zielfeld>
    <Quellfeld> –> <Element Exists Functoid> –> <Value Mapping Functoid (1), Konstante (2)> –> <Zielfeld>
     
    Grüße
     
    Jörg Fischer
     
     
    "starsgate" schrieb im Newsbeitrag news:d86982ed-3642-47d3-815d-5a04b0c8e287...

    Hallo zusammen,
    Das Problem wie amn aus dem Titel entnehmen kann ist:
    Beim Mapping von Quell-XMLSchmea auf Ziel-XMLSchema sind manche Felder im Quellschema als Optional bezeichnet und im normalen Betrieb kommen sie mancham garnichts vor. Und wenn das der Fall ist, dann soll in der XML-Ausgabe trotzdem auftauchen, mit einer Konstanten ID und eben leeren inhalt z.B. "<Test id="1234"></Test>".
    Das Problem ist, dass der Biztalk-Server sie weg lässt, wenn aus der Quelle nichts kommt.

    http://msdn.microsoft.com/de-de/library/aa560554.aspx

    Wie kann ich das umgehen. Also wenn die Daten aus der Quelle fehlen, dass sollen im Ziel trotzdem mit leeren Inhalt ausgegeben werden?

    Vielen Dank im Voraus!


    Jörg Fischer
    Dienstag, 31. Januar 2012 15:27
    Moderator
  • Auf die Idee bin ich schon gekommen, aber es hat leider nicht geholfen. Ich habe im .xsl-datei reingekuckt und ein paar Tests durchgeführt und festgestellt, dass um ein optionaler Tag zu realisieren reicht nicht zu sagen, dass es 0-mal auftauchen kann -> das funktioniert nicht. Sondern man soll es mit <sequence> umschließen und daher steht im xsl-Datei ein <sxl: for-each .... > drumrum. d.h. Wenn es nicht in der Quelle nicht vorhanden ist -> läuft eben die "for-each-schleife" 0 mal so zu sagen. Und daher entsteht mein Problem.

    Und wenn ich das mache was du gesagt hat -> fügt er die if-Anfrage innerhalb der for-each-Schleife, was leider keinen Sinn macht in meinem Fall.

    Die Lösung:

    das <sxl: for-each .... > Tag habe ich mit einer "if-Anfrage" umschlossen (<xsl: coose><xsl: when ...Bedingung... >...
    und habe meine modifizierte xsl-Datei übernommen. Es zwar unschön, kann die Graphische Oberfläche von VisualStudio nciht benutzen und habe jede Menge zeilen code zu pflegen, aber es funktioniert.

    Aber vielen dank trozdem

    Dienstag, 3. April 2012 12:03
  • Hi,
     
    Wenn ich das richtig verstehe, kommt das Feld in der Quelle n mal vor (wobei n auch 0 sein kann) und soll im Ziel m mal auftauchen (mit m > 0).
     
    Das lässt sich durchaus über einen Table Looping Functoid implementieren, über das “Gated” flag. Damit kann man den Dokumentaufbau “intelligent” gestalten.
     
    Grüße
     
    Jörg Fischer
     
    "starsgate" schrieb im Newsbeitrag news:6e243fcd-8df2-496d-9d90-7cd62808aa62...

    Auf die Idee bin ich schon gekommen, aber es hat leider nicht geholfen. Ich habe im .xsl-datei reingekuckt und ein paar Tests durchgeführt und festgestellt, dass um ein optionaler Tag zu realisieren reicht nicht zu sagen, dass es 0-mal auftauchen kann -> das funktioniert nicht. Sondern man soll es mit <sequence> umschließen und daher steht im xsl-Datei ein <sxl: for-each ..... > drumrum. d.h. Wenn es nicht in der Quelle nicht vorhanden ist -> läuft eben die "for-each-schleife" 0 mal so zu sagen. Und daher entsteht mein Problem.

    Und wenn ich das mache was du gesagt hat -> fügt er die if-Anfrage innerhalb der for-each-Schleife, was leider keinen Sinn macht in meinem Fall.

    Die Lösung:

    das <sxl: for-each .... > Tag habe ich mit einer "if-Anfrage" umschlossen (<xsl: coose><xsl: when ...Bedingung... >...
    und habe meine modifizierte xsl-Datei übernommen. Es zwar unschön, kann die Graphische Oberfläche von VisualStudio nciht benutzen und habe jede Menge zeilen code zu pflegen, aber es funktioniert.

    Aber vielen dank trozdem


    Jörg Fischer
    Dienstag, 10. April 2012 20:07
    Moderator