【问题标题】:Looping in non-persistent object using automation script in maximo在 maximo 中使用自动化脚本在非持久对象中循环
【发布时间】:2019-12-03 07:33:08
【问题描述】:

我想知道如何使用 maximo 中的自动化脚本在非持久对象上使用自动化脚本执行循环。该脚本写在 Initialize 期间触发的非持久对象上。此非持久对象映射到工作订单跟踪应用程序中的对话框,并应带来记录列表。没有错误,但是当打开对话框时它只带来 1 条记录。下面是python脚本,

npSet=mbo.getOwner().getMboSet("CXDEMO")
 if(npSet.count()>0):
    for i in range(0,npSet.count()):
        np = npSet.getMbo(i)
        mbo.setValue("WONUM",mbo.getOwner().getString("WONUM"))
        mbo.setValue("SITEID",mbo.getOwner().getString("SITEID"))
        mbo.setValue("CONTRACTNUM",np.getString("CONTRACTNUM"))
        mbo.setValue("VENDOR",np.getString("VENDOR"))

【问题讨论】:

  • 因此,您从非持久性记录 (mbo) 开始,并将其保留为与该记录相关的任何记录 (getOwner),然后从另一个 MBO 转到一组新的CXDEMO 记录(它们本身可能是也可能不是非持久性的)?这真的是你想要的吗?
  • @Dex Owner 这里是WORKORDER,CXDEMO是Persistent。我基本上需要使用非持久对象 CXTEST 在对话框中显示 CXDEMO 中存在的数据
  • 您不能只使用 CXDEMO 对象作为对话框上的支持对象吗?如果您要将所有 CXDEMO 数据复制到 CXTEST 中,最好去掉中间人,只使用 CXDEMO。此外,您的变量名称用词不当,因为您将 CXDEMO 集存储在“npSet”中,您刚才说它不是非持久性的。
  • @Dex CXDEMO 是持久的,而 CXTEST 是非持久的。我使用了非持久性,因为在对话框中选择的值没有设置所有者 mbo,因此使用了非持久性对象。
  • 这是您设置和配置查找方式的一个缺陷(您是否做过我们讨论过的那个 maxlookupmap 条目?例如,您没有解决这个问题。另外,我没有认为您可以使用标准对话框并期望它用作查找,Maximo 对此有特殊的对话框,但您已停止使用),而不是因为您使用的是持久性与非持久性 MBO。事实上,将其切换为非持久性 MBO 只会让一切变得不必要地复杂化。

标签: maximo


【解决方案1】:

您的 cmets 说您正在循环通过一个持久集并尝试将数据复制回您的起始非持久集(不是您在问题中实际询问的内容)。您似乎正在循环遍历持久集(或多或少),但每个循环都在 same MBO 记录 (mbo) 上设置数据。这里没有发生任何事情来确保您移动到非持久集中或在非持久集中创建一条新记录以将该数据放入其中,因此,您在循环的每次迭代中都覆盖了相同的单个非持久记录。

您可以通过调用.add() 方法在非持久集中创建新记录,方法与创建持久集相同。您可以存储对当前非持久集的引用,以便以后重用。您还应该最小化您的.count() 调用,每个调用都是对数据库的新查询,这对性能不利。您的代码现在看起来像这样:

npSet = mbo.getThisMboSet()
woMbo = np.getOwner()
wonum = woMbo.getString("WONUM")
siteid = woMbo.getString("SITEID")
pSet = woMbo.getMboSet("CXDEMO")
pSize = npSet.count()

if (pSize > 0):
    for i in range(0, pSize):
        pMbo = pSet.getMbo(i)
        npMbo = npSet.add()

        npMbo.setValue("WONUM", wonum)
        npMbo.setValue("SITEID", siteid)
        npMbo.setValue("CONTRACTNUM", pMbo.getString("CONTRACTNUM"))
        npMbo.setValue("VENDOR", pMbo.getString("VENDOR"))

这仍然会给您留下一个空的第一条记录,因为 Maximo 已经 added 原始 mbo 并且我们没有使用它。您可以在循环中添加一个检查来判断 i == 0,然后将 npMbo 设置为原始 mbo

【讨论】:

    猜你喜欢
    • 2015-06-10
    • 2020-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-02
    • 2018-08-18
    • 1970-01-01
    相关资源
    最近更新 更多