Scripting-Functoid wider Erwarten...

Mit dem Scripting Functoid des BizTalk-Mappers kann man bekanntlich eigene Scripts in verschiedenen Sprachen (z.b. C#) während des Mappings ausführen lassen. Man definiert damit eine Funktion deren Parameter mit Hilfer der Eingangselemente gefüllt werden können. Der Rückgabewert der Funktion ist das, was das Functoid als Ausgangsparameter weitergibt. Bis hierhin ist alles noch selbsterklärend.

Falls nun mehrere Scripting Functoide existieren, die alle das Gleiche tun, so ist man gut beraten, auch immer den gleichen Methodennamen zu verwenden. Diese werden beim Kompilieren in XSLT zusammengeführt (aus dem *.btm-Dateien wird immer xslt generiert). Innerhalb dieser XSLT-Datei, wird dann auch immer nur eine Funktion aufgerufen.

Allerdings scheint den Entwicklern ein kleiner Fehler unterlaufen zu sein. Denn nicht der Methodenname und der dazugehörige Inhalt (MethodBody), sondern lediglich der Methodenname und die Anzahl der Parameter wird verwendet, um die “Gleichheit” zweier Funktionen festzustellen.

Aus den Scripting-Functoiden in den Bildern

wird folgender XSLT-Code

1
2
3
4
5
<msxsl:script language="C#" implements-prefix="userCSharp"><![CDATA[
public string MyConcat(string param1) {
return param1;
}
]]></msxsl:script>

Zwei an sich komplett verschiedene Funktionen mit gleichem Namen und gleicher Anzahl an Parametern werden also als gleich angesehen und infolgedessen wird eine dieser Funktionen entfernt (in der Regel bleibt die erste erhalten). In C# ist es Möglich, mehrere gleich genannte Methoden zu definieren, so lange die Signatur (d.h. die Parameter und deren Typen) eine andere ist. Ist die Signatur gleich, wird ein entsprechender Fehler ausgegeben.

Da in jedem Scripting-Functoid eine neue Funktion definiert werden kann (und muss, wenn immer die gleiche Funktion aufgerufen werden soll), hofft man nun wenigstens auf eine Fehlermeldung bei einer Unterscheidung der Funktionen. Es wird aber lediglich eine Funktion übrig gelassen - und nein, es gibt beim Kompilieren nicht einmal eine Warnung, geschweige denn einen Fehler.

Falls es also mal zu seltsam erscheinenden Fehlern innerhalb eines Mappings kommt und man sich ganz sicher ist, dass eine Funktion eigentlich korrekt zu funktionieren hat, dann muss man wohl oder übel auch alle anderen Scripting Functoide innerhalb der .btm-Datei in Betracht ziehen und die Methodennamen vergleichen.

Besser wäre eine dateiweite Funktionsliste gewesen. Innerhalb des Scripting-Functoid hätte man dann eine dieser Funktionen ausgewählt, fertig… Man kann nur auf neue Versionen hoffen ;)