|
![]() |
#1 |
Участник
|
Спасибо!
\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; } |
|