AXForum  
Zurück   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Kennwort vergessen?
Registrieren Forum Rules Hilfe Benutzerliste Heutige Beiträge Suchen

 
 
Themen-Optionen Thema durchsuchen Ansicht
Alt 25.08.2016, 14:15   #1  
MazZzDaI ist offline
MazZzDaI
Участник
Benutzerbild von MazZzDaI
 
44 / 35 (2) +++
Registriert seit: 19.09.2013
AIF действия в транзакции. Откат Rollback
Привет!
При интеграции AX и стороннего приложения (СП) появилась необходимость использования транзакции на несколько последовательных действий, например:
1. СП вызывает сервис создания данных в АХ; АХ создаёт данные и возвращает ответ СП; СП сохраняет у себя результат;
2. СП вызывает сервис разноски ранее созданных данных в АХ; АХ выполняет действие и возвращает результат об успешной разноске; СП фиксирует у себя успех.
Схема простая, но добавив вероятность падения канала связи, СП не получит ответ 2 и откатит (rollback) свою транзакцию, включая результат 1.
Предполагаю необходимость костылизации механизма, например, удаление данных разноски АХ при возобновлении связи, согласование данных, стек данных, время жизни документа; но такое решение не масштабируемое и громоздкое.
Предварительный вызов АХ сервиса с ttsBegin; вызов действий; вызов ttsCommit/ttsAbort не получается сделать, т.е. нельзя просто взять и сделать откат в АХ.
Подскажите пожалуйста, каким образом можно реализовать откат на стороне АХ?
Alt 25.08.2016, 15:17   #2  
Logger ist offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3.996 / 3293 (117) ++++++++++
Registriert seit: 12.10.2004
Ort: Москва
Blog-Einträge: 2
Похожая тема
AIF - как экранировать вызовы throw в аксапте
Alt 25.08.2016, 17:48   #3  
lvan ist offline
lvan
Участник
Benutzerbild von lvan
Лучший по профессии 2014
 
858 / 82 (4) ++++
Registriert seit: 15.04.2011
Blog-Einträge: 1
я подобное спрашивал уже
вроде ничего простого нельзя сделать, потому что не поддерживаются транзакции
остаются только костыли
Alt 25.08.2016, 18:45   #4  
Maxim Gorbunov ist offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2.483 / 646 (26) +++++++
Registriert seit: 27.11.2001
Ort: Dubai, UAE
А версия AX какая? Если AX2012, можно попробовать использовать message batch.
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Alt 26.08.2016, 09:06   #5  
MazZzDaI ist offline
MazZzDaI
Участник
Benutzerbild von MazZzDaI
 
44 / 35 (2) +++
Registriert seit: 19.09.2013
Zitat:
Этот подход допустим в рамках одного действия сервиса

Zitat:
Zitat von Maxim Gorbunov Beitrag anzeigen
А версия AX какая? Если AX2012, можно попробовать использовать message batch.
Message Batch применим для адаптера файловой системы. AX 2009

Zitat:
Zitat von lvan Beitrag anzeigen
я подобное спрашивал уже
вроде ничего простого нельзя сделать, потому что не поддерживаются транзакции
остаются только костыли
Есть предположения костылизации?
Alt 26.08.2016, 09:28   #6  
gl00mie ist offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3.684 / 5813 (201) ++++++++++
Registriert seit: 28.11.2005
Ort: Москва
Blog-Einträge: 3
Zitat:
Zitat von MazZzDaI Beitrag anzeigen
При интеграции AX и стороннего приложения (СП) появилась необходимость использования транзакции на несколько последовательных действий, например:
1. СП вызывает сервис создания данных в АХ; АХ создаёт данные и возвращает ответ СП; СП сохраняет у себя результат;
2. СП вызывает сервис разноски ранее созданных данных в АХ; АХ выполняет действие и возвращает результат об успешной разноске; СП фиксирует у себя успех.
Схема простая, но добавив вероятность падения канала связи, СП не получит ответ 2 и откатит (rollback) свою транзакцию, включая результат 1.
Кажется, это называется chatiness: у вас в СП есть одна транзакция на оба действия (передачу данных и разноску документа), но в AX вы почему-то передаете это отдельными сообщениями вместо того, чтобы передать одним сообщением вида "прими данные и разнеси документ".
Zitat:
Zitat von MazZzDaI Beitrag anzeigen
Предполагаю необходимость костылизации механизма, например, удаление данных разноски АХ при возобновлении связи, согласование данных, стек данных, время жизни документа; но такое решение не масштабируемое и громоздкое.
В целом, мне кажется, любая синхронная интеграция с выполнением разноски в Аксапте будет не масштабируемой и громоздкой. Но если у вас в СП отправка и получение результата разноски для простоты сделаны в одной транзакции, то и в АХ это должно быть одно сообщение.
А вообще, по поводу разносок в AIF - как раз сейчас идет обсуждение в другой ветке
Alt 14.02.2017, 13:03   #7  
MazZzDaI ist offline
MazZzDaI
Участник
Benutzerbild von MazZzDaI
 
44 / 35 (2) +++
Registriert seit: 19.09.2013
Решился описать решение, может кому пригодится

Созданы действия AIF для:
  • открытия транзакции AifTtsBegin(GUID _messageId, UserId _userId, DataAreaId _dataAreaId, int _transactionLifeTimeSec)
  • коммита - AifTtsCommit(GUID _messageId)
  • отката - AifTtsAbort(GUID _messageId)

Модифицирована таблица SysDatabaseLog:
  • добавлено поле messageId типа GUID;
  • добавлены методы для отката изменений в логируемых таблицах:
    • rollbackInsert - удаляет запись
    • rollbackUpdate - обновляет запись в предыдущее состояние
    • rollbackDelete - вставляет запись из лога
  • модифицирован метод insert, в котором производится запись в поле SysDataBaseLog.messageId значения AifTtsLog.messageId в контексте текущего пользователя запущенной сессии AX

Создана таблица AifTtsLog для отслеживания состояния AIF транзакций с набором полей:
  • messageId - GUID - уникальный идентификатор транзакции, в контексте которого производятся изменения данных и запись в SysDatabaseLog; устанавливается интегрируемой системой
  • userId - идентификатор пользователя, в контексте которого производятся изменения данных и запись в SysDatabaseLog; устанавливается интегрируемой системой
  • wsAbort - boolean - признак вызова отката транзакции; устанавливается интегрируемой системой
  • expirationDateTime - время жизни транзакции, по истечению которого AX запустит механизм отката транзакции
  • axAbort - boolean - признак, отображающий успешное завершение отката транзакции на стороне AX
  • wsCommit - boolean - признак коммита транзакции; устанавливается интегрируемой системой
  • axRollbackError - boolean - признак, отображающий возникновение ошибки в процессе отката транзакции на стороне AX

Создан класс AxTtsMonitor extends RunBaseBatch, который мониторит таблицу AifTtsLog и:
  • Запускает откат изменений при появлении признака wsAbort, или же при истечении времени жизни транзакции
  • Устананавливает признаки axAbort и axRollbackError
Miniaturansicht angehängter Grafiken
Klicken Sie auf die Grafik für eine größere Ansicht

Name:	AX_AifTts.png
Hits:	549
Größe:	122,7 KB
ID:	11198  
This post has been rated by: sukhanchik (5).
Stichworte
aif

 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
AIF: Microsoft Dynamics AX Services and Windows Azure Service Bus Blog bot DAX Blogs 0 24.07.2013 03:13
daxdilip: How to: Configure Dynamics AX AIF Services to listen for SSL Requests (https) Blog bot DAX Blogs 0 23.01.2011 10:12
Dave: AIF Configuration and Additional Findings Blog bot DAX Blogs 1 04.11.2009 17:29
Dianne Siebold: AIF Top Ten Blog bot DAX Blogs 1 22.04.2008 11:19
Откат транзакции за вчерашний день??? Возможно в SQL2000??? director DAX: Администрирование 5 16.12.2005 11:26

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Gehe zu

Рейтинг@Mail.ru
Alle Zeitangaben in WEZ +3. Es ist jetzt 04:10 Uhr.
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.