Как контролировать транзакцию (Combain / Rollback) при чтении IDOC
Вопрос
При использовании JCO (3.x) для чтения IDOCS, отправленные с сервера 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()
вызов. Или я не прав?
Решение
В таких случаях SAP предполагает, что вы отправляете обратно IDOC с типом «ALEAUD». В этом случае Sender System может изменить статусы IDOCS в «Документ, созданный в приемной системы» (41). Для получения более подробной информации о просмотрите «Предварительное руководство по заметку приложений SAP R / 3 Link Anabling (ALE)»
Другие советы
С технической точки зрения (а не с точки зрения рабочего процесса бизнес-данных с записями состояния IDOC), совершающие и подтверждающие CHEDDS из транзакционного RFC (TRFC), является задачей RFC-клиента. При получении IDOCS ваша программа JCO является сервером RFC в этом сценарии, и вы должны отреагировать на тех, кто откатывается и подтверждает события, которые клиент RFC отправляет вам. Это делается путем внедрения интерфейса JCoServerTIDHandler
.
Вы получите совершить а затем также подтверждение событие, если вы вернетесь с вашего подушка вызов без исключения, в противном случае вы получите откат а также а подтверждение событие для взаимодействия соответственно.