使用maximo中的自动化脚本在非持久对象中循环

使用maximo中的自动化脚本在非持久对象中循环,maximo,Maximo,我想知道如何使用maximo中的自动化脚本在非持久对象上使用自动化脚本执行循环。脚本写在初始化期间触发的非持久对象上。此非持久性对象映射到工单跟踪应用程序中的对话框,并应带来记录列表。但是,当对话框打开时,只会显示1条记录,没有错误。下面是python脚本 npSet=mbo.getOwner().getMboSet("CXDEMO") if(npSet.count()>0): for i in range(0,npSet.count()): np = npSet

我想知道如何使用maximo中的自动化脚本在非持久对象上使用自动化脚本执行循环。脚本写在初始化期间触发的非持久对象上。此非持久性对象映射到工单跟踪应用程序中的对话框,并应带来记录列表。但是,当对话框打开时,只会显示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"))

您的评论说您正在循环一个持久集,并试图将数据复制回起始的非持久集(而不是您在问题中实际提出的问题)。您似乎正在通过持久设置fine(或多或少)进行循环,但每个循环都在同一个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已经
add
ed了原始
mbo
,我们没有使用它。您可以在循环中添加一个检查,确定i==0,然后将npMbo设置为原始的
mbo

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