2016-11-07 8 views
1

У меня есть исходящая веб-служба для отправки данных от Siebel 7.8 во внешнюю систему. Для того, чтобы интеграция работала, перед отправкой данных я должен изменить одно из значений поля, заменив каждое обнаружение "old" на "new". Как это сделать с помощью сопоставлений данных EAI?Как заменить текст в сопоставлении данных Siebel?


В идеальном мире я бы просто использовать выражение в источник интеграции как Replace([Description], "old", "new"). Однако Siebel далеко не идеален и не имеет функции замены (или, если это так, он не документирован). Я могу использовать all the Siebel query language functions, который don't need an execution context. Я также могу использовать 442407305908000794771418888 (здравомыслящий человек мог ожидать, что оба списка будут одинаковыми, но документация 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) для отсутствия функции замены ... Я иду здесь сумасшедший? Разве нет простых способов простой замены текста в сопоставлении данных Siebel?

ответ

0

Первое, что мне кажется, - это создать в исходном BC вычисляемое поле, ака (NEW_VALUE), которое становится «NEW» для каждой записи, где поле происхождения имеет значение «OLD». и просто используйте это поле в карте интеграции.

+0

Я не понимаю, что вы предлагаете ... разве это не выражение 'IIF'? Это не сработает, мое поле не имеет «нового» в качестве значения, оно содержит его. Это может быть «новая надежда» или «новейшие новости в Ньюкасле» или что-то еще, и мне нужно изменить их на «старую надежду», «старшие старики в старой жизни» и т. Д. – AJPerez

+0

Я только заметил, что я это сказал назад в моем предыдущем комментарии. «старая надежда» станет «новой надеждой», а не наоборот :). Во всяком случае, это не имеет значения, это был просто упрощенный пример того, что мне действительно нужно ... – AJPerez