用于集成的 Maximo 自动化脚本
Maximo Automation Script for Integration
我真的需要帮助,我似乎找不到这个问题的答案。我想要发生的是在数据从 xml 入站到系统期间,PRNUM 将被查询到 PRLINE 对象(它是 PR 的子对象),这样我就可以获得 CONTRACTNUM 字段,但我似乎无法从中获得价值。我总是收到 Nonetype 的错误,因为它是空的。
from psdi.server import MXServer
def beforeMboData(ctx):
mbo = ctx.getMbo()
struc = ctx.getData()
prlineSet = MXServer.getMXServer().getMboSet('PRLINE', ctx.getUserInfo())
prlineSet.setWhere("PRNUM = '"+struc.getCurrentData('PRNUM')+"'")
prLine = prlineSet.moveFirst()
contractSet = MXServer.getMXServer().getMboSet('CONTRACT', ctx.getUserInfo())
contractSet.setWhere("CONTRACTNUM = '"+prLine.getString('CONTRACTNUM')+"'")
contractRec = contractSet.moveFirst()
struc.setCurrentData('CONTRACTID',contractRec.getInt('CONTRACTID'))
xml 看起来像这样:
<max:PR action='AddChange'>
<max:PRNUM>SMPL</max:PRNUM>
<max:SITEID>BEDFORD</max:SITEID>
<max:VENDOR>JOHNS</max:VENDOR>
<max:PRLINE action='AddChange'>
<max:PRLINENUM>1</max:PRLINENUM>
<max:ITEMNUM>01231</max:ITEMNUM>
<!-- I forgot the other fields here -->
<max:CONTRACTNUM>X1C1</max:CONTRACTNUM>
<max:CONTRACTID></max:CONTRACTID>
</max:PRLINE>
</max:PR>
CONTRACTID 字段仅用于测试,因为我想看看我是否会检索一些数据,我会尽快将其删除。我是新手,我也不知道如何使用自动化脚本从 xml 获取 ChildObject 数据以使其更容易。我在 Google 上找不到任何关于这样的东西。
你的PR已经在系统中了吗?这看起来像是一个传入的 PR added 到系统。如果是这样,那么数据还不在数据库中。由于您是从 MXServer 获取一组数据(这通常不是所需的方式),这意味着您正在将数据从数据库(它尚不存在)和新事务中提取出来,而不是收到消息。
此外,我忘记了哪些 hooks/methods 可用于集成 类,但 beforeMboData 似乎不符合您的需要。 听起来 就像(虽然我不记得这是不是真的,现在无法查找)挂钩在将数据加载到 MBO 对象之前运行。
所以经过大量的试验和错误后,这是有效的方法
from psdi.server import MXServer
def beforeCreateMboSet(ctx):
mbo = ctx.getMbo()
struc = ctx.getData()
try:
contractSet = MXServer.getMXServer().getMboSet('CONTRACT', ctx.getUserInfo())
prLine = struc.getChildrenData('PRLINE')
prCount = len(prLine)
count = 0
while count < prCount:
struc.setAsCurrent(prLine,count)
contractNum = struc.getCurrentData('CONTRACTNUM')
contractSet.setWhere("CONTRACTNUM = '"+contractNum+"'")
contractRec = contractSet.moveFirst()
struc.setCurrentData('CONTRACTID',contractRec.getString('CONTRACTID'))
count += 1
finally:
contractSet.close()
我真的需要帮助,我似乎找不到这个问题的答案。我想要发生的是在数据从 xml 入站到系统期间,PRNUM 将被查询到 PRLINE 对象(它是 PR 的子对象),这样我就可以获得 CONTRACTNUM 字段,但我似乎无法从中获得价值。我总是收到 Nonetype 的错误,因为它是空的。
from psdi.server import MXServer
def beforeMboData(ctx):
mbo = ctx.getMbo()
struc = ctx.getData()
prlineSet = MXServer.getMXServer().getMboSet('PRLINE', ctx.getUserInfo())
prlineSet.setWhere("PRNUM = '"+struc.getCurrentData('PRNUM')+"'")
prLine = prlineSet.moveFirst()
contractSet = MXServer.getMXServer().getMboSet('CONTRACT', ctx.getUserInfo())
contractSet.setWhere("CONTRACTNUM = '"+prLine.getString('CONTRACTNUM')+"'")
contractRec = contractSet.moveFirst()
struc.setCurrentData('CONTRACTID',contractRec.getInt('CONTRACTID'))
xml 看起来像这样:
<max:PR action='AddChange'>
<max:PRNUM>SMPL</max:PRNUM>
<max:SITEID>BEDFORD</max:SITEID>
<max:VENDOR>JOHNS</max:VENDOR>
<max:PRLINE action='AddChange'>
<max:PRLINENUM>1</max:PRLINENUM>
<max:ITEMNUM>01231</max:ITEMNUM>
<!-- I forgot the other fields here -->
<max:CONTRACTNUM>X1C1</max:CONTRACTNUM>
<max:CONTRACTID></max:CONTRACTID>
</max:PRLINE>
</max:PR>
CONTRACTID 字段仅用于测试,因为我想看看我是否会检索一些数据,我会尽快将其删除。我是新手,我也不知道如何使用自动化脚本从 xml 获取 ChildObject 数据以使其更容易。我在 Google 上找不到任何关于这样的东西。
你的PR已经在系统中了吗?这看起来像是一个传入的 PR added 到系统。如果是这样,那么数据还不在数据库中。由于您是从 MXServer 获取一组数据(这通常不是所需的方式),这意味着您正在将数据从数据库(它尚不存在)和新事务中提取出来,而不是收到消息。
此外,我忘记了哪些 hooks/methods 可用于集成 类,但 beforeMboData 似乎不符合您的需要。 听起来 就像(虽然我不记得这是不是真的,现在无法查找)挂钩在将数据加载到 MBO 对象之前运行。
所以经过大量的试验和错误后,这是有效的方法
from psdi.server import MXServer
def beforeCreateMboSet(ctx):
mbo = ctx.getMbo()
struc = ctx.getData()
try:
contractSet = MXServer.getMXServer().getMboSet('CONTRACT', ctx.getUserInfo())
prLine = struc.getChildrenData('PRLINE')
prCount = len(prLine)
count = 0
while count < prCount:
struc.setAsCurrent(prLine,count)
contractNum = struc.getCurrentData('CONTRACTNUM')
contractSet.setWhere("CONTRACTNUM = '"+contractNum+"'")
contractRec = contractSet.moveFirst()
struc.setCurrentData('CONTRACTID',contractRec.getString('CONTRACTID'))
count += 1
finally:
contractSet.close()