【问题标题】:Maximo Automation Script for Integration用于集成的 Maximo 自动化脚本
【发布时间】:2018-08-18 16:30:01
【问题描述】:

我真的需要帮助,我似乎无法找到答案。我想要发生的是在从 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 字段仅用于测试,因为我试图查看是否会检索一些数据并且我会尽快将其删除。我是新手,我也不知道如何使用自动化脚本将 ChildObject 数据从 xml 获取到 xml 以使其更容易。我在 Google 上找不到任何关于此类的内容。

【问题讨论】:

    标签: xml integration jython maximo


    【解决方案1】:

    所以经过大量的试验和错误,这就是有效的方法

    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()
    

    【讨论】:

      【解决方案2】:

      您的 PR 是否已在系统中?这看起来像是将传入的 PR 添加到系统中。如果是这种情况,那么数据还没有在数据库中。由于您从 MXServer 获得了一个集合(这通常不是执行此操作的理想方式),这意味着您正在将数据从数据库(尚不存在)和新事务中提取出来,而不是收到的消息。

      此外,我忘记了集成类可以使用哪些钩子/方法,但是 beforeMboData 似乎不适合您的需求。 听起来就像(虽然我不记得这是否属实并且现在无法查找)钩子在将数据加载到 MBO 对象之前运行。

      【讨论】:

      • 系统里还没有PR,但是合约记录已经在里面了。
      • 好的。那就是你的问题了。这:“prlineSet = MXServer.getMXServer().getMboSet('PRLINE', ctx.getUserInfo()) prlineSet.setWhere("PRNUM = '"+struc.getCurrentData('PRNUM')+"'") prLine = prlineSet。 moveFirst()" 将返回 null(或 Python 中的 None),因为它是从系统中的现有数据中提取的,而不是从传入的消息中提取的。
      猜你喜欢
      • 2020-10-20
      • 2020-09-24
      • 2015-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多