Anywhere переупорядочивает последовательность транзакций

#maximo-anywhere

#maximo-в любом месте

Вопрос:

Мы заметили, что Anywhere группирует и упорядочивает транзакции таким образом, чтобы сначала отправлялись транзакции для родительского [т. Е. рабочего заказа], а затем транзакции для дочерних записей [например: Спецификации]

Сценарий: Шаг 1. Измените описание в WO Шаг 2. Введите значения спецификации Шаг 3. Измените статус WO на COMP

Результирующие транзакции отправляются следующим образом, Step1 и Step3 группируются и отправляются в Maximo При успешном выполнении, Шаг 2 отправляется в Maximo

Мы хотим, чтобы сообщения отправлялись в том же порядке, в котором они произошли, и причиной этого являются проверки, которые мы внедрили в Maximo

например: мы проверяем, есть ли в дочерней таблице записи [в нашем случае, мы проверяем, заполнены ли спецификации], прежде чем завершить WO

Из-за переупорядочения событий транзакций мы не можем скомпоновать WO с устройства, поскольку дочерняя транзакция никогда не попадает в Maximo, потому что родительская транзакция завершается сбоем из-за отсутствия дочерних данных [catch 22]

Мы нашли фрагмент кода в [/MaximoAnywhere/apps/WorkExecution/common/js/platform/model/PushingCoordinatorService.js ] JS-файл, который выполняет это изменение порядка, и мы прокомментировали изменение порядка

 //if (!transaction.json[PlatformConstants.TRANSACTION_LOCK_FORUPDATE])
//{
//    Logger.trace("[PUSHING] Trying to shrink/merge transactions and lock transactions");
//    var self = this;
//    var promise = this._shrinkSubTransactions(metadata, transaction);
//    
//    Logger.trace("[PUSHING] going to perform async operations");
//    promise.then(function() {
//        self._pushSubTransactions(transaction, deferred);
//    });
//}
//else
//{
    Logger.trace("[PUSHING] going to perform async operations");
    this._pushSubTransactions(transaction, deferred);
//}
  

Как только это было сделано, мы смогли скомпоновать WO с устройства, поскольку события / транзакции теперь отправляются в том же порядке, в каком они произошли

Однако мы заметили, что это создало еще одну нежелательную проблему, когда при ошибке устройство получает два рабочих заказа: один с ошибкой и тот, который оно повторно извлекло из Maximo

Сценарий: У нас на WO запущен активный таймер, и мы нажимаем на часы. Это вызовет представление таймера остановки, и мы выбираем [Завершить работу]

Итак, должны произойти две вещи: таймер должен быть остановлен, и статус должен быть изменен. Из-за некоторой ошибки проверки от Maximo эта транзакция завершается с ошибкой. В результате мы получаем один и тот же заказ wok дважды, один с новым статусом и сообщением об ошибке, а другой, который он повторно извлек из Maximo

Как только мы переходим к записи с ошибкой и отменяем изменение, мы получаем два идентичных WOS на устройстве

Помимо вышеупомянутой проблемы, должен быть способ очистить локальные данные с устройства без необходимости удаления приложения

Ответ №1:

Вы могли бы попробовать поместить некоторые Model.save() в, или в app.xml вы можете принудительно сохранять при отображении / скрытии представления.

Без сохранения я думаю, что все помещается в одно изменение… отправляется как одно сообщение… и вы теряете контроль над тем, как он распаковывается.

Ответ №2:

Выкапываю эту из могилы, но вы можете создать нечто, называемое «приоритетной транзакцией», которая будет фиксировать все изменения, упаковывать их в отдельный запрос и отправлять его обратно на сервер.

     westarAssignmentStatusChange:function(workOrder){
        workOrder.openPriorityChangeTransaction();
            workOrder.set(ATTRIBUTE,VALUE);
        workOrder.closePriorityChangeTransaction();
  

};

При этом на сервер будет отправлено обновление для изменения АТРИБУТА WORKORDER на VALUE.

Мы использовали это, чтобы изолировать изменения определенных элементов и убедиться, что они обрабатываются в соответствующем порядке.