Freitag, 4. April 2008

Die verlorenen Abfragen oder "Akzeptiere meine Autorität!"

Wir wissen alle, dass es Systeme auf der Welt gibt, die es uns einfach nicht erlauben WOLLEN sie korrekt zu bedienen. Eines davon scheint BizTalk2006 zu sein.

Es sollte eigentlich alles ganz einfach sein:
Ich hole mir Daten, transformiere diese anhand eines Schemas in eine Message und kann dann ganz einfach über xpath auf die enstandene XML Struktur zugreifen. Wie in diesem Beispiel, wo zwei Werte miteinander verglichen werden sollen.

   1:  stringIst == xpath(Message1, "string(/*/*[local-name()='VergleichsTag'])");

Denkste. Benutzt man nämlich ein "Decide" Shape in BizTalk2006, um mit diesem im "Rule Branche" anhand des obigen Vergleiches den Programmablauf zu steuern, wird der Vergleich einfach ignoriert. Es gibt keine Fehlermeldung, es wird nichts angemäkelt, es geht einfach nicht.
Die Abfrage wird einfach immer falsch sein und deshalb wird das Programm auch niemals diesen Zweig des Programmablaufes ausführen.

Die Lösung ist so einfach wie die eigentliche Problematik des ursprünglichen Vorgehens unverständlich.
Mann MUSS vorher den Wert aus der XML Struktur einer Stringvariable zuzuweisen und hat dann die funktionierende Möglichkeit, die beiden Strings zu vergleichen. Wobei das nicht im "Decide" gemacht werden kann, sondern seperat vorher in einem "Expression" Shape erledigt werden muss, aber das nur am Rande.

EXPRESSION - SHAPE

   1:  stringSoll = xpath(Message1, "string(/*/*[local-name()='VergleichsTag'])");


DECIDE_RuleBranch - SHAPE

   1:  stringIst == stringSoll

So klappt das dann auch mit Ihrem Kunden.

1 Kommentar:

Tropensturm hat gesagt…

Ich denke BizTalk hat generell ein massives Problem mit "annoymen" Objekten :(