SQL Practice Blog – SQL Server, BizTalk und .NET Erfahrungen

BizTalk Server: Properties in Dateinamen verwenden

leave a comment »

Ich stand heute vor dem Problem, das ich einen Teil der Inhalte einer XML Datei, welche ich mit BizTalk eingelesen habe, bei der Ausgabe im Dateinamen mit unterbringen wollte.

Wenn man in BizTalk einen Send Port mit dem FILE Adapter definiert, so steht im Feld des Dateinamens folgendes: %MessageID%.xml. Hier hat man als Entwickler die Möglichkeit neben dem MessageID Makro auch noch folgende Makros einzusetzen:

Makro

Definition

%datetime%

Coordinated Universal Time (UTC) date time in the format YYYY-MM-DDThhmmss (for example, 1997-07-12T103508).

%datetime_bts2000%

UTC date time in the format YYYYMMDDhhmmsss, where sss means seconds and milliseconds (for example, 199707121035234 means 1997/07/12, 10:35:23 and 400 milliseconds).

%datetime.tz%

Local date time plus time zone from GMT in the format YYYY-MM-DDThhmmssTZD, (for example, 1997-07-12T103508+800).

%DestinationParty%

Name of the destination party. The value comes from the message context property BTS.DestinationParty.

%MessageID%

Globally unique identifier (GUID) of the message in BizTalk Server. The value comes directly from the message context property BTS.MessageID.

%SourceFileName%

Name of the file from where the File adapter read the message. The file name includes the extension and excludes the file path, for example, Sample.xml. When substituting this property, the File adapter extracts the file name from the absolute file path stored in the FILE.ReceivedFileName context property. If the context property does not have a value, for example, if a message was received on an adapter other than the File adapter, the macro will not be substituted and will remain in the file name as is (for example, C:\Drop\%SourceFileName%).

%SourceParty%

Name of the source party from which the File adapter received the message.

%SourcePartyQualifier%

Qualifier of the source party from which the File adapter received the message.

%time%

UTC time in the format hhmmss.

%time.tz%

Local time plus time zone from GMT in the format hhmmssTZD (for example, 124525+530).

 

Möchte man jedoch den Wert eines Elements der eingelesenen XML Datei, wie z.B. den Firmennamen, mit im Dateinamen unterbringen, ist man schnell an den Grenzen der Makros angekommen. Hierfür gibt es jedoch einen ganz einfachen Trick. Dazu muss man wissen das die Makros wie SourceFileName oder MessageID eigentlich nichts anderes sind als Properties eines PropertySchemas.
Als BizTalk Entwickler könnte man jetzt auf die folgende Idee kommen. Man legt im XSD Schema der eingehenden Nachricht ein PropertyPromotion Schema fest, welches z.B. für die bestehenden Makros genutzt wird. Ganz konkret werden wir das Makro %SourceFileName% überschreiben.

  1. Man klickt in dem gewünschten XSD Schema mit der rechten Maustaste auf Schema und wählt dort unter dem Menupunkt Promotion einfach Show Promotion aus.
  2. In dem sich nun öffnenden Fenster selektiert man den Reiter Property Fields und klickt auf das Ordnersymbol um ein bestehendes PropertySchema zu öffnen.
  3. In dem folgenden Fenster wählt man den Punkt References und dann Microsoft.BizTalk.GlobalPropertySchemas aus und selektiert das Schema FILE.bts_file_properties.
  4. Nun befindet man sich wieder in dem Fenster mit dem Reiter Property Fields und fügt der unteren Liste das gewünschte Feld aus dem Schema hinzu. Dann wählt man in der unteren Liste für den eben hinzugefügten Eintrag die Node ReceivedFileName aus. Auf diese Node greift das Makro
    %SourceFileName%  zu, welches wir jetzt im Filename des Adapter verwenden und damit den Inhalt einer Property der XML Nachricht im Filename verarbeiten können.

Manchmal kann man dem BizTalk Server eben nur mit Tricks beikommen🙂 Dieser Trick funktioniert mit dem BizTalk Server 2006 und 2009.

Written by Robert Meyer

Mai 11, 2010 um 15:05

Veröffentlicht in BizTalk

Tagged with , , , ,

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: