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

介绍

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

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,
        moduleName: 'workflow',
        model: 'workbench.WorkBenchWorkflowUserTaskActive',
        name: 'workflow_wait',
        target: ViewActionTarget.OpenWindow
      } as RuntimeViewAction,
      undefined,
      undefined,
      {
        id: userTaskId,
        menu: JSON.stringify(menu)
      }
    );
  }
}

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

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

(0)
nation的头像nation数式员工
上一篇 2024年5月6日 下午9:48
下一篇 2024年5月8日 上午2:46

相关推荐

  • 工作流-流程设计扩展自定义函数示例代码汇总        后端

    工作流-流程设计扩展自定义函数示例代码汇总

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

    2023年12月4日
    00
  • 流程设计器的导入导出        流程设计器

    流程设计器的导入导出

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

    4天前
    00
  • 如何自定义工作流的待办任务列表        流程设计器

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

    介绍 有些时候我们需要把一些业务数据同时展示在工作流的待办列表中,这时候我们可以通过覆写oinone的待办列表展示组件 1. 由于平台原有的视图中未返回业务模型的原始数据的字段,所以我们先要将originNodeContext字段加到视图中,该workbench_usertask_active_table.xml文件存放在src/resources目录下 &…

    2024年5月8日
    00
  • 项目中工作流引入/触发        后端

    项目中工作流引入/触发

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

    2023年11月7日
    00
  • 流程设计流程结束通知SPI接口        后端

    流程设计流程结束通知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日
    00

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注