我在WoActivity表中创建了一个名为VDS_COMPLETE的非持久性属性。这是一个bool,它被我的应用程序中的一个复选框所更改。
我试图在Python中创建一个自动化脚本,以更改每个任务的状态,这是在保存WorkOrder时检查的工作顺序。
我不知道为什么不行,但我很确定我已经接近答案了.你知道它为什么不起作用吗?我知道我有注释中的代码,我做了一些实验.
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()发布于 2018-08-03 01:14:07
这里看起来最大的两个错误是: 1.试图将布尔字段(VDS_COMPLETE)从集合中删除(意思是离开记录集合,比如整个表),而不是离开MBO (指实际记录,表中的一个条目);2.从数据库中(通过MXServer调用)获取数据集,这意味着使用先前保存的数据,而不是从实际进行挂起的更改的屏幕上获取数据集(并记住,非持久性字段不会保存到数据库中)。
这个脚本还有其他一些问题,比如在for循环中使用"count()“(甚至不止一次)--这是一项昂贵的操作,以及您当前的方式(尽管这可能是调试的结果)--在获取第一个工作顺序之前没有过滤工作顺序集(这意味着您从表中得到一个随机的工作顺序),然后在记录之外执行一个动态关系(而不是使用一个正常的关系或者跳过关系,只使用一个"where”子句),尽管这种关系很可能已经存在。
下面是一个堆栈溢出,详细描述了Maximo:Describe relationship in maximo 7.5中的关系和"where“子句
这个问题还有一些关于从屏幕获取数据和从数据库获得新数据的更多信息:Adding a new row to another table using java in Maximo。
https://stackoverflow.com/questions/51656089
复制相似问题