Folks from a fellow team are trying to solve a sporadic problem where for some unknown reason their RosettaNet application sometimes fails submitting invoices to our EDI partner, which is OpenInvoice.
In the meanwhile they asked for help with finding the invoices for which all attempts to send them have failed. Below is a query that I wrote for them.
A few comments about how it works.
Our BizTalk configuration includes ESB Toolkit. If an application fails, the exception is recorded in the EsbExceptionDb database. Next, we use BizTalk Accelerator for RosettaNet (BTARN) for the electronic document exchange with our partners who support RosettaNet. The messages sent and received are stored in the BTARNDATA database. The query is a RIGHT JOIN; it find error records (exceptions) for which there is not any matching record among the successfully sent messages.
In the meanwhile they asked for help with finding the invoices for which all attempts to send them have failed. Below is a query that I wrote for them.
A few comments about how it works.
Our BizTalk configuration includes ESB Toolkit. If an application fails, the exception is recorded in the EsbExceptionDb database. Next, we use BizTalk Accelerator for RosettaNet (BTARN) for the electronic document exchange with our partners who support RosettaNet. The messages sent and received are stored in the BTARNDATA database. The query is a RIGHT JOIN; it find error records (exceptions) for which there is not any matching record among the successfully sent messages.
--the invoices that failed all sending attempts WITH XMLNAMESPACES ('http://www.api.org/pidXML/v1.0' as pidx) select failed.* from ( select SI.Invoice.value('pidx:InvoiceNumber[1]', 'varchar(90)') as SuccessInvoiceNumber from [BTARNDATA].[dbo].[MessagesFromLOB] lob CROSS APPLY (select cast(lob.ServiceContent as xml)) as XmlContent(CData) CROSS APPLY (select try_cast(XmlContent.CData.value(' declare default element namespace "http://schemas.microsoft.com/biztalk/btarn/2004/LOBMessage"; /ServiceContent[1]', 'varchar(max)') as xml)) as XmlInner(Msg) CROSS APPLY XmlInner.Msg.nodes('/pidx:Invoice/pidx:InvoiceProperties') as SI(Invoice)) succeeded right join ( select FailedInvoiceNumber, max(DateTime) as LastErrorTime from (select FI.Invoice.value('pidx:InvoiceNumber[1]', 'varchar(90)') as FailedInvoiceNumber, f.DateTime FROM [EsbExceptionDb].[dbo].[Fault] f inner join [EsbExceptionDb].[dbo].[Message] m on f.FaultID = m.FaultID inner join [EsbExceptionDb].[dbo].[MessageData] md on m.MessageID = md.MessageID CROSS APPLY (select cast(md.MessageData as xml)) as XmlData(Msg) CROSS APPLY XmlData.Msg.nodes('/pidx:Invoice/pidx:InvoiceProperties') as FI(Invoice)) allfailed GROUP BY FailedInvoiceNumber) failed on succeeded.SuccessInvoiceNumber=failed.FailedInvoiceNumber where succeeded.SuccessInvoiceNumber is null