根据标记为使用自动化脚本删除的行删除POLINE

时间:2018-08-17 16:21:29

标签: python maximo

我想知道当选择了其他一些标记项删除(DELETE图标)时,是否可以使用自动化脚本删除标记项。例如,我有一个包含3行的PO,当第一行标记为删除时,则PO中的第二行也应删除。这两行有一个共同的价值。我尝试了以下脚本,但是没有错误,但是没有用。在po.status属性启动点期间将调用该脚本。

if mbo.getMboValue("STATUS").isModified() and mbo.getString("STATUS") =='APPR' :
po = mbo.getMboSet("POLINE")
polineSet = po.count()
if (polineSet > 0): 
    for i in range(0,polineSet):
        poline = po.getMbo(i)
        if (poline.toBeDeleted()==True):
            polineSet1 = MXServer.getMXServer().getMboSet("POLINE",mbo.getUserInfo())
            polineSet1.setWhere("ponum = '" + poline.getString("ponum") + "' and remark = '" + poline.getString("remark") + "' and revisionnum = '" + poline.getInt("revisionnum") + "' and siteid = '" + poline.getString("siteid") + "'")
            polineSet1.count()
            polineSet1.delete()

已更新:在“对象删除”上调用脚本。

from psdi.mbo import MboConstants
poLineSet = mbo.getMboSet("CXPOLINE")
if poLineSet.count() > 0:
 poLine = poLineSet.getMbo(0)
 poLine.delete(MboConstants.NOACCESSCHECK)

1 个答案:

答案 0 :(得分:0)

您确定脚本正在运行吗?似乎有一种奇怪的情况:记录被标记为要删除,但尚未保存(实际上会删除该记录),但其状态仍在更改

这里的主要问题是,您要在新的/单独的事务中(要从数据库中,而不是从内存中数据中删除)获取要删除的第二个PO,并且不保存该事务。您要删除的第一个PO与某个过程相关联,该过程很可能自然会以save调用结束,因此这就是为什么您不必担心在触发脚本的数据集中显式调用它的原因。但是,在那里的自然“保存”调用只会保存该事务上的记录。当您从MXServer获得这样的Set时,您正在创建一个新事务,并将其数据(以及从中获取的任何其他相关数据)放入该新事务中。完成此操作后,Maximo不知道是否要保留更改(或者就此而言,它甚至不知道何时实际完成更改),因此它不会将其保存在拥有。您需要在该事务中的MBO集合之一(以及该事务中的一个集合)上显式调用“ save()”,以使Maximo将更改保存到数据库中。

但是请谨慎处理。您的数据紧密耦合,因此很有可能已经进入触发脚本的主集中。如果那里的数据已经更改,那么您的更改将在两个不同的事务中修改相同的记录,这将导致Maximo抛出可怕的“ refetch”错误(“您的记录已被其他用户更新。请重新获取记录,然后再试一次。”)。