IBM Case Manager打开案例预览同类案例onBroadcastEvent未定义报错
错误根因
- 你将
var self = this声明在require的异步回调内部,此时回调的this指向全局window对象,不是脚本适配器的组件实例,自然不存在onBroadcastEvent实例方法 onBroadcastEvent是ICM组件的实例方法,仅在组件自身作用域下调用有效,作用域偏移后就会抛出未定义错误
修复方案
推荐直接使用ICM提供的全局事件广播APIicm.util.broadcastEvent,不需要依赖当前组件实例,彻底规避作用域问题,修复后的代码如下:
// 若需要使用脚本适配器实例的其他方法,可将self声明在require外层捕获正确实例 // var self = this; require(["icm/model/properties/controller/ControllerManager", "ecm/model/Desktop" ], function(ControllerManager, Desktop) { var solution = Desktop.currentSolution; var params = {}; var prefix = solution.prefix; params.ObjectStore = solution.getTargetOS().id; var custID = payload.workItemEditable.propertiesCollection.LSS_IdentificationValue.value; console.log ("Customer ID: ",custID); var caseObj = payload.workItemEditable.icmWorkItem.caseObject; caseObj.retrieveCachedAttributes(function(caseObject) { var caseID = caseObject.caseIdentifier; console.log ("Case ID: ",caseID); /* 构造搜索条件 */ var criterion1 = new ecm.model.SearchCriterion({"id": prefix+"IdentificationValue", "name" : "Identification Type", "selectedOperator": "STARTSWITH", "defaultOperator": "STARTSWITH", "dataType": "xs:string"}); criterion1.value = custID ; criterion1.defaultValue = custID ; criterion1.setValues( [custID]); params.criterions = [criterion1]; params.CaseType = ""; /* 搜索全部案例类型 */ params.solution = solution; var searchPayload = new icm.util.SearchPayload(); searchPayload.setModel(params); searchPayload.getSearchPayload(function(payload) { // 替换为全局广播方法,不需要依赖self实例 icm.util.broadcastEvent("icm.SearchCases", payload); }); }); });
如果你一定要使用组件实例的onBroadcastEvent方法,只需要把var self = this的声明移到require调用的外层,捕获到脚本适配器的正确实例即可。
内容的提问来源于stack exchange,提问作者user1814595
相关产品推荐
相关产品推荐

