门户集成时,往往需要实现统一待办集成,而统一待办系统通常要实现:
- 定时或(准)实时的从OA或BPM系统中抓取(或推送)待办、待阅等任务信息
- 在门户首页或特定栏目下,显示待办、待阅列表
- 与OA或BPM系统实现SSO
- 从列表中打开待办任务后,任务提交时,需要自动刷新门户上的列表
将BroBPM与统一待办系统实现实现任务同步、SSO集成后,考虑第最后的刷新需求,在BroBPM中待办任务提交、或者打开待阅后,会自动执行下面的步骤(js):
- 尝试调用父窗口(window.opener)的 reloadTodo 或 reloadToread 方法来刷新待办/待阅/文档列表
- 如果调用失败(js方法不存在或不允许跨域访问等),进一步尝试重新加载父页面(opener.location.reload())
- 如果还是失败,则尝试提升当前域(即修改 document.domain,如 bpm.bropen.com.cn 去掉前缀、提升到 bropen.com.cn),并重复执行上述两步
给予上述刷新机制,统一待办系统可以:
- 为了避免跨域问题,使用反向代理等机制,将所有系统保持在同一个子域下(如portal.bropen.com.cn)
或者保持在同一个父域下,并且当加载完列表页面后,主动提升当前域为父域,以便各个子系统的页面能够通过js互相访问 - 在待办、待阅列表中提供reloadTodo、reloadToread的js api,这两个api用来实现ajax或者页面的刷新
否则,当BPM系统或其他系统通过调用opener.location.reload()来刷新时,如果列表中有查询操作,则应该采用GET方式、而不是POST方式,以免浏览器弹出重新发送请求的提示