Спасибо!
\Classes\AifRequestProcessor\handleProcessingException
X++:
static private AifXml handleProcessingException(AifMessage message, AifInfoLog aifInfoLog)
{
SysExceptionLog exceptionLog;
AifXml faultXml;
AifMessage originalMessage;
//<#AIF infolog fix>
str infoLogStr(InfologData _infologData)
{
str ret;
SysInfoLogEnumerator infoLogEnum = SysInfoLogEnumerator::newData(_infologData);
SysInfologMessageStruct infoMessageStruct;
;
while(infoLogEnum.moveNext())
{
infoMessageStruct = SysInfologMessageStruct::construct(infoLogEnum.currentMessage());
if (ret)
{
ret += '\r\n';
}
ret += strFmt('%1: %2',
infoMessageStruct.preFixTextElement(infoMessageStruct.prefixDepth()),
infoMessageStruct.message());
}
return ret;
}
//</#AIF infolog fix>
// We have to get the faultXml first, otherwise doing a infolog.cut() will clear
// the fault object from infolog.
//<#AIF infolog fix>
//if( message && AifEndpoint::propagateErrors(message.sourceEndpointId()) )
//{
// faultXml = AifFault::faultXml(aifInfoLog.getLastMessage());
//}
//else
//{
// faultXml = AifFault::faultXml("@SYS94277");
//}
faultXml = AifFault::faultXml(infoLogStr(aifInfoLog.getInfoLogData()));
//</#AIF infolog fix>
//Write entries to the Exception Log
exceptionLog = new SysExceptionLog();
exceptionLog.writeInfoLogData(strfmt("@SYS95172"), aifInfoLog.getInfoLogData());
aifInfoLog.clearLast();
// Set message status to Error if not processed yet
// The message will exist only if the message has been created, if
// any exception was thrown from processInboundMessage() before the message was created,
// the below call (AifMessageManager::update()) will fail, so we have additional check here.
if( message
&& message.messageId()
&& (!AifMessageManager::isNewMessage(message.messageId())))
{
originalMessage = AifMessageManager::read(message.messageId());
// If message in already in processed or error state, then leave it as is.
if ((originalMessage.status() != AifMessageStatus::Processed) && (originalMessage.status() != AifMessageStatus::Error))
{
originalMessage.status(AifMessageStatus::Error);
AifMessageManager::update(originalMessage, classstr(AifRequestProcessor), true);
}
}
return faultXml;
}