需求背景
为了提高操作效率并简化流程设计过程,应对伙伴们反映的在流程设计器中,即使填写/审批流程相同,不同模型也需重新配置的问题,我们引入了“动态表单”功能。此功能旨在减少重复配置的需求,通过设置节点名称和绑定视图,便可实现审批流程相同而视图不同,从而使得相同的审批流程可以被高效重复利用。
核心功能是:通过自定义函数实现视图的动态渲染,如图所示《动态表单函数》。
自定义动态表单函数
- 动态表单函数定义规则如下:
- namespace:强制为 WorkflowFunctionConstant.FUNCTION_NAMESPACE。
- fun:强制以 WorkflowFunctionConstant.WORKFLOW_CUSTOM_VIEW_FUNCTION_PREFIX 为前缀。
- 入参说明:
- 参数1:节点数据,例如,配合
instanceof
可以判断当前是填写节点(WriteNode)还是审批节点(ApprovalNode)。 - 参数2:触发节点的模型数据,如果您的触发节点不确定,可以通过Map接收参数。
- 参数3:该节点所配置数据来源的数据。
- 参数1:节点数据,例如,配合
- 出参说明:视图,如果出参为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低代码应用平台体验