首页 > 解决方案 > 根据使用自动化脚本标记为删除的行删除 POLINE

问题描述

I would like to know whether its possible to delete a poline using automation script when some other poline is marked for deletion ( DELETE icon) is selected. 例如,我有一个包含 3 行的采购订单,当第一行被标记为删除时,采购订单中的第二行也应该被删除。两条线都有一个共同的价值。我尝试了下面的脚本,但是没有错误,但它不起作用。该脚本在 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)

标签: pythonmaximo

解决方案


你确定你的脚本正在运行吗?这似乎是一种奇怪的情况,记录被标记为已删除,尚未保存(实际上会删除它),但其状态仍处于更改状态

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

不过在你的情况下要小心。您的数据是紧密耦合的,因此很有可能已经在触发您的脚本的主要数据集中。如果数据已经在那里更改,那么您的更改将在两个不同的事务中修改相同的记录,这将导致 Maximo 抛出可怕的“重新获取”错误(“您的记录已被另一个用户更新。请重新获取记录并再试一次。”)。


推荐阅读