本文摘要
在泛微 Ecology E9 二次开发中,可借助流程浏览按钮的自定义参数 spellSqlWhere,通过 WfForm.appendBrowserDataUrlParam 向取数接口动态注入 SQL 条件,实现按流程节点、表单字段值等过滤浏览数据,文中给出了按节点和审批状态筛选的实例。该方式灵活易用,但仅适用于流程浏览框,作者建议配合 datas 查询 SQL 的拦截方案使用,否则参数容易失效。

在日常的泛微 E9 二次开发中,我们常常需要对表单中的流程浏览按钮做数据过滤以满足业务需求。泛微提供了一个非常强大的自定义参数 spellSqlWhere,可以通过它实现基于 SQL 的动态筛选功能。本文将详细介绍这一功能,并分享一个实用的解决方案。


先亮方案!注意:仅限流程浏览框

⚠️ 注意事项

建议配合datas查询的sql使用:api/ec/dev/table/getxml 拦截后解决方案,否则你的参数很容易无效~

在流程中,我们可以通过 WfForm.appendBrowserDataUrlParam API 方法扩展浏览按钮取数接口的参数值:

WfForm.appendBrowserDataUrlParam("field6541", {
"spellSqlWhere": "and workflow_requestbase.currentnodeid = 202"
});

2024-12-26T06:12.png 上述代码的核心是利用 spellSqlWhere 参数直接向 SQL 查询中拼接条件,非常适合实现基于表单动态条件的数据过滤。


背景分析

关键代码解析

在研究过程中,发现了泛微的部分源码逻辑:

private String getFromSql(Map<String, Object> var1, List<String> var2) {
String var3 = (String)var2.get(0);
String var4 = (String)var2.get(1);
StringBuilder var5 = new StringBuilder();
var5.append(" where 1=1 ").append(Util.null2String(var1.get("spellSqlWhere")));
}

从这段代码可以得出以下几个重要信息:

  1. 拼接逻辑 :
    • spellSqlWhere 参数的值会被直接拼接到 SQL 查询的 WHERE 子句中。
    • Util.null2String(var1.get("spellSqlWhere")) 的作用是将传入的 spellSqlWhere 参数安全地拼接到 WHERE 子句中,避免空值引发异常。
  2. 来源 :
    • var1 是请求的参数 Map。
    • 浏览按钮通过请求参数 spellSqlWhere 动态传入 SQL 条件。
  3. 动态扩展 :
    • 通过向参数中添加 spellSqlWhere,可以为浏览按钮注入自定义 SQL 条件,从而动态控制浏览按钮的数据展示。

功能要点

spellSqlWhere 的核心功能是基于 SQL 的动态筛选。通过将表单上的条件转换为 SQL 语句拼接到查询中,开发者可以快速实现复杂的过滤需求。

使用场景

  1. 按流程节点过滤 : 在工作流中,不同节点需要查看不同的数据。例如,当前节点只允许看到与当前流程状态相关的数据。
  2. 基于表单字段动态过滤 : 根据用户在表单中填写的值,实时调整浏览按钮的数据范围。
  3. 复杂条件查询 : 对接外部系统或处理复杂的业务逻辑时,通过自定义 SQL 条件过滤数据。

实现步骤

1. 定义浏览按钮并关联字段

在 E9 中设计表单,添加一个浏览按钮,并绑定一个字段(如 field6541)。

2. 使用 WfForm.appendBrowserDataUrlParam 扩展参数

在工作流节点脚本中,使用 WfForm.appendBrowserDataUrlParam 方法向浏览按钮添加 spellSqlWhere 参数。例如:

WfForm.appendBrowserDataUrlParam("field6541", {
"spellSqlWhere": "and workflow_requestbase.currentnodeid = 202"
});

3. 动态构建 SQL 条件

根据业务需要,可以动态拼接不同的 SQL 条件。例如,基于表单字段值动态筛选:

var condition = "and workflow_requestbase.requestid = " + WfForm.getFieldValue("field1234");
WfForm.appendBrowserDataUrlParam("field6541", {
"spellSqlWhere": condition
});

4. 测试并验证

通过实际操作表单,测试浏览按钮的数据是否按预期过滤。例如:

  • 当前节点是否只显示与当前节点 ID 匹配的数据。
  • 表单字段值是否正确过滤浏览数据。

实际案例

场景描述

在一个审批流程中,需要在表单中添加一个浏览按钮,过滤出当前流程节点中未审批的流程请求。

解决方案

  1. 表单中添加浏览按钮,绑定字段 field6541。
  2. 在节点脚本中添加以下代码:
WfForm.appendBrowserDataUrlParam("field6541", {
"spellSqlWhere": "and workflow_requestbase.currentnodeid = " + WfForm.getFieldValue("currentNodeId") +
" and workflow_requestbase.requeststatus = 0"
});
  1. 动态拼接 SQL 条件:
    • currentnodeid:当前节点 ID。
    • requeststatus = 0:未审批状态。

结果

浏览按钮只显示符合当前节点且未审批的请求数据,大大提高了用户体验和操作效率。


总结

spellSqlWhere 是一个非常灵活的自定义浏览按钮参数,开发者可以利用它轻松实现复杂的动态 SQL 筛选需求。通过 WfForm.appendBrowserDataUrlParam 方法,可以为浏览按钮动态注入 SQL 条件,适用于各种复杂业务场景。

优点:

  • 灵活性高:基于 SQL 动态拼接,几乎没有筛选限制。
  • 易于实现:通过简单的 API 调用即可完成。

通过合理利用 spellSqlWhere,我们可以显著增强泛微 E9 的浏览按钮功能,让表单更加智能和高效!