Hello all, I'm looking for help in designing a process. I am hoping this scenario can be solved by a common design pattern.
Here is the scenario:
Multiple times per day, I will be sending an EDI820 to a partner. The communication method is SFTP.
Once they receive my 820, they will send back an 824 and a 997.
Once I receive their 824, I will send back a 997.
Important: If the partner does not send me a corresponding 997 / 824 within 2 hours of me sending the 820, I need to send out a warning email.
I very recently took the Boomi EDI course and am familiar with how to send a 997 once I receive an 824 from the partner, but this is my first real crack at dealing with EDIs.
My question is related to how do I keep track of which 820 received an 824/997 and which are still outstanding and waiting for a 824/997. Based on my knowledge of EDIs right now, the EDI820 should have a reference number or a transaction number which I can use to tie all of these messages together.
One approach I had was to use a database table to record this unique transaction number and as I receive an 824 or 997, update the row with a flag to indicate I've received a reply. I could then have another process that monitors this table and if any sent message does not have a reply flag within 2 hours of its sent date, send an email warning.
Another approach is to use 3 processes:
Sender process: Send the 820 file and put 2 messages on an internal Atom queue with the reference number/transaction number from the EDI document to signify that I am waiting for a 997 and an 824. I could also note the time the message was sent and set an expiry value on the message.
Receiver process: Retrieve 824/997s from the partner. As I process each received file, dequeue the corresponding message from the Atom queue. Here I could possibly filter the messages by the unique transaction/reference number.
Monitor process: Monitor the Atom queue and look for any messages that have been in the queue for 2+ hours or any messages whose expiry date has passed. Send an email if such a message is found.
I'm hoping someone here has solved a similar problem and can share some tips on how they solved it.