【发布时间】:2020-08-30 08:40:48
【问题描述】:
我有一些在 Maximo 7.6.0.9 中显示是/否对话框的相对简单的代码。尽管使用了兼容性选项,但移植到 Maximo 7.6.1.1 根本不起作用。没有显示对话框,调试表明它不知道是和否的常量是什么,这让我相信我没有正确指定服务包,但我不清楚如何使这项工作。
在 Maximo 7.6.0.9 和 WebSphere 8.5.5.4 下运行的代码在以下情况下失败: Maximo IBM Maximo Asset Management 7.6.1.1 Build 20190514-1348 DB Build V7611-01,websphere 9.0.5.1
这是基本的自动化脚本:
load("nashorn:mozilla_compat.js");
importClass(Packages.psdi.mbo.MboRemote);
importClass(Packages.psdi.mbo.MboConstants);
importClass(Packages.psdi.mbo.MboSetRemote);
importClass(Packages.com.ibm.tivoli.maximo.script.ScriptService);
importClass(Packages.psdi.util.MXApplicationException);
importClass(Packages.psdi.server.MXServer);
importClass(Packages.psdi.iface.mic.InvokeChannelCache);
importClass(Packages.psdi.mbo.GLFormat);
var attTest = processAnyAttachments(mbo);
function queryuser(mbo) {
service.log(scriptName + ".JS - entering queryuser(mbo)");
service.log(scriptName + ".JS - service.YNC_NULL = " + service.YNC_NULL +
", service.YNC_NO = " + service.YNC_NO + ", service.YNC_YES = " + service.YNC_YES);
service.log(scriptName + ".JS - service = " + service);
var answer = service.yncuserinput();
if (answer == service.YNC_NULL) {
service.yncerror("slcfinance", "nopoattachments");
} else {
service.log(scriptName + ".JS - answer != service.YNC_NULL, but: " + answer);
}
if (answer == service.YNC_NO) {
service.log(scriptName + ".JS - answer == service.YNC_NO");
service.error("slcfinance", "usercancel");
} else {
service.log(scriptName + ".JS - answer != service.YNC_NO, but: " + answer);
}
service.log(scriptName + ".JS - leaving queryuser(mbo)");
}
function processAnyAttachments(mbo) {
service.log(scriptName + ".JS - entering processAnyAttachments(mbo)");
var retVal = true;
var doclinksMSR = mbo.getMboSet("DOCLINKS");
if ((doclinksMSR != null) && (!doclinksMSR.isEmpty())) {
service.log(scriptName + ".JS - some doclinks found");
} else {
service.log(scriptName + ".JS - no doclinks found");
if (interactive) {
service.log(scriptName + ".JS - invoking queruser(mbo)");
retVal = queryuser(mbo);//TBD MAKE THIS WORK
service.log(scriptName + ".JS - Done invoking queruser(mbo)");
}
}
service.log(scriptName + ".JS - leaving processAnyAttachments(mbo) - retVal = " + retVal);
return retVal;
}
我尝试使用类型为“i”和“e”的 ync 消息,以防万一它在那里没有变化。
有人可以告诉我如何进行这项工作吗?否则,我将不得不改用 jython,这相当费力。谢谢
好的,我不确定我是否犯了错误,但我的输出现在看起来像这样: -- 导入或不导入 serviceScript 都没有关系
ScriptMboEventListener Event maximo.po.update has been fired for script POBEFORESAVE launch point POBEFORESAVE
POBEFORESAVE.JS - entering processAnyAttachments(mbo)
POBEFORESAVE.JS - no doclinks found
POBEFORESAVE.JS - invoking queruser(mbo)
POBEFORESAVE.JS - entering queryuser(mbo)
POBEFORESAVE.JS - service.YNC_NULL = undefined, service.YNC_NO = undefined, service.YNC_YES = undefined
POBEFORESAVE.JS - service = com.ibm.tivoli.maximo.script.ScriptService@5db5a021
POBEFORESAVE.JS - answer != service.YNC_NULL, but: -1
POBEFORESAVE.JS - answer != service.YNC_NO, but: -1
POBEFORESAVE.JS - leaving queryuser(mbo)
POBEFORESAVE.JS - Done invoking queruser(mbo)
POBEFORESAVE.JS - leaving processAnyAttachments(mbo) - retVal = undefined
update 20300710- I think it is a bug in 7.6.1.1
【问题讨论】:
-
我认为您不需要导入脚本服务;我认为这已经隐含地赋予了脚本。反过来,这应该意味着知道那些 YNC 常量是什么应该没有问题(您的问题提供的唯一错误提示)。当它运行时,你实际上在日志中得到了什么?堆栈跟踪是否有错误?
-
我可能犯了一个错误。我会将输出粘贴到响应中。
-
这很奇怪。您确实有一个服务对象,但对象的常量没有定义?我可以在我反编译的 7.6.1.1 代码中看到它们。您能否从已部署的耳朵中取出 com.ibm.tivoli.maximo.script.ScriptService 类并对其进行反编译以确保其中有常量?如果不是,那么您部署的耳朵可能有问题,也许您的安装有问题。如果它们在那里,可能是 JavaScript 引擎中的一些错误将它们排除在外?
-
与此同时,您可以自己声明常量。 YNC_CANCEL = 4; YNC_NO = 16; YNC_NULL = -1; YNC_OK = 2; YNC_YES = 8 developer.ibm.com/static/site-id/155/maximodev/7609/maximocore/…
标签: javascript automation maximo