操作截图:
EAS客户端-工作流监控-流程实例图-单据 获取web单据url逻辑
后台方法:
com.kingdee.eas.base.message.app.WebViewMessageFacadeControllerBean._getUrlByBillID(Context, String)
1、拿到该单据关联的流程实例的流程定义中的所有活动实例,遍历所有活动实例
2、
如果是 WebBillManpowerActivityDef类型 ( 动态Web 单据 人工节点定义)(这种节点一般都没有用到可忽略该场景)
取:act.getUrl()
节点配置的url
3、没取到url继续
如果是 ApproveActivityDef (审批节点)
判断是否支持isWebBillApprove(即自定义web URL)
<ExtendedAttribute Name="isWebBillApprove">false</ExtendedAttribute>
如果是 就取 WebBillApproveUrl
4、没取到url继续
如果是ManpowerActivityDef(人工节点)
判断当前流程实例是否存在对应的该活动定义的活动实例,如果有就取该节点的waf2的界面方案中的url
5、没取到url继续
通过单据id获取bos的动态web单据url(即单据entity的扩展属性isDynamic为true,并且扩展属性webEditUI有值)
EntityObjectInfo vo = loader.getEntity(type);
if (vo != null) {
String v = vo.getExtendedProperty("isDynamic");
String editpk = vo.getExtendedProperty("webEditUI");
if ("true".equalsIgnoreCase(v) && !StringUtils.isEmpty(editpk)) {
return new String[] { "/winlet/edit/editUIProxy.jsf", editpk };
}
6、没取到url继续
获取非动态web单据(单据entity 的扩展属性pureWFBillUrl,没有就取扩展属性 webEditPage,没有就取扩展属性webEditUI)
7、还是取不到,最终取这里(取实体的包名去掉(com.kingdee.eas)之后将.替换成/,然后再拼接上entity的name,再拼接上Edit.jsf)
如:/easweb//fdc/contract/payRequestBillEdit.jsf?billId=bLl1Ctg6SzC55f6HYSjp38mlqGk%3D
总结:
如果走到最后一步,这种方式取到的url不一定正确。
所以我们一般根据实际情况:
如果有waf2单据界面方案,那么就在人工节点(如单据提交节点)配置waf2单据界面方案;
如果是自定义web url,那么就在审批节点配置自定义 web url。
推荐阅读