工作流动态表单使用说明

需求背景

为了提高操作效率并简化流程设计过程,应对伙伴们反映的在流程设计器中,即使填写/审批流程相同,不同模型也需重新配置的问题,我们引入了“动态表单”功能。此功能旨在减少重复配置的需求,通过设置节点名称和绑定视图,便可实现审批流程相同而视图不同,从而使得相同的审批流程可以被高效重复利用。

核心功能是:通过自定义函数实现视图的动态渲染,如图所示《动态表单函数》。

填写节点配置

自定义动态表单函数

  • 动态表单函数定义规则如下:
    • namespace:强制为 WorkflowFunctionConstant.FUNCTION_NAMESPACE。
    • fun:强制以 WorkflowFunctionConstant.WORKFLOW_CUSTOM_VIEW_FUNCTION_PREFIX 为前缀。
  • 入参说明:
    • 参数1:节点数据,例如,配合instanceof可以判断当前是填写节点(WriteNode)还是审批节点(ApprovalNode)。
    • 参数2:触发节点的模型数据,如果您的触发节点不确定,可以通过Map接收参数。
    • 参数3:该节点所配置数据来源的数据。
  • 出参说明:视图,如果出参为null,流程终止运行,错误信息提示为“流程节点执行失败,动态表单函数获取视图为空”。
@Slf4j
@Component
@Fun(WorkflowFunctionConstant.FUNCTION_NAMESPACE)
public class DynamicFormCustom {

    /**
     * 根据动态表单任务获取视图
     *
     * @param node            节点数据
     * @param dynamicFormTask 触发节点数据
     * @param dataObj         源数据
     */
    @Function.fun(WorkflowFunctionConstant.WORKFLOW_CUSTOM_VIEW_FUNCTION_PREFIX + "fetchDynamicFormFunction")
    @Function.Advanced(displayName = "[内置]获取动态表单函数")
    @Function(name = "fetchDynamicFormFunction")
    public View fetchDynamicFormFunction(Node node, DynamicFormTask dynamicFormTask, Map<String, Object> dataObj) {
        DynamicFormTaskNode dynamicFormTaskNode = fetchDynamicFormTaskNode(node, dynamicFormTask);
        if (dynamicFormTaskNode == null) {
            return null;
        }
        dynamicFormTaskNode.fieldQuery(DynamicFormTaskNode::getView);
        return dynamicFormTaskNode.getView();
    }

    private DynamicFormTaskNode fetchDynamicFormTaskNode(Node node, DynamicFormTask dynamicFormTask) {
        List<DynamicFormTaskNode> dynamicFormTaskNodeList = Models.origin().queryListByWrapper(Pops.<DynamicFormTaskNode>lambdaQuery()
                .from(DynamicFormTaskNode.MODEL_MODEL)
                .eq(DynamicFormTaskNode::getNodeName, node.getNodeName())
                .eq(DynamicFormTaskNode::getTaskCode, dynamicFormTask.getCode())
        );
        if (CollectionUtils.isEmpty(dynamicFormTaskNodeList)) {
            return null;
        }
        if (dynamicFormTaskNodeList.size() > 1) {
            log.error("工作流动态获取表单函数视图匹配多个,{}", JsonUtils.toJSONString(dynamicFormTaskNodeList));
        }
        return dynamicFormTaskNodeList.get(0);
    }
}

相关链接

工作流动态表单最佳实践

Oinone社区 作者:夜神月原创文章,如若转载,请注明出处:https://doc.oinone.top/designer/workflowdesigner/20372.html

访问Oinone官网:https://www.oinone.top获取数式Oinone低代码应用平台体验

(0)
夜神月的头像夜神月数式员工
上一篇 2025年2月7日 下午2:35
下一篇 2025年2月8日 下午12:36

相关推荐

  • 流程设计器的导入导出

    目录 依赖包安装GraphQL的工具登录gql导出生成json文件业务工程中导入示例代码生产环境使用流程设计器 简介 通过调用导出接口,将设计器的设计数据与元数据打包导出到文件中。提供了download/export两类接口。 依赖包 <dependency> <groupId>pro.shushi.pamirs.metadata.m…

    2024年5月16日
    1.1K00
  • 工作流自定义转交/加签人函数执行时机使用说明

    在实际工作流程的应用过程中,我们注意到有小伙伴需要根据当前执行操作的用户,进行筛选转交或加签人员的列表。为了应对这个需求,我们在流程设计器新增了自定义函数执行时机选项。 使用说明 自定义函数执行时机为空时,逻辑同任务创建时生效。 任务创建时生效:当系统创建待办任务时,会立即调用自定义函数确定转交或加签人列表。 功能特性:效率更高,但无法知道当前操作的用户是谁…

    2024年8月23日
    56400
  • 流程设计流程结束通知SPI接口

    1.实现SPI接口 import pro.shushi.pamirs.meta.common.spi.SPI; import pro.shushi.pamirs.meta.common.spi.factory.SpringServiceLoaderFactory; import pro.shushi.pamirs.workflow.app.api.entit…

    2023年12月26日
    44300
  • 工作流动态表单最佳实践

    需求背景 为了提高操作效率并简化流程设计过程,应对伙伴们反映的在流程设计器中,即使填写/审批流程相同,不同模型也需重新配置的问题,我们引入了“动态表单”功能。此功能旨在减少重复配置的需求,通过设置节点名称和绑定视图,便可实现审批流程相同而视图不同,从而使得相同的审批流程可以被高效重复利用。 为确保伙伴们能够更加方便的使用动态表单,我们将典型示例整合至“工作流…

    2024年8月22日
    85900
  • 项目中工作流引入和流程触发

    目录 1. 使用工作流需要依赖的包和设置2. 触发方式2.1 自动触发方式2.2 触发方式 1.使用工作流需要依赖的包和设置 1.1 工作流需要依赖的模块 需在pom.xml中增加workflow、sql-record和trigger相关模块的依赖 workflow:工作流运行核心模块 sql-record:监听流程发布以后对应模型的增删改监听 trigge…

    2023年11月7日
    58600

发表回复

登录后才能评论