2016-06-15 12 views
0

Ich habe ein Integrationsobjekt mit dieser XML-Darstellung:Kann ich Integrationskomponenten mithilfe der Siebel-Datenzuordnung zusammenführen?

<root> 
    <request code="123" title="Test"> 
    <user name="Chuck Bartowski" email="-" /> 
    <data d1="aaa" d2="bbb" d3="ccc" /> 
    <attachments> 
     <attachment name="text.txt" size="50" /> 
     <attachment name="image.png" size="385" /> 
    </attachments> 
    </request> 
</root> 

Und ich brauche einige der Knoten (Integrationskomponenten) in eine, zu konvertieren, die XML-Daten in so etwas zu verschmelzen:

<root> 
    <request code="123" title="Test" userName="Chuck Bartowski" userEmail="-" 
      data1="aaa" data2="bbb" data3="ccc" /> 
    <attachments> 
     <attachment name="text.txt" size="50" /> 
     <attachment name="image.png" size="385" /> 
    </attachments> 
    </request> 
</root> 

Ich versuche dies mit Siebel 7.8 Datenzuordnungen (EAI Data Transformation Engine) zu erreichen. Also, ich habe eine Integrationsobjektkarte erstellt, mit folgenden Integrationskomponente Karten:

NAME SOURCE IC  TARGET IC 
r1 request -> request 
r2 user  -> request 
r3 data  -> request 
att attachment -> attachment 

Leider ist es nicht zu tun, was ich erwartet hatte. Stattdessen gibt er dies:

<root> 
    <request code="123" title="Test"> 
    <attachments>...</attachments> 
    </request> 
    <request userName="Chuck Bartowski" userEmail="-"> 
    <attachments>...</attachments> 
    </request> 
    <request data1="aaa" data2="bbb" data3="ccc"> 
    <attachments>...</attachments> 
    </request> 
</root> 

Ich weiß, es ist möglich, eine einzelne Quellkomponente in mehrere Ziele abzubilden, sondern kann das Gegenteil getan werden? Kann ich viele Quellen zu einem einzigen Ziel zusammenführen?

Bisher habe ich versucht zu r1 die Parent Component Map Name Feld Einstellung, sowohl in r2 und r3, aber es brachte mir nur eine schöne SBL-EAI-04008 Fehler: Integration Komponententyp ‚request‘ ist kein gültiges Kind Geben Sie für den Komponententyp "Anfrage" ein.

Fehle ich einen Konfigurationsschritt, oder ist das nur mit der Data Mapping Engine nicht möglich? Ich rufe es von einem Server-Skript, also wenn nichts anderes funktioniert, könnte ich die Eigenschaft dort anpassen, nachdem das Mapping abgeschlossen ist.

Antwort

0

Ich fand die Antwort in der Siebel bookshelf. Ja, es kann getan werden, aber nicht, wie ich versuche, es zu tun:

You may want to address fields in components other than the source component. This is because your target component may depend on more than one component in the source object. In such cases, you cannot use different component maps with different source components, and the same target component, because each component map creates a different instance of the target component. Data Mapping Engine expressions allow you to use the dot notation to address fields, other than the source component, in source integration object components —for example, [Component Name.Field Name] .

Addressing fields in other components is legal only if the cardinality of the component is less than or equal to one relative to the source component —that is, only if the component can be uniquely identified from the context of the source component without using any qualifiers other than the component name.

Also, der Schlüssel nur eine Komponente Mapping für jedes Ziel zu schaffen, und dann ist Feldzuordnungen aus den anderen Quellen. In meinem Beispiel hätte ich:

NAME SOURCE IC  TARGET IC 
req request -> request 
att attachment -> attachment 

Und innen req, folgende Feldzuordnungen:

SOURCE   TARGET 
[code]  -> code 
[title]  -> title 
[user.name] -> userName 
[user.email] -> userEmail 
[data.d1]  -> data1 
...