【发布时间】:2015-10-14 20:54:52
【问题描述】:
下面是我的自动化脚本,它是资产加载过程的第二部分。第一部分在从外部系统创建资产时将属性数据加载到资产,但它还设置了 CLASSIFICATIONID,它在触发以下脚本的 ASSETSPEC 表中创建记录:
from psdi.mbo import MboConstants
from psdi.server import MXServer
from psdi.security import UserInfo
username = "maxadmin"
mxServer = MXServer.getMXServer()
userInfo = mxServer.getUserInfo(username)
if mbo != None:
mxAssetSpec = mbo
AssetNum = mxAssetSpec.getString("assetnum")
SiteID = mxAssetSpec.getString("siteid")
gisAssetSet = mxServer.getMboSet(FEATURECLASS, userInfo)
gisAssetSet.setWhere("mxassetnum = '" + AssetNum + "' and mxsiteid = '" + SiteID + "'")
gisAssetSet.reset()
gis = gisAssetSet.getMbo(0)
if FEATURECLASS == "GRAVITYSEWERLINES":
if ASSETATTRID == 'MATERIAL':
mxAssetSpec.setValue("alnvalue", gis.getString("material"))
mxAssetSpec.setValue("startmeasure", '0')
mxAssetSpec.setValue("endmeasure", gis.getString("length_"))
mxAssetSpec.setValue("startmeasureunitid", 'FT')
mxAssetSpec.setValue("endmeasureunitid", 'FT')
if ASSETATTRID == 'LENGTH':
mxAssetSpec.setValue("numvalue", gis.getString("length_"))
mxAssetSpec.setValue("startmeasure", '0')
mxAssetSpec.setValue("endmeasure", gis.getString("length_"))
mxAssetSpec.setValue("startmeasureunitid", 'FT')
mxAssetSpec.setValue("endmeasureunitid", 'FT')
if ASSETATTRID == 'INSTALL':
mxAssetSpec.setValue("alnvalue", gis.getString("instalyear"))
mxAssetSpec.setValue("startmeasure", '0')
mxAssetSpec.setValue("endmeasure", gis.getString("length_"))
mxAssetSpec.setValue("startmeasureunitid", 'FT')
mxAssetSpec.setValue("endmeasureunitid", 'FT')
if ASSETATTRID == 'ESTYEAR':
mxAssetSpec.setValue("alnvalue", gis.getString("est_year"))
mxAssetSpec.setValue("startmeasure", '0')
mxAssetSpec.setValue("endmeasure", gis.getString("length_"))
mxAssetSpec.setValue("startmeasureunitid", 'FT')
mxAssetSpec.setValue("endmeasureunitid", 'FT')
if ASSETATTRID == 'PDIAM':
mxAssetSpec.setValue("numvalue", gis.getString("diameter"))
mxAssetSpec.setValue("startmeasure", '0')
mxAssetSpec.setValue("endmeasure", gis.getString("length_"))
mxAssetSpec.setValue("startmeasureunitid", 'FT')
mxAssetSpec.setValue("endmeasureunitid", 'FT')
mxAssetSpec.save()
mxAssetSpec.close()
mxAssetSpec.resetForRefreshOnSave()
else:
raise UnboundLocalError
它循环遍历大约 8 个分类属性。脚本本身运行非常快,但每个分类属性之间有大约 3 秒的停顿。而且我还收到一个 oracle 错误:
java.sql.SQLException: ORA-00904: "ASSETNUM": 标识符无效
我引用 ASSETNUM 的唯一地方是当我从 ASSETSPEC MBO 检索字符串时,assetnum 是其属性,所以我很困惑为什么会收到此错误。
我的问题是,为什么我会收到无效标识符错误,为什么会有暂停,它们是否连接?
脚本大约需要 20 秒才能完成并且工作正常,但 20 秒大约 19 秒太长了。任何帮助,将不胜感激。任何关于如何改进代码的 cmets 都将不胜感激。
谢谢!
if mbo != None:
mxAssetSpec = mbo
mxAssetSet = mxAssetSpec.getMboSet("ASSET")
mxAsset = mxAssetSet.getMbo(0)
featureclass = mxAsset.getString("PLUSSFEATURECLASS")
assetattrid = mxAssetSpec.getString("ASSETATTRID")
print(featureclass)
print(assetattrid)
if featureclass == "GRAVITYSEWERLINES":
gisAssetSet = mxAssetSpec.getMboSet("SPATIAL_GRAVITYSEWERLINES")
gis = gisAssetSet.getMbo(0)
length = gis.getString("length_")
if assetattrid == 'MATERIAL':
mxAssetSpec.setValue("alnvalue", gis.getString("material"))
mxAssetSpec.setValue("startmeasure", '0')
mxAssetSpec.setValue("endmeasure", length)
mxAssetSpec.setValue("startmeasureunitid", 'FT')
mxAssetSpec.setValue("endmeasureunitid", 'FT')
if assetattrid == 'LENGTH':
mxAssetSpec.setValue("numvalue", gis.getString("length_"))
mxAssetSpec.setValue("startmeasure", '0')
mxAssetSpec.setValue("endmeasure", length)
mxAssetSpec.setValue("startmeasureunitid", 'FT')
mxAssetSpec.setValue("endmeasureunitid", 'FT')
if assetattrid == 'INSTALL':
mxAssetSpec.setValue("alnvalue", gis.getString("instalyear"))
mxAssetSpec.setValue("startmeasure", '0')
mxAssetSpec.setValue("endmeasure", length)
mxAssetSpec.setValue("startmeasureunitid", 'FT')
mxAssetSpec.setValue("endmeasureunitid", 'FT')
if assetattrid == 'ESTYEAR':
mxAssetSpec.setValue("alnvalue", gis.getString("est_year"))
mxAssetSpec.setValue("startmeasure", '0')
mxAssetSpec.setValue("endmeasure", length)
mxAssetSpec.setValue("startmeasureunitid", 'FT')
mxAssetSpec.setValue("endmeasureunitid", 'FT')
if assetattrid == 'PDIAM':
mxAssetSpec.setValue("numvalue", gis.getString("diameter"))
mxAssetSpec.setValue("startmeasure", '0')
mxAssetSpec.setValue("endmeasure", length)
mxAssetSpec.setValue("startmeasureunitid", 'FT')
mxAssetSpec.setValue("endmeasureunitid", 'FT')
mxAssetSpec.save()
其他: 引发 UnboundLocalError
【问题讨论】:
标签: oracle automation jython maximo