python - 根据使用自动化脚本标记为删除的行删除 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)
解决方案
你确定你的脚本正在运行吗?这似乎是一种奇怪的情况,记录被标记为已删除,尚未保存(实际上会删除它),但其状态仍处于更改状态。
这里的主要问题是您正在获得要在新/单独事务中删除的第二个 PO(如果重要,则从数据库中删除,而不是从内存数据中删除)并且不保存该事务。您的第一个被删除的 PO 与可能自然以保存调用结束的某个进程相关联,因此您不必担心在触发脚本的集合中的数据上显式调用它。但是,那里的自然“保存”调用只会保存该事务的记录。当您像这样从 MXServer 获得 Set 时,您正在创建一个新事务并将其数据(以及您从中获取的任何其他相关数据)放入该新事务中。完成此操作后,Maximo 不知道您是否要保留更改(或者就此而言,它不知道)甚至不知道你什么时候真正完成它),所以它不会自己保存它。您需要在该事务中的一个 MBO 集(并且只有该事务中的一个集)上显式调用“save()”,以使 Maximo 将更改持久保存到数据库中。
不过在你的情况下要小心。您的数据是紧密耦合的,因此很有可能已经在触发您的脚本的主要数据集中。如果数据已经在那里更改,那么您的更改将在两个不同的事务中修改相同的记录,这将导致 Maximo 抛出可怕的“重新获取”错误(“您的记录已被另一个用户更新。请重新获取记录并再试一次。”)。
推荐阅读
- excel - 动态引用外部工作表时连接格式
- javascript - 从字符串中获取对象,其中字符串包含数组中的对象
- javascript - 为什么 nuxt-i18n 模块似乎没有加载?( _vm.$t 不是函数)
- c# - 在斜坡上以相同的速度移动球 - Unity 3D
- sql - 如何获取今天插入特定表中的记录
- python - 使用 tensorflow serve 为训练有素的对象检测模型提供服务
- node.js - REST API 响应巨大
- c++ - easylogging++ 如何避免多次初始化
- javascript - 在 VUEJ 中创建动态网格列表
- r - 根据字符串(名称)合并R中的两个数据框