【工作流】如何在业务模型的列表中展示工作流的审批按钮

介绍

当我们需要在业务模型的列表中展示审批的按钮时,我们可以通过自定义的方式完成扩展,这样就可以在业务数据中直接点击该动作按钮跳转到工作流待办详情页处理审批或填写任务

1.先在业务数据模型中新增userTaskList字段存放该条数据的工作流待办数据

@Model.model(DemoItem.MODEL_MODEL)
@Model(displayName = "测试商品")
public class DemoItem extends IdModel {

    @Field.one2many
    @Field(displayName = "工作流任务列表", store = NullableBoolEnum.FALSE)
    @Field.Relation(store = false)
    private List<WorkflowUserTask> userTaskList;
}

2. 在业务数据的查询方法中查询当前登录用户在工作流任务中的数据

@Function.Advanced(type = FunctionTypeEnum.QUERY, displayName = "查询列表", timeout = 50000)
    @Function.fun(FunctionConstants.queryPage)
    @Function(openLevel = {FunctionOpenEnum.LOCAL, FunctionOpenEnum.REMOTE, FunctionOpenEnum.API})
    public Pagination<DemoItem> queryPage(Pagination<DemoItem> page, QueryWrapper<DemoItem> queryWrapper) {
        new DemoItem().queryPage(page, queryWrapper);

        List<Long> bizIds = page.getContent().stream().map(DemoItem::getId).collect(Collectors.toList());

        LambdaQueryWrapper<WorkflowUserTask> userTaskWrapper = new LambdaQueryWrapper<>();
        userTaskWrapper.setModel(WorkflowUserTask.MODEL_MODEL);
        userTaskWrapper.select(WorkflowUserTask::getId, WorkflowUserTask::getNodeDataBizId);
        userTaskWrapper.eq(WorkflowUserTask::getUserId, PamirsSession.getUserId())
                .eq(WorkflowUserTask::getModel, DemoItem.MODEL_MODEL)
                .eq(WorkflowUserTask::getStatus, WorkflowUserStatusEnum.ACTIVE)
                .in(WorkflowUserTask::getNodeDataBizId, bizIds);

        Pagination<WorkflowUserTask> userTaskPagination = new Pagination<>();
        userTaskPagination.setCurrentPage(1);
        userTaskPagination.setSize(200L);
        userTaskPagination.setSort(new Sort().addOrder(SortDirectionEnum.DESC, WorkflowUserTask::getCreateDate));

        List<WorkflowUserTask> userTasks = new WorkflowUserTask().queryListByWrapper(userTaskPagination, userTaskWrapper);
        Map<Long, WorkflowUserTask> map = userTasks.stream().collect(Collectors.toMap(WorkflowUserTask::getNodeDataBizId, v -> v, (a, b) -> a));
        page.getContent().forEach((item) -> {
            WorkflowUserTask workflowUserTask = map.get(item.getId());
            if (workflowUserTask != null) {
                item.setUserTaskList(Lists.newArrayList(workflowUserTask));
            }
        });
        return page;
    }

3. 在界面设计器拖一个服务端动作到操作列中

4. 将工作流任务列表字段userTaskList拖到表格列中并隐藏该字段

【工作流】如何在业务模型的列表中展示工作流的审批按钮

5. 前端自定义跳转到工作流待办详情页的动作组件

import {
  ActionType,
  ActionWidget,
  ClickResult,
  executeViewAction, RuntimeViewAction,
  ServerActionWidget,
  SPI, ViewActionTarget, ViewType, Widget
} from '@kunlun/dependencies';

// name为界面设计器拖出的动作名称
@SPI.ClassFactory(ActionWidget.Token({ actionType: ActionType.Server, model: 'demo.DemoItem', name: 'uiServer0358d42817d64fe7908fe48dfce084d3' }))
class WorkflowJumpActionWidget extends ServerActionWidget {

  @Widget.Reactive()
  public get invisible(): boolean {
    if (!this.activeRecords?.[0]?.userTaskList?.[0]?.id) {
      return true;
    }
    return super.invisible;
  }

  protected async clickAction(): Promise<ClickResult> {
    const menu = {"selectedKeys":["WorkflowMenus_WorkBenchMenu_ActiveUserTaskMenu"],"openKeys":["WorkflowMenus_WorkBenchMenu","WorkflowMenus_WorkBenchMenu_ActiveUserTaskMenu"]};
    const userTaskId = this.activeRecords?.[0]?.userTaskList?.[0]?.id;
    if (!userTaskId) {
      return;
    }
    executeViewAction(
      {
        viewType: ViewType.Form,
        resModuleName: 'workflow',
        model: 'workbench.WorkBenchWorkflowUserTaskActive',
        name: 'workflow_wait',
        target: ViewActionTarget.OpenWindow,
        sessionPath: '/workflow/WorkflowMenus_WorkBenchMenu_ActiveUserTaskMenu'
      } as RuntimeViewAction,
      undefined,
      undefined,
      {
        id: userTaskId,
        menu: JSON.stringify(menu)
      }
    );
  }
}

Oinone社区 作者:nation原创文章,如若转载,请注明出处:https://doc.oinone.top/workflow/6987.html

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

(0)
nation的头像nation数式员工
上一篇 2024年5月7日
下一篇 2024年5月8日

相关推荐

  • 【工作流】如何自定义工作流的待办任务列表

    介绍 有些时候我们需要把一些业务数据同时展示在工作流的待办列表中,这时候我们可以通过覆写oinone的待办列表展示组件 1.添加工作流相关依赖 业务的api工程添加工作流相关依赖 package pro.shushi.pamirs.demo.api; import org.springframework.stereotype.Component; impor…

    2024年5月8日
    38700
  • 工作流动态表单使用说明

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

    2024年8月22日
    61600
  • 【工作流】如何自定义支持在加签的同时审批同意

    1.添加工作流相关依赖 业务的api工程添加工作流相关依赖 package pro.shushi.pamirs.demo.api; import org.springframework.stereotype.Component; import pro.shushi.pamirs.core.common.CommonModule; import pro.shu…

    2024年6月6日
    51800
  • 【工作流】流程扩展自定义函数示例代码汇总

    目录 1. 流程节点审批人函数2. 审批开始前执行函数3. 待办操作提交后执行函数4. 审批操作数据函数 1. 流程节点审批人函数 包含转交、抄送、加签、填写、通知人自定义函数当平台默认提供的审批人选择无法满足个性化的业务需求时,我们可以通过自定义函数处理审批人的生成逻辑 1.1 编写自定义审批人函数 @Function(openLevel = {Funct…

    2023年12月4日
    54500
  • 【工作流】如何添加工作流运行时依赖

    前端 package.json中新增依赖 @kunlun/workflow,版本跟@kunlun/dependencies的填一样 src/main.ts内导入依赖 import 'reflect-metadata'; import { VueOioProvider } from '@kunlun/dependencies&#0…

    2024年5月30日
    43800

发表回复

登录后才能评论