我尝试了这里发布的最佳实践:https://www.ibm.com/developerworks/community/blogs/a9ba1efe-b731-4317-9724-a181d6155e3a/entry/best_practices_for_customizing_maximo_anywhere_javascript?lang=en 用于自定义StatusChangeHandler.commitWOStatusChange函数。
如上所述取得原始功能的副本:
var originalCommitWOStatusChange = StatusChangeHandler.commitWOStatusChange
然后想要这样使用它:
commitWOSTatusChange: function(eventContext) {
if(conditionsAreFalse) {
Message to User to Fix Conditions;
}
else {
originalCommitWOStatusChange(eventContext);
}
基本上我想确保允许他们根据自定义条件执行状态更改(作为示例输入Worklog)。
然而,当框架命中我的代码时,它立即执行原始函数而不测试我的条件。似乎存储函数的变量导致它运行并忽略我的其余代码。
我是以正确的方式做到这一点还是我们需要遵循不同的流程来控制变更状态的运行?
如果我删除了变量,我可以让它来命中我的代码,但在发出错误之后直接调用原始函数。
由于
比尔
答案 0 :(得分:0)
我们的应用程序处理程序是Dojo“声明”类,因此必须以不同于其他Javascript文件的方式覆盖它们。
这是一个覆盖现有StatusChangeHandler.js方法的示例类。
define("application/handlers/ExtendedStatusChangeHandler",
[ "dojo/_base/declare",
"application/handlers/StatusChangeHandler",
],
function(declare, StatusChangeHandler) {
return declare( StatusChangeHandler, {
/**
* Commit changes to WO Status (handle OK button clicked)
* @function
* @param {string} eventContext - javascript variables context.
*/
commitWOStatusChange: function(eventContext){
if (true)
console.error("Custom WO Status Change");
else {
this.inherited(arguments);
}
},
});
});
您需要使用此ExtendedStatusChangeHandler替换app.xml中对StatusChangeHandler的引用,以便应用程序加载它。