2. Parameter in Cumulative Functoids

by wolfgang@gehirnwindung.de (Wolfgang) März 31, 2009 22:27

Gerne übersehen wird die Möglichkeit eines 2. Parameters in allen Cumulative Functoiden (Standardwert=0). Dieser gibt an, von welcher Ebene aus die zu kumulierenden Elemente "angeschaut" werden.

Folgendes XML-Dokuement angenommen.

<root>
    <nodes>
        <sub>
            <value>1</value>
            <value>1</value>
            <value>2</value>
        </sub>
        <sub>
            <value>3</value>
            <value>2</value>
            <value>2</value>
        </sub>
    </nodes>
</root>

vollständigen Artikel anzeigen...

Tags: ,

Microsoft BizTalk Server

Mehrere Looping Functoide auf dem gleichen Element

by wolfgang@gehirnwindung.de (Wolfgang) März 30, 2009 23:43

Hätte ich ab und an gerne, bleibt aber wohl vorerst auch ein Punkt für die Wishlist.

Es geht nicht. Weder auf einer Seite, noch auf mehreren verteilt. Egal welche Einstellung oder welche Kombination aus diesen getroffen wird. Es geht einfach nicht ;)

Einer der beiden Loopings wird verwendet, der andere verworfen.

Tags: ,

Microsoft BizTalk Server

Große bis riesige Dateien einfach splitten und wieder zusammenführen

by Wolfgang Kluge März 27, 2009 21:10

Das Tool ist zwar nun auch schon etwas älter, aber immer noch ein Post wert (ich habs grad rauskramen müssenWink).

Vor Jahren stand ich (schon mal) vor dem Problem, eine (für damalige Zeit riesige) Datei mit 50GB aufzusplitten und wieder zusammenzusetzen. Mit allen Tools die mir zur Verfügung standen, wollte es jedoch nicht so recht funktionieren (Fehler, Systemstillstand, bis hin zum Blue Screen). Nur zum Trotz (*g*) hab ich dann eine Lösung in VBScript (ja, VBS) geschrieben - und es stellte sich heraus, dass diese Lösung auch noch sehr stabil mit sehr großen Dateien funktionierte (man sagt dem WSH und VBScript nicht gerade hinterher, besonders gut mit Dateien umgehen zu können, aber so schlimm kanns nicht sein).

In der ZIP-Datei (1,77 kb) sind 2 WSH-Scripte enthalten - ksSplitFile.wsf und ksJoinFile.wsf. Der Aufruf ist genauso einfach wie die Scripte und mindestens genauso selbsterklärend wie deren Namen selbst.

Aufteilen einer Datei

ksSplitFile.wsf trennt eine beliebige Datei in kleinere Brocken. Wie groß diese Brocken sind, kann festgelegt werden - voreingestellt sind 15 MB.

ksSplitFile.wsf "filename" [chunksize=15]
  filename ist dabei der Pfad zur Datei und
  chunksize die Größe der Brocken in MB

Sieht man vom Auslesen ab, bleibt die Originaldatei unangetastet ;). Die Einzelteile werden in einen Unterordner "CHUNKED_" + Namen im gleichen Verzeichnis abgelegt - liegt die zu splittende Datei "SplitTest.txt" auf dem Desktop, so wird dort auch ein neuer Ordner mit dem Namen "CHUNKED_SplitTest.txt" angelegt. Ist ein solcher Ordner bereits vorhanden, wird zusätzlich noch eine Zahl hinten angehängt.

Die Größe der Einzelteile hab ich übrigens auf 100MB begrenzt. Die Obergrenze ist mehr oder weniger willkürlich dazugekommen (zwischen 15 und 100 MB wars einfach am "schönsten" - zumindest aus damaliger Perfromance-Sicht). Unter 15 MB lohnt es sich meiner Meinung nach nicht (aber es steht natürlich jedem offen, dies zu ändern).

Zusammenführen zu einer Datei

Zurück geht es ähnlich einfach. Mit der Datei ksJoinFile.wsf werden die Einzelteile wieder zu einem großen Ganzen zusammengefügt.

ksJoinFile.wsf "path"
  path ist der Pfad zum CHUNKED_ - Ordner

Die hierbei erstellte Datei heißt so, wie der Ordner. Gibt es eine solche Datei bereits, wird wieder eine Zahl hinten angehängt.

100 GB brauchen natürlich ihre Zeit, aber es geht (dann würde ich allerdings die "Brocken" größer als 15 MB halten) ;) Ob es eine Obergenze gibt, und wann diese dann erreicht wäre - ich weiß es nicht ;) Eventuell bereichtet es mir einer...

Download (1,77 kb)

Tags: , ,

Tools

Sortiere Ausgabe im BizTalk-Mapper

by wolfgang@gehirnwindung.de (Wolfgang) März 27, 2009 20:14

Einzelne Felder in der Ausgabe zu sortieren scheint eine gewöhnliche und vor allem alltägliche Aufgabe zu sein. Ist an sich auch unproblematisch innerhalb des BizTalk-Mappers. Im Looping-Functoid gibt man die Parameter einfach in der gewünschten Reihenfolge an.

Aber das geht nur, so lange man verschiedene Eingabe-Records nicht "mischen" will.
Ein kleines Beispiel:

<root>
    <nodes>
        <node id="1" />
        <node id="2" />
    </nodes>
    <subnodes>
        <subnode parent="1" />
        <subnode parent="1" />
        <subnode parent="2" />
    </subnodes>
</root>

Natürlich sollen in der Ausgabe nach der node mit der id 1 die dazu passenden subnodes erscheinen.
Und hier wirds nun schwerer - um nicht zu sagen mit den Basis-Functoiden (ausgenommen dem Script-Functioid) unmöglich.

Wenn man einfach nur sein Looping-Functoid wie gewohnt mit den Records nodes und subnodes verbindet, erscheint in der Ausgabe (wie erwartet)

<root>
    <NodeOrSubNode id="1" />
    <NodeOrSubNode id="2" />
    <NodeOrSubNode parent="1" />
    <NodeOrSubNode parent="1" />
    <NodeOrSubNode parent="2" />
</root>

vollständigen Artikel anzeigen...

Tags: ,

Microsoft BizTalk Server

Führende und anhängende Nullen oder Leerzeichen in EDI-Dokumenten

by wolfgang@gehirnwindung.de (Wolfgang) März 26, 2009 16:45

Falls sich mal jemand wundern sollte, warum beim Import oder Export von EDI-Dokumenten Fehler wie z.B.

Error: 1 (Field level error)
SegmentID: NAD
Position in TS: 9
Data Element ID: C08201
Position in Segment: 3
Position in Field: 1
Data Value: ...
37: Invalid character(s) found in data element

auftauchen. Das kann daran liegen, dass Zahlen mit "unnötigen" Nullen als Fehler gewertet werden. So muss z.B. aus "8,70" eigentlich "8,7" und auch aus "9,00" eine "9" werden. "09" geht auch nicht und muss ebenso zur "9" werden. Ein weiterer Fehlerfall sind führende oder anhängende Leerzeichen in den Feldern.

Hier gibt es aber Abhilfe in den Einstellungen. Zu finden bei den Party-EDI-Einstellungen (bzw. bei den Standard - Einstellungen) unter "ACK Generation and Validation Settings" bzw. "ACK Processing and Validation Settings" -> "Allow leading and trailing zeroes and spaces".

Ist diese Option aktiviert, so werden diese Fehler nicht mehr ausgelöst. Leider kann man sich nicht auf Nullen oder Leerzeichen beschränken. Man muss immer gleich beides erlauben.

Beim Export empfehle ich, diese Einstellung nicht zu setzen sondern die Zahlen und Texte wirklich so kurz wie möglich auszugeben - andere könnten sich daran stören und keine so einfache Lösung parat haben.

Tags: ,

Microsoft BizTalk Server

Error spawning 'rc.exe'

by wolfgang@gehirnwindung.de (Wolfgang) März 25, 2009 16:30

Beim kompilieren eines alten C++ Projects auf Vista kam es bei mir zu folgendem Fehler

Error spawning 'rc.exe'.

Mehr gabs nicht dazu zu sagen. Auf anderen Systemen war das kompilieren kein Problem.

Die Lösung ist denkbar einfach - glaubt man: Sucht die Datei rc.exe auf eurem System und tragt den entsprechenden Pfad unter Tools -> Options -> Projects and Solutions -> VC++ Directories ein. Fehlt rc.exe, so kann man diese im Microsoft Windows SDK-Paket herunterladen. Beachtet dabei, dass es für unterschiedliche Plattformen (Win32, x64, Itanium) zu unterschiedlichen Einträgen kommen muss. Hier sollte entweder ein fester Pfad oder die Angabe $(WindowsSdkDir)\bin bzw. $(WindowsSdkDir)\bin\x64 zu finden sein.

Manchmal reicht das aus ;) Ist das Windows SDK installiert und es es funktioniert nur mit festen Pfaden (die ihr nicht wollt, da man dann die Links bei jedem SDK-Update wieder anpassen muss), so kann auch ein falscher Eintrag in der Registry schuld sein. Im Pfad

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows

steht die Zeichenfolge mit dem Namen CurrentInstallFolder. Diser sollte auf das aktuelle Verzeichnis der SDK zeigen (bei Änderung ist ein Neustart von Visual Studio notwendig). Man kann im Übrigen leicht prüfen, auf was das Macro $(WindowsSdkDir) wirklich zeigt, indem man in den Eigenschaften eines Projekts die Command Line des Pre-Build-Events ändert und sich dort die Macro-Liste anschaut.

Manchmal reicht das aus ;) Die Einstellungen in diesem Schlüssel waren bei mir korrekt - und dennoch kam es zu dem Fehler, da das Macro immer noch hartnäckig auf den falschen Pfad verwies. Bei der weiteren Suche ist mir noch der Pfad

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows

untergekommen. Und hier stand (wieder mit dem Namen CurrentInstallFolder) der richtige Pfad zur falschen Version ;) Schnell geändert, VS neu gestartet und endlich klappts auch wieder mit meinem C++...

Tags: ,

C++

Table Looping zusammen mit Logical Functoid

by wolfgang@gehirnwindung.de (Wolfgang) März 24, 2009 18:38

Nachdem ich ein wenig an einem Table-Looping "rumgespielt" hatte, funktionierte auf einmal gar nichts mehr. Der Build-Vorgang brach mit der Meldung

XSL transform error: Unable to write output instance to the following <file:///../test_output.xml>. XSLT compile error at (40,38).
See InnerException for details. 'userCSharp:LogicalNe(string($var:) , "")' is an invalid XPath expression.
'userCSharp:LogicalNe(string($var:) , "")' has an invalid qualified name.

ab. Klar, $var: alleine ist ungültig, da fehlt ein Bezeichner. Aber wer ist für das Fehlen desselben verantwortlich ;) Selbst nachdem ich im Table Looping Grid alles wieder zurückgestellt hatte, lief es nicht mehr. Testweise habe ich alle Logical Functoide nach den Table Extractoren entfernt - damit ist der Build wenigstens nicht mehr abgebrochen. Sobald die Logical Functoide wieder eingefügt waren, kam der Fehler aber auch wieder auf...

vollständigen Artikel anzeigen...

Tags: ,

Microsoft BizTalk Server

Biztalk-Mapper XPath-Injection

by wolfgang@gehirnwindung.de (Wolfgang) März 23, 2009 20:42

Heute war ich auf der Suche nach einer Möglichkeit, die Existenz mehrerer Unterelemente festzustellen. Mit vielen vereinzelten Existence-Abfragen würde das sicherlich funktionieren, aber es handelt sich um ein weit verzweigtes XML-Dokument. Zudem sollte es an mehreren Stellen mit unterschiedlichen Elementen funktionieren - es damit musste eine andere Möglichkeit gefunden werden, als eine ganze Existence-Batterie oder das Scripting-Funcoid.

Mein erster Versuch galt dem Mapping-Format. Ich hab probiert, die "Link Source"-Eigenschaft des Links direkt zu ändern, aber beim nochmaligen Öffnen des Mappings wird diese Änderung einfach ignoriert...
vollständigen Artikel anzeigen...

Tags: ,

Microsoft BizTalk Server

Powered by BlogEngine.NET 1.6.1.6
Theme by Mads Kristensen | Modified by Mooglegiant and me ;)