我有一个脚本,在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之后的所有发票行记录(不出所料),ilSetWhere有一个有效的查询,您可以在SQL Developer中复制粘贴该查询。
在执行这个setWhere之前,Maximo需要一些索引吗?
以下是两个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)表达式的行。我不知道如何解决这个问题,也不知道如何解决这个问题。
发布于 2014-12-11 21:15:06
现在我们有一个要处理的错误!
Maximo实际上坚持认为INVOICELINE集合有一个“所有者”,这是您在代码示例中没有设置的。将所有者视为父集。具体地说,它是用于获取当前偏移量的MBOSet。它实际上不一定要与当前的集合相关,但大多数情况下都是如此(这样获取集合才是最有意义的)。可以在获取后将所有者注入到set中(以更改它或欺骗Maximo),但这很少是好代码。
与其在服务器自己的事务中从服务器获取新的集合(没有其他关联或可能的数据缓存),不如从当前的MBO中获取发票行集合。我不知道你的确切用例,但通常你想做这样的事情,而不是像你那样获得一个新的集合。至少,它会给你的新套装一个“主人”。您甚至可能希望使SQL成为一种“关系”,而不是硬编码它。
ilSetWhere = "ponum='" + mbo.getString("PONUM") + "' and positeid='" + mbo.getString("POSITEID") + "'"
ilSet = mbo.getMboSet("$TempInvoiceLineRelationship", "INVOICELINE", ilSetWhere)
ilMbo = ilSet.moveFirst()我从内存中获取这段代码,所以我不知道它是否完全正确。这种形式的"getMboSet“有三个参数。第一个是关系名称。如果Maximo发现这个起始对象中的关系名称已经“注册”了,它将忽略接下来的两个参数,并使用该关系来获取该集合。如果它没有发现该关系“注册”,它会将其注册到此代码的作用域中(因此,如果您愿意,您可以稍后在此代码中重用它)。第二个参数定义要创建临时关系的目标对象。第三个参数定义这个临时关系的"where子句“。
原始答案:
您得到的错误是什么?
还有,你说你在"myMXServer.getMboSet...“后面加上"ilSet”台词?这将导致Maximo运行查询并在此时将对象加载到集合中(它等待运行查询,直到迫不得已)。因此,在您“重置()”set之前,您不会看到where子句更改的效果。
https://stackoverflow.com/questions/27398378
复制相似问题