我们有一个带有两个集成对象的Siebel 7.8应用程序,它们都有一个用于附件的集成组件。其中一个将附件字段定义为DTYPE_ATTACHMENT
,而另一个将其定义为DTYPE_TEXT
(它用于入站web服务,该服务读取base64数据字符串并将其写入磁盘上的文件)。
我正在尝试使用UI数据映射和EAI Data Transformation Engine
服务将数据从IO转换为其他IO,但到目前为止我一直没有成功:
- 如果我转换数据从
DTYPE_ATTACHMENT
到DTYPE_TEXT
,它不会引起任何错误,但附件base64数据丢失,我只得到row_id在结果XML。 - 如果我转换数据从
DTYPE_TEXT
到DTYPE_ATTACHMENT
,我得到这个错误:源表达式生成的附件ID ' mdeymzq1ncc[…]] DEy8/W3CDCys7U2w==',但无法找到相应的附件。(sbl - eai - 04058)
是否有任何方法可以将数据从一个集成对象转换为另一个,而不会丢失base64数据?我不在乎转换是"附件到文本"还是"文本到附件",我可以构建我需要的任何一种方式。我不能更改集成对象的定义,但是如果需要,我可以创建一个新对象作为中间步骤使用。
我放弃。这是不可能的。这是不可能的,任何进一步的尝试都会导致已知宇宙的内爆。谢谢,Siebel !
然而…我已经为我的需求找到了一个相当简单的解决方案。事实上,它是如此简单,我简直不敢相信我花了4天时间才弄明白。
我没有尝试将DTYPE_TEXT
字段强制转换为DTYPE_ATTACHMENT
字段,反之亦然,而是在输出集成对象中创建了该字段的两个版本:content (DTYPE_ATTACHMENT)
和contentText (DTYPE_TEXT)
。现在,这两个字段有不同的名称,但它们共享External Name
和XMLTag
属性(content
)。对希贝尔来说,它们是不同的领域,我可以在数据映射中以不同的方式处理它们;然而,一旦执行了数据转换,它们都变成了<content>
,因此web服务另一端的外部系统不会注意到任何差异。完成了!