我正在尝试在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()
答案 0 :(得分:1)
我假设您的“ po.add(2L)”行正在此测试中运行? “添加”方法将新的MBO添加到MBO集的开头,从而将原始的第一个MBO推入第二个插槽,并将原始的第二个MBO推入第三个插槽。这意味着,当您的循环重新开始并获得MBO 2时,您将在第二个插槽中获得新内容,即第一个MBO。您的循环在到达新的第三个插槽(您想要的下一个MBO已移至的位置)之前结束,因为您将条件构造为只能达到原始计数。实际上,由于它再次处理了第一个MBO,因此它将在该集合中添加第二个MBO,将您最初的第一个MBO推入第三个插槽。因此,如果您将循环设置为继续进行,则只需继续添加新的MBO,并继续将相同的第一个MBO无限期推入下一个处理插槽。
在这种情况下,您可能想要的是“ addAtEnd()”(并使循环保持原样)。或者,您可以使用.moveFirst()和.moveNext()的MBO设置迭代方法。我认为,即使您在后面或当前位置添加记录,也可以使您在集合中前进。