Maximo自动化脚本可更改工作单状态

时间:2018-08-02 14:27:31

标签: maximo

我已经在我的WoActivity表中创建了一个名为VDS_COMPLETE的非持久属性。它是一个布尔值,在我的一个应用程序中被一个复选框更改了。

我试图在Python中创建一个自动化脚本,以更改保存我的工作订单时已检查的工作订单的每个任务的状态。

我不知道为什么它不起作用,但是我很确定我已经接近答案了... 您知道为什么它不起作用吗?我知道我的代码中有注释,我做了一些实验...

from psdi.mbo import MboConstants
from psdi.server import MXServer

mxServer = MXServer.getMXServer()
userInfo = mxServer.getUserInfo(user)

mboSet = mxServer.getMboSet("WORKORDER")
#where1 = "wonum = :wonum"
#mboSet .setWhere(where1)

#mboSet.reset()

workorderSet = mboSet.getMbo(0).getMboSet("WOACTIVITY", "STATUS NOT IN ('FERME' , 'ANNULE' , 'COMPLETE' , 'ATTDOC')")
#where2 = "STATUS NOT IN ('FERME' , 'ANNULE' , 'COMPLETE' , 'ATTDOC')"
#workorderSet.setWhere(where2)


if workorderSet.count() > 0:
    for x in range(0,workorderSet.count()):
        if workorderSet.getString("VDS_COMPLETE") == 1:
            workorder = workorderSet.getMbo(x)
            workorder.changeStatus("COMPLETE",MXServer.getMXServer().getDate(), u"Script d'automatisation", MboConstants.NOACCESSCHECK)

workorderSet.save()
workorderSet.close()

1 个答案:

答案 0 :(得分:0)

您似乎在这里遇到的两个最大错误是1.尝试使布尔字段(VDS_COMPLETE)脱离集合(意味着脱离记录的集合,就像整个表一样),而不是脱离MBO(意味着实际记录,表中的一个条目)和2。(通过该MXServer调用)从数据库中获取新的数据集,这意味着使用先前保存的数据,而不是从实际进行了未决更改的屏幕上获取数据集(请记住,非持久性字段不会保存到数据库中。)

此脚本还存在其他一些问题,例如您在for循环中使用“ count()”(甚至根本不止一次),这是一项昂贵的操作,而且您目前的工作方式(尽管这样做)可能是由于调试造成的)在获取第一个工作订单之前未过滤工作订单集(这意味着您从表中获得了随机工作订单),然后根据该记录进行了动态关系处理(而不是使用常规关系或跳过该关系,仅使用“ where”子句),即使该关系可能已经存在。

这里是堆栈溢出,详细描述了Maximo中的关系和“ where”子句:Describe relationship in maximo 7.5

此问题还提供了一些有关从屏幕获取数据与从数据库获取数据的更多信息:Adding a new row to another table using java in Maximo