Anywhere重新排序交易顺序

时间:2016-10-24 01:00:31

标签: maximo-anywhere

我们注意到,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);
//}

完成此操作后,我们能够从设备上对COMP进行COMP,因为事件/交易现在按照发生的顺序发送

然而,我们注意到这造成了另一个不良问题,在错误情况下,设备最终会产生两个工作订单,一个是错误的,另一个是从Maximo重新获取的工作订单

场景:我们在WO上运行了一个活动计时器,然后点击时钟。这将打开停止计时器视图,我们选择[完成工作]

因此,应该停止计时器,并且应该更改状态。 由于Maximo的一些验证错误,此事务失败。结果是我们最终得到两次相同的炒锅订单,其中包含新的状态和错误消息,以及一个从Maximo重新获取的订单

一旦我们带着错误进入记录并撤消更改,我们最终会在设备上使用两个相同的WO

除了上述问题之外,还需要一种方法来清除设备中的本地数据,而无需删除应用

2 个答案:

答案 0 :(得分:0)

您可以尝试将一些Model.save()放入,或者在app.xml中,您可以在显示/隐藏视图时强制保存。

如果没有保存,我认为所有内容都会被置于一个更改中...作为一条消息发送......并且您无法控制它是如何被取消的。

答案 1 :(得分:0)

从坟墓中挖掘这一点,但是您可以创建一个称为“优先事务”的东西,它将捕获所有更改并将它们打包在一个隔离的请求中,然后将其发送回服务器。

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

};

这会将更新发送到服务器,以将WORKORDER的ATTRIBUTE更改为VALUE。

我们用它来隔离特定项目的更改,并确保它们以适当的顺序进行处理。