2010-12-06 63 views
4

Lors de l'utilisation de JCo (3.x) pour lire les IDOC envoyés depuis un serveur SAP, quelle action doit être effectuée pour indiquer que le message a bien été reçu? ?Comment contrôler la transaction (commit/rollback) lors de la lecture d'un IDOC

En Java j'imagine quelque chose comme:

public class MyHandler implements JCoIDocHandler { 
    public void handleRequest(JCoServerContext serverCtx, IDocDocumentList documentList) { 
    IDocDocumentIterator iterator = documentList.iterator(); 
    while (iterator.hasNext()) { 
      IDocDocument doc = iterator.next(); 
      // some processing 
    } 
    // here I would like to say COMMIT 
    // i.e., I confirm all the documents have been read 
    // and our side takes ownership 
    } 
} 

Ce type de commettre semble nécessaire si nous voulons nous assurer qu'aucun message (IDOC) est perdu, même si une balle frappe la CPU pendant un certain appel .hasNext(). Ou ai-je tort?

Répondre

3

Dans ce cas, SAP suppose que vous renvoyez IDOC avec le type 'ALEAUD'. Dans ce cas, le système d'expéditeur peut modifier les statuts IDOC en 'document créé dans le système de réception' (41). Pour plus de détails, voir "Le guide d'introduction du document Application Aabling (ANE) SAP R/3" document

0

Du point de vue technique (et non du point de vue du workflow de données métiers avec les enregistrements d'état IDoc) et la confirmation des TID d'une RFC transactionnelle (tRfc) est la tâche du client RFC. Lorsque vous recevez des IDocs, votre programme JCo est le serveur RFC dans ce scénario et vous devez réagir aux événements de validation, de restauration et de confirmation que le client RFC vous envoie. Ceci est fait en implémentant l'interface JCoServerTIDHandler.

Vous obtiendrez un engager et plus tard un confirmTID événement, si vous revenez de votre handleRequest invocation sans exception, sinon vous obtiendrez un rollback et aussi un événement confirmTID pour réagir en conséquence.