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

时间:2018-08-15 17:01:41

标签: python 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()

1 个答案:

答案 0 :(得分:1)

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

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