我在 INVOICELINE 上有一个带有对象启动点的脚本。对于 mbo,我想获得与当前 MBO 具有相同 PONUM 的所有 INVOICELINES(因为它们可能在当前 mbo 的发票之外)
在脚本中,我找到了这样的 PO:(测试状态)
from psdi.server import MXServer
from psdi.mbo import Mbo
from psdi.mbo import MboConstants
from psdi.security import UserInfo
from psdi.server import MXServer
myMXServer = MXServer.getMXServer()
userInfo = mbo.getThisMboSet().getUserInfo()
# find the PO
poSet = myMXServer.getMboSet("PO", userInfo)
poSetWhere = "ponum='" + mbo.getString("PONUM") + "' and siteid='" + mbo.getString("POSITEID") + "' and status not in " + poNoUpdate
poSet.setWhere(poSetWhere)
poMbo = poSet.getMbo(0)
效果很好。
然后稍后我对一组发票行做同样的事情:
ilSet = myMXServer.getMboSet("INVOICELINE", userInfo)
ilSetWhere = "ponum='" + mbo.getString("PONUM") + "' and positeid='" + mbo.getString("POSITEID") + "'"
ilSet.setWhere(ilSetWhere)
ilMbo = ilSet.moveFirst()
while ilMbo is not None:
...
这会导致 setWhere 行出现错误。奇怪的是,日志记录(为了便于阅读,我删除了)表明 ilSet 包含 getMboSet 之后的所有 invoicelines 记录(如预期的那样),ilSetWhere 有一个有效的查询,您可以在 SQL Developer 中复制粘贴。
Maximo 在执行这个 setWhere 之前是否需要一些索引?
这是两个 setWhere 字符串的日志记录结果:
ponum='4140006682' and siteid='mysite' and status not in ('CLOSED','CAN','GESLTN','ANN')
和
ponum='4140006682' and positeid='mysite'
我得到的错误是脚本中的通用 BMXAA7837E java.lang.NullPointerException... (该行指的是带有 ilSet.setWhere(ilSetWhere) 表达式的行。我不知道如何解决这个问题并且没有线索如何解决它。