首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >集成的Maximo自动化脚本

集成的Maximo自动化脚本
EN

Stack Overflow用户
提问于 2018-03-10 03:17:19
回答 2查看 4K关注 0票数 0

我真的需要帮助,我似乎找不到答案。我想要做的是在数据从xml进入系统时,PRNUM将被查询到PRLINE对象(它是PR的子对象),这样我就可以得到CONTRACTNUM字段,但是我似乎无法从它得到一个值。我总是得到一个非类型的错误,因为它是空的。

代码语言:javascript
复制
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如下所示:

代码语言:javascript
复制
<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,以使其变得更容易。我在谷歌上找不到像这样的东西。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-28 10:25:35

因此,经过大量的试验和错误,下面是有效的方法

代码语言:javascript
复制
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()
票数 0
EN

Stack Overflow用户

发布于 2018-03-11 06:02:51

你的公关已经在系统里了吗?这看起来像一个即将到来的PR被添加到系统中。如果是这样的话,那么数据还没有在数据库中。由于您从MXServer获得了一组数据(这通常不是所希望的方法),这意味着您将数据从数据库中提取出来(在数据库中它还不存在),并且是在一个新的事务中,而不是在传入消息中。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49204979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档