Как управлять транзакцией (фиксация / откат) при чтении IDOC - PullRequest
4 голосов
/ 06 декабря 2010

При использовании JCo (3.x) для чтения IDOC, отправленных с сервера SAP, какое действие следует предпринять, чтобы указать, что сообщение было получено правильно (т.е. зафиксировано)?

В Java я представляю что-то вроде:

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
  }   
}

Этот тип фиксации кажется необходимым, если мы хотим убедиться, что ни одно сообщение (IDOC) не потеряно, даже если пуля попадает в ЦП во время какого-либо вызова .hasNext(). Или я не прав?

Ответы [ 2 ]

3 голосов
/ 30 января 2011

В таких случаях SAP предполагает, что вы отправляете обратно IDOC с типом «ALEAUD».В этом случае система отправителя может изменить статусы IDOC на «документ, созданный в принимающей системе» (41).Для получения дополнительной информации см. Документ «Предварительное руководство по дополнению SAP R / 3 Application Link Anabling (ALE)»

0 голосов
/ 27 декабря 2016

С технической точки зрения (а не с точки зрения рабочего процесса бизнес-данных с записями статуса IDoc) фиксация и подтверждение TID транзакционного RFC (tRfc) является задачей клиента RFC.При получении IDoc ваша JCo-программа является сервером RFC в этом сценарии, и вы должны реагировать на те коммиты, откат и подтверждать события, которые клиент RFC отправляет вам.Это делается путем реализации интерфейса JCoServerTIDHandler.

. Вы получите commit , а затем также событие verifyTID , если вы вернетесь из своего handleRequest * вызов без исключения, в противном случае вы получите откат , а также событие verifyTID для соответствующей реакции.

...