EDIINT Send Error handling

Hi all
We are using EDIINT AS2 for data exchnage with our partners and use UNEDIFACT 96A doc standard. We came across the following issues

  1. The “wm.EDIINT:send” service does not have any output parameters. So
    we are unable to determine if a ediint send was sucessfull or not. We
    tried the service with different error conditions and even though an
    exception is thrown at the server console , the “send” flow service
    returns sucessfully, even the “getLastError” service returns nothing.
    We also tried querying TN using the query services for the status of
    EDIINT send message but that is not possible as the “send” service does
    not return the document ID . Actually our business rule requires us to
    update a DB field once data is send sucessfully. Please advice as to
    how to capture errors in send service. The only option with us right now is to modify the send service which is an inbuilt service.

  2. In case we are using reliable delivery of data, how to
    programetically figure out whether it was sucessfull or not ? Is there an event we can capture using which we can trigger our own service incase reliable delivery failed ?

  3. Another option is to use MDN buthis also requires modification of wm built in service . Is it a good practise ?

Thankx in advance
Rajoy

Rajoy
I strongly recommend using MDN. This will remain your acknowledgement that data reached the other end. With MDN requested, all the EDIINT transaction stays in a user status like waiting for MDN. Refer to EDIINT guide for more status. If you supply a unique conversation ID for all the EDIINT transactions, then you can relate MDN to the same EDIINT transaction.
Then you can write a scheduled service which checks for these user status and update your DB fields or spawn a service whcih waits till transdactions completes or errors out and then updates the DB field. I would recommend a scheduled service because, you will not run out of threads.

To continue this discussion along the same lines, I’m currently working on an interface which requires a VAN contingency solution in the event of EDIINT AS2 communication failures. Again, since “wm.EDIINT:send” does not have output parameters, I’m trying to find the best way to handle this scenario. Any ideas?

I was hoping that there would be some way to incorporate this into the same flow step (ie logical unit of work), but it sounds like I may have to create a separate flow to monitor the status.

Also, could someone explain to me the differences between the Primary and Secondary delivery methods you can specify in the TN profiles? I can’t seem to find any differences in the wM documentation. It would be nice if I could specify Primary HTTP and Secondary FTP for my partner to handle the problem above, but I know it is not possible to specify two Delivery Methods.

Thanks in advance,
Devan

Hi PU
Thankz a lot for the comments . We were also thinking in terms of using MDN by modifying the processMDN service to verify that data was send successfully . But I guess a scheduled service is anyway needed to check for errors that happend because we won’t be getting a MDN in that case.
a few doubts :

  1. What exactly did U mean by “or spawn a service whcih waits till transactions completes or errors out and then updates the DB field” ?
  2. How does this service get notified that transactions completed or errored out ?
  3. Again is there any way I can capture events for task failure or sucess in TN ?

Devan,
As far as my understanding goes , Primary and Secondary are just means to specify different delivery methods. You can specify both primary http and secondary FTP for a partner by adding it in the profile of a partner at TNConsole . You can also choose the delivery method in your flow service incase you want to specify a specific delivery method or using TN, you can specify the delivery method in your processing rule. Hope this helps…

Thnkx again for the input ,PU
Rajoy

rajoy,

  1. Instead of Scheduled service you can spawn a service (which will not hold your current thread) with necessary input to keep check if MDN arrived for the perticular transaction or EDIINT status changed for the given transaction etc.
  2. This service checks the status of the document. You can also timeout if things does not happen over a certain time period.
  3. Nothing that I know of. Are you taking advantage of reliable delivery by configuring the retries etc?

Hi PU ,
Yeah U guessed it right , we are using reliable delivery for configuring retries , so it’d be nice to have some kinda event capturing system to get notified of any status change in the tasks. Anywayz guess we have to go with scheduled services and modifiying ediint processing rules to meet the requirements.

thankz for all the comments , incase U come across with some thing better please let know
thanks and regards
Rajoy

Hi All,

I would like to share the approach we had here for such type of situation.
Using the MDN to know the succesful delivery of the document is good approach. But in the situation when the document was not delivered to the partner due to communication problem, you won’t get MDN back from the partner. We figured out that in the wm.EDIINT.rules:deliveryDocument service there is a branch for HTTP response. We have modified this service to handle such scenarios.
Also in the pipeline of this service you have an object called retriesleft. Using this object you can customize the service to handle the reliable delivery. Suppose you want to send the email only when all the retries are over, you can do it here.
In either approach(MDN or delivery document), there is a little change to be done in the service provided by wM.

Thanks,
Pankaj

Hi Pankaj
Thankx a lot for sharing this information. Its defenitly much better than using MDN as a means to figure out sucessfull delivery of docuemnt. We could not find the “retriesleft” object in the pipe line , is it in any of the records in the pipe line ?

thankx and regards
Rajoy

Rajoy,

If you do savepipeline and restorepipeline in deliveryDocument service you can see the “retriesRemaining” (its not retriesleft as I mentioned earlier) object in the results panel. We have written a java service which takes “retriesRemaining” as input and convert this object to string. This way we get the variable in the pipeline.

Thanks,
Pankaj