2016-11-07 51 views
1

我有一個傳出的Web服務將數據從Siebel 7.8發送到外部系統。爲了使集成工作,在發送數據之前,我必須更改其中一個字段值,將"old"的每個出現次數替換爲"new"如何用EAI數據映射來做到這一點?如何替換Siebel數據映射中的文本?


在一個理想的世界,我只想用一個集成源表達喜歡Replace([Description], "old", "new")。然而,Siebel遠非理想,並且沒有替代功能(或者如果是的話,它沒有記錄)。我可以用all the Siebel query language functions其中don't need an execution context。我也可以使用functions available for calculated fields理智的人可能期望這兩個列表是相同的,但Siebel文檔也很不理想)。

我的第一次嘗試是使用InvokeServiceMethod函數並在eScript中自己替換文本。所以,這是我的字段映射源表達:

InvokeServiceMethod('MyBS', 'MyReplace', 'In="' + [Description] + '"', 'Out') 

some configuration steps後,它工作得很好......除非我的描述字段包含"字符:Error parsing expression 'In="This is a "test" with quotes"' for field '3' (SBL-DAT-00481)

我知道爲什麼會這樣。我的雙引號打破了表達,我必須通過加倍字符來逃避它們,如This is a ""test"" with quotes。但是,如何替換每個"""以調用我的業務服務...如果我沒有替換功能? :)

Oracle的支持網絡只有one result for the SBL-DAT-00481 error,作爲一種解決方法,建議將整個參數放在雙引號(我已經有)中。有a linked document,他們承認該解決方法對於少數字符(如逗號或單引號)有效,但由於Siebel 7.7-7.8(不存在於8.0+中)中的錯誤,它不適用於雙引號。他們建議將行標識作爲參數傳遞給業務服務,然後直接從BC中檢索數據。

在我這樣做之前,最終爲解決方法(使用InvokeServiceMethod)的變通辦法(使用雙引號)的性能影響解決方法(只傳遞ID)沒有替換功能...我會去瘋了嗎?在Siebel數據映射中沒有簡單的方法來執行簡單的文本替換嗎?

回答

0

我想到的第一件事(很可能 - 遠不是最優的) - 是在BC源計算域中創建的,又名(NEW_VALUE),它對於每個記錄都變爲「NEW」,其中原始域具有價值「老」。並簡單地在集成圖中使用此字段。

+0

我不明白你在暗示什麼......除非是「IIF」計算表達式?這是行不通的,我的領域沒有「新」作爲價值,它包含了它。這可能是「新希望」,或者「新堡的最新消息」,或者其他什麼,我需要將它們改爲「舊希望」,「舊堡中最古老的老人」等。 – AJPerez

+0

我剛剛注意到我說過了在我以前的評論中倒退。 「舊希望」將成爲「新希望」,而不是相反:)。無論如何,這並不重要,它只是我實際需要的一個簡單示例。 – AJPerez