Ниже приведен сценарий автоматизации, который является второй частью процесса загрузки активов. Первая часть нагрузки данных атрибутов для актива при создании внешней системы, но он также устанавливает ClassificationID, который создает записи в таблице ASSETSPEC, который выстреливает ниже скрипт:Ошибка автоматизации и ошибки автоматизации Maximo 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 секунд. И я также получаю сообщение об ошибке оракула:
java.sql.SQLException: ORA-00904: «ASSETNUM»: недопустимый идентификатор
Единственное место, где я referrencing ASSETNUM, когда я извлечения строки из ASSETSPEC MBO какой assetnum является атрибутом, поэтому я запутался, почему я получаю эту ошибку.
Мои вопросы: почему я получаю неправильную ошибку идентификатора и почему существует пауза, и они связаны?
Сценарий занимает около 20 секунд для завершения работы и работает нормально, но 20 секунд составляет около 19 секунд. Любая помощь будет оценена по достоинству. Также будут оценены любые комментарии о том, как улучшить код.
Спасибо!
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
Я добавил новый код выше, но все равно около 3 секунд паузы между каждым атрибутом спецификации актива. Сам скрипт, если стрелять в 16 мс, но время между стрельбой для каждого атрибута спецификации ресурса составляет около 3 секунд. Этот сценарий является второй частью процесса загрузки. Первый скрипт копирует информацию об атрибутах, а также устанавливает CLASSIFICATIONID, который, в свою очередь, запускает этот скрипт. – TrojanMan78
Не вызывайте mxAssetSpec.save(). Как правило, вы должны вызывать только save() на MboSet, если вы получаете MboSet с MXServer. – Preacher
Кроме того, как раз в стиле кодирования, я бы склонен не псевдоним mbo, как mxAssetSpec. Для меня, называя это просто «mbo», мне напоминает, что он был предоставлен Maximo и может ссылаться на разные объекты, в зависимости от точки запуска. – Preacher