none
Schemaversionierung

    Frage

  • Hallo Ihr Lieben.

    Wir sind eine Firma, welche Bestellungen per EDI an unsere Filialen und auch an mehrere Hersteller versendet.
    Demnach haben wir eine eine Applikation welche unsere firmen-internen Prozesse abbildet und dort auch die dafür nötigen Schemas (zum Beispiel bestellung.xsd).

    Des Weiteren haben wir für jeden der 6 Hersteller jeweils eine eigene Applikation, welche im dort enthaltenen Mappings dann natürlich eine Referenz auf unsere internen Schemata enthält. (Um zum Beispiel ein Mapping von bestellung.xsd zu auftrag_hersteller.xsd zu realisieren).

    Nun bekommen wir einen neuen Hersteller, für dessen Anforderungen wir eine neues Feld in unserem internen Schema benötigen.

    Frage: Wie kann ich die Änderung des internen Schemas nur für die neue Applikation des neuen Herstellers gültig machen? Quasi OHNE AUCH ALLE anderen Applikationen anpassen zu müssen, da diese ja alle auch eine Referenz auf das interne Schema beinhalten, welches ja jetzt "erneuert" wird?

    Oder muss ich alle Applikationen nun anpassen und neu ausrollen?

    Vielen Dank für Eure Hilfe!

    Gruß Kuli


    -kugelschreiber-

    Montag, 6. August 2012 09:15

Alle Antworten

  • Hallo Kuli,

    es kommt ein wenig auf euren Prozess an. Grundsätzlich würde ich empfehlen neben der Versionierung der Assembly ebenfalls das Schema selbst im Namespace mit einer Version zu versehen, um diese bei eventuellen Updates eindeutig zu machen. Ich benutze hier meistens http://firmendomain/Project/Schema/Jahr/Monat/

    Dann könntest du jetzt eine neue Version des Schemas deployen (in einer neuen Assembly) und den neuen Prozess für den neuen Hersteller damit zu entwickeln. Allerdings müsstest du für den einen Hersteller dann irgendwo im Prozess von deinem alten Schema auf dein neues Schema Mappen und das neue Feld mit Informationen versehen.

    Das hängt aber stark von deinem Prozess ab. Das ist leider manchmal schwerer als es klingt.

    Dann bliebe dir nur das alte Schema zu erweitern und alle darauf basierenden Projekte neu zu bauen. Eine Assembly Versionierung funktioniert hier nicht, da dann das Schema doppelt vorhanden wäre.

    Was klappen sollte: Wenn das Schema in einer extra Assembly liegt und nur referenziert wird kannst du das Schema erweitern und neu bauen (ansonsten alles unverändert lassen). Der Assembly Name bleibt gleich, der Klassenname auch. Die anderen Orchestrations sollten das Schema also noch finden und wenn der neue Knoten MinOccurs=0 hat, ist er für die Validität nicht notwendig. Dann müssten die alten Orchestrations laufen wie bisher auch. Die neue Orchestration kannst du dann mit dem neuen Knoten im Schema entwickeln.


    If you like my post or consider it as a valid answer, please use the buttons to show me - Oliver

    Microsoft Most Valuable Professional for BizTalk Server
    http://www.appfabric.de

    Mittwoch, 8. August 2012 07:34
  • Hi,

    aus der Beschreibung geht hervor, dass das interne Schema über ein Mapping mit jeder BizTalk Anwendung verdrahtet ist. 

    Eine loose Kopplung der Anwendungen über ein kanonisches Schema könnte Abhilfe schaffen. Ein kanonische Schema (siehe Link) kann ein etwa ein Standard XSD-Schema sein, so wie beispielsweise:

    Diese bilden weitestgehend eine Basis, die als Übermenge für die fachliche Anwendung eines EAI Prozesses verwendet werden kann. Das kann in der Praxis so aussehen:


    Legende: ExtNx (=externe Nachricht), IntNx (interne Nachricht), kan. Schema (kanonisches Schema)

    Dieses Lösungsmuster hat den Vorteil, dass bei künftigen Änderungen Mappings zu bestehenden internen Schema im BizTalk Server verborgen bleiben (mit grüner Farbe dargestellt, in roter Farbe sind dagegen neue Mappings dargestellt) und damit nicht geändert werden müssen. 

    Das kann bei künftigen Änderungen viel Arbeit sparen ! 

    hth

    Paul Endras
    Endras IT Consulting www.endras.de  

    If this answers your question and is a helpful post, please click Vote As Helpful, Propose As Answer, and/or Mark As Answer.


    • Bearbeitet Paul Endras Mittwoch, 5. September 2012 13:38
    Mittwoch, 5. September 2012 13:35