StatusChangeHandler.commitWOStatusChange 的自定义 mixin 最佳实践

Customization mixin Best Practice for StatusChangeHandler.commitWOStatusChange

我尝试了此处发布的最佳实践: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);
}

基本上我想确保允许他们根据自定义条件执行状态更改(以工作日志为例)。

然而,当框架命中我的代码时,它会立即执行原始功能,而不会测试我的条件。似乎存储函数的变量导致它 运行 并忽略我的代码的其余部分。

我这样做的方式是否正确,或者我们是否需要遵循不同的流程来控制更改状态的运行?

如果我删除变量,我可以让它命中我的代码,但在这引发错误后直接调用原始函数。

谢谢

比尔

我们的应用程序处理程序是 Dojo "declare" classes,因此必须以不同于其他 Javascript 文件的方式覆盖它们。

下面是一个覆盖现有 StatusChangeHandler.js 方法的示例 class。

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 的引用,以使其由应用加载。