为什么我的 C4C Service Request 没办法 Release 到 ERP?
问题
UI 上发现找不到 Release to ERP 的按钮:
但是在 UI Designer 里是能看到这个按钮的。检查其 Visible 的属性,绑到了一个 Calculated Rule 上面:
发现其显示在 runtime UI 的条件为:Service Interface 1425 必须为激活状态, 且 FullCreateModeInactive 必须为 true。
检查这两个节点 runtime 的值,发现看不见 button 的原因为 1425 这个 service interface 在该系统上没有激活。
Angular
我们在 Angular 框架的代码里能看到一个名为 processQueue 的函数:
这个函数是通过apply 启动的:
核心代码位于一个 for 循环里,循环体是一个存储异步处理任务的队列 asyncQueuePosition:
队列里每个元素长这样的:一个处理函数 fn,一个局部变量 locals 和 scope 对象:
这个注释也非常有用:一旦 Angular 发现由apply 触发的 JavaScript 执行序列里又出现了apply 的嵌套调用,会抛出错误消息:$digest already in progress
// It's safe for asyncQueuePosition to be a local variable here because this loop can't
// be reentered recursively. Calling evalAsync would
// lead to a '$digest already in progress' error.
C4C 事件队列
C4C 的事件处理器,EventProcessor.js 有一个事件队列:
该队列的实现位于 sap/client/evt/的 OperationQueue.js 中:
随便在 C4C UI 做一个点击,能触发 EventProcessor 的_processQueue,C4C 事件队列的处理和 Angular 思路一样,只不过是一个 while 循环替代了 Angular 的 for 循环:
C4C 事件队列里每个元素属性如下,可以同 Angular 事件元素做对比:
fFunc 就相当于 Angular 时间元素的 fn 属性,environment 相当于 Angular 事件元素的 scope 属性。
要获取更多 Jerry 的原创文章,请关注公众号"汪子熙".
版权声明: 本文为 InfoQ 作者【Jerry Wang】的原创文章。
原文链接:【http://xie.infoq.cn/article/e1f9f7f89f140901efa7a9682】。文章转载请联系作者。
评论