无法使用 maximo 中的自动化脚本获取 poline 的第二个 mbo

Unable to fetch the second mbo for poline using automation script in maximo

我正在尝试获取 POLINE 中的第二行,但是下面的脚本继续获取第一行本身而不是第二行。在调查 polineset 的计数时,它是 2,但是再次获取了同一行。我不确定根本原因是什么, 脚本在 PO 对象启动点

上调用
if mbo.getMboValue("STATUS").isModified() and mbo.getString("STATUS") =='APPR' :
po = mbo.getMboSet("POLINE")
polineSet = po.count()
    print "count of poline", polineSet >> returns 2 rows
if (polineSet > 0): 
    for i in range(0,polineSet):
        poline = po.getMbo(i)
        description = poline.getString("description")
        print" po line number" poline.getInt("polinenum") >> prints 1 twice 
        if (((poline.getString("LINETYPE") =='ITEM' or poline.getString("LINETYPE") == 'MATERIAL'))):
            newpoline= po.add(2L)
            newpoline.setValue("linetype",'XXX')
            newpoline.setValue("description",description + '- XXX' + str(linenum))

使用 moveFirst() 更新了代码

if mbo.getMboValue("STATUS").isModified() and mbo.getString("STATUS") =='APPR' :
poLineSet = mbo.getMboSet("POLINE")
poLine = poLineSet.moveFirst()
while (poLine):
    description = poLine.getString("description")
    linenum = poLine.getString("polinenum")
    if (((poLine.getString("LINETYPE") =='ITEM' or poLine.getString("LINETYPE") == 'MATERIAL'))):
        newpoline= poLineSet.addAtEnd(2L)
        newpoline.setValue("linetype",'XXX')
        newpoline.setValue("description",description + '- XXX'+ str(linenum))
        poLine = poLineSet.moveNext()

我假设你的 "po.add(2L)" 行在这个测试中是 运行? "add" 方法将新的 MBO 添加到 MBO 集的开头,从而将原来的第一个 MBO 推入第二个槽,将原来的第二个 MBO 推入第三个槽。这意味着当您的循环重新开始并获得 MBO 2 时,您将获得第二个插槽中的新内容,即第一个 MBO。您的循环在到达新的第三个插槽(您想要的下一个 MBO 已移动到的位置)之前结束,因为您将条件构造为仅执行原始计数。事实上,由于它再次处理了第一个 MBO,它会向集合中添加第二个 MBO,将您最初的第一个 MBO 推到第三个槽中。因此,如果您的循环设置为继续运行,您只需继续添加新的 MBO,并继续将相同的第一个 MBO 无限期地推到下一个处理槽。

在这种情况下,您可能想要的是 "addAtEnd()"(并保持循环原样)。或者,您可以使用 .moveFirst() 和 .moveNext() 的 MBO 集合迭代方法。我认为即使您在当前位置后面或当前位置添加记录,这也会让您继续前进。