BizTalk: ошибка в рекламируемом ресурсе

Я получаю следующую ошибку, когда запускаю Orchestration и пытаюсь присвоить значение продвигаемому свойству, читая значение другого продвигаемого свойства.

Ошибка в приостановленной оркестрации:

Внутреннее исключение: в сообщении нет значения, связанного со свойством BankProcesses.Schemas.Internal_ID.

Подробности:

У меня есть 2 схемы XSD: одна для вызова хранимой процедуры и чтения ее ответа, а другая для записи в плоский файл. Внутренний идентификатор, возвращенный в ответе от SP, должен быть передан узлу в другой схеме XSD для записи в формат плоского файла.

Я продвинул элемент из схемы ответа, а также продвинул элемент из схемы для записи в плоский файл. Я присваиваю значение продвигаемым свойствам, как показано ниже:

strInternalId = msgCallHeaderSP_Response(BankProcesses.Schemas.Internal_ID);

msgCallSP(BankProcesses.Schemas.Header_Internal_ID) = strInternalId;

Но когда я запускаю оркестровку, я получаю сообщение об ошибке, как указано выше. Я проверил ответ от хранимой процедуры, и ответный XML содержит некоторое значение, но я не могу присвоить это значение другой схеме. Пожалуйста посоветуй

Спасибо, Майур


person Mayur Jadhav    schedule 02.12.2013    source источник
comment
Если все, что вы хотите сделать, это скопировать его из одного сообщения в другое и не нуждаться в его продвижении (чтобы к нему можно было получить доступ из контекста сообщения), тогда вам лучше выделить его, чем продвигать. Продвижение имеет более высокую стоимость обработки. Какой тип данных имеет Internal_ID?   -  person Dijkgraaf    schedule 03.12.2013


Ответы (3)


Вы можете использовать exists для проверки существования свойства.

if(BankProcesses.Schemas.Internal_ID exists msgCallHeaderSP_Response)
{
    strInternalId = msgCallHeaderSP_Response(BankProcesses.Schemas.Internal_ID);

    msgCallSP(BankProcesses.Schemas.Header_Internal_ID) = strInternalId;
}
person Serkan Arslan    schedule 30.11.2017

Один из сценариев, который может вызвать эту ошибку, заключается в том, что в сообщении, которое вы пытаетесь изменить, отсутствует элемент Header_Internal_ID. Можете ли вы проверить сообщение перед модификацией, чтобы убедиться, что есть элемент, значение которого должно быть изменено - возможно, перетащите сообщение в папку с файлом.

Если это так, просто убедитесь, что вы создаете этот элемент при первом создании экземпляра своего сообщения r, даже если изначально вы установили его как пустой элемент.

ХТН

person TJ Amas    schedule 02.12.2013

Чтобы проверить, существует ли свойство, вы можете использовать этот синтаксис:

BMWFS.LS.BizTalk.CFS.BankProcesses.Schemas.Internal_ID существует msgCallHeaderSP_Response

Однако, если исходное поле всегда будет там, вам придется работать в обратном направлении, чтобы выяснить, почему свойство не отображается в контексте.

Если оно приходит из порта, передается ли сообщение через компонент XmlDisassembler? Если это исходит от другой оркестровки, вы действительно устанавливаете свойство?

Самый простой способ просмотреть контекст — направить сообщение msgCallHeaderSP_Response на остановленный порт отправки. Затем вы можете просмотреть контекст в BizTalk Administrator.

person Johns-305    schedule 04.12.2013