Hello all.
I would like to pose an architectural question to you, in the hopes that your feedback might lead me to making a design decision.
I am currently working on a webMethods EDI project for a company that will receive X12 documents from a VAN via EDIINT/AS2 into Trading Networks 6.0.1. The X12 data will then be:
- Mapped to a Canonical model
- Published to the Broker
- A Subscribing Flow service maps the Canonical data to a flat file format.
- Deliver flat file data to a Mainframe via FTP.
The design decision that I’m struggling with is deciding which of the following two options is best:
OPTION 1
I can process the inbound X12 data at the Transaction level. This means the following:
- Set the splitOption for all EDITPAs to “Transaction”.
- Create a processing rule for the Interchange envelope that will invoke a service that will generate a Functional Acknowledgement and send it back to the Trading Partner.
- Ignore the Group envelope.
- Create a processing rule for each Transaction type (810, 831, 832) which will invoke the appropriate service that will map the transaction content to a canonical model, and then publish.
The downside, in my opinion, to processing at the Transaction level, is that Trading Networks will become cluttered with documents. For example, If a Trading Partner sends a single X12 Envelope with one GS and 100 invoices inside, the Transaction Analysis Window will show 103 entries: 1 EDIINT document, 1 X12 Envelope, 1 X12 Group, and 100 X12 810s. Also, because we’re processing at the Transaction level, each individual transaction will be mapped and published separately, resulting in 100 publishes to the Broker. Now on to Option 2.
OPTION 2:
I can process the inbound X12 data at the Group level. This means the following:
- Set the splitOption for all EDITPAs to “Group”.
- Create a processing rule for the Interchange envelope that will invoke a service that will generate a Functional Acknowledgement and send it back to the Trading Partner.
- Create a processing rule for the Group envelope that will loop over the GS segment, look inside each ST to determine the transaction type (e.g. 810, 831, etc), and then call another transaction specific flow service that will map to the canonical model and append the result to a list of canonicals. This list will then be published to the Broker.
- Transactions are not recorded in the Transaction Analysis Window because the splitOption is set to “Group”.
The upside to this path is that Trading Networks will only record entries in the Transaction Analysis Window for X12 Envelopes and X12 Groups. If a Trading Partner sends an X12 Envelope with one GS and 2000 invoices (which happens all the time here), only three entries will appear in the Transaction Analysis Window: 1 for the EDIINT document, one for the X12 Envelope, and one for the Group Envelope. Also, because we’re processing at the group level, all documents of the same transaction type will be mapped and published together, which will result in far fewer publishes to the Broker.
The downside here though, is that each individual Publish to the Broker can potentially contain a lot of data (3-5 MB). In the past, I’ve experienced very poor performance on the Broker when it tries to process really large documents.
What I’m really looking for here is for some of you that have implemented similar projects, to please share your experiences regarded which level is best to process at: Transaction, Group, or Interchange.
All comments, thoughts, suggestions are welcome and appreciated. Thanks.