我有一个带有此XML表示的集成对象:
<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>
我需要将一些节点(集成组件)合并为一个,将XML转换为如下所示:
<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>
我正在尝试使用Siebel 7.8数据映射(EAI数据转换引擎)实现此目的。因此,我创建了一个集成对象映射,其中包含以下集成组件映射:
NAME SOURCE IC TARGET IC
r1 request -> request
r2 user -> request
r3 data -> request
att attachment -> attachment
不幸的是,它并没有达到我的预期。相反,它输出:
<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>
我知道可以将单个源组件映射到多个目标,但是,可以相反吗?我可以将多个来源合并到一个目标中吗?
到目前为止,我已尝试在r1
和r2
中将Parent Component Map Name字段设置为r3
,但它只为我赢得了一个不错的SBL-EAI- 04008错误:集成组件类型“请求”不是组件类型“请求”的有效子类型。
我是否遗漏了一些配置步骤,或者仅仅使用数据映射引擎这是不可能的?我从服务器脚本调用它,所以如果没有其他工作,我可以在映射完成后调整那里的属性集。
答案 0 :(得分:0)
我在Siebel bookshelf找到了答案。是的,它可以完成,但不是我试图这样做的方式:
您可能希望处理源组件以外的组件中的字段。这是因为您的目标组件可能依赖于源对象中的多个组件。在这种情况下,您不能使用具有不同源组件和相同目标组件的不同组件映射,因为每个组件映射都会创建目标组件的不同实例。数据映射引擎表达式允许您使用点表示法来处理源集成对象组件中除源组件之外的字段 - 例如,
[Component Name.Field Name]
。只有当组件的基数小于或等于相对于源组件的一个时,其他组件中的字段才是合法的 - 也就是说,只有当组件可以从源组件的上下文,不使用除组件名称之外的任何限定符。
因此,关键是只为每个目标创建一个组件映射,然后包括来自其他源的字段映射。在我的例子中,我会:
NAME SOURCE IC TARGET IC
req request -> request
att attachment -> attachment
在req
内,以下字段映射:
SOURCE TARGET
[code] -> code
[title] -> title
[user.name] -> userName
[user.email] -> userEmail
[data.d1] -> data1
...