工作流审核撤回/回退/拒绝/同意/反悔钩子使用

目录

1. 流程撤回、拒绝和回退调用自定义函数
1.1 工作流【撤销】回调钩子
1.2 撤销【回退】回调钩子
1.3 工作流【拒绝】回调钩子
1.4 工作流【同意】回调钩子
1.4 工作流【反悔】回调钩子
1.4 回调钩子在业务系统中的调用示例
2. 自定义审批方式、自定义审批节点名称

1.流程撤回、拒绝和回退调用自定义函数

1.1工作流【撤销】回调钩子

使用方式:把该方法放置到XXX模型的Action下面,或@Fun(XXX.MODEL_MODEL)
触发方式:当流程实例被撤销时
调用入口:pro.shushi.pamirs.workflow.app.core.service.impl.WorkflowInstanceServiceImpl#undoInstance

/**
 * XXX为当前流程触发方式为模型触发时对应的触发模型、
 * 对应返回不影响流程上下文
 * @param data 入参为触发时的业务数据,数据的JsonString
 * @return
 */
@Function
public XXX recall(String data) {
      // TODO: 根据实际的业务逻辑把data转换为对象
       WorkRecord workRecord = JsonUtils.parseObject(data, new TypeReference<WorkRecord>(){});
      // TODO: 增加自定义业务逻辑
      return new XXX();
}

1.2撤销【回退】回调钩子

使用方式:把该方法放置到XXX模型的Action下面,或@Fun(XXX.MODEL_MODEL)
触发方式:流程待办进行回退操作时
调用入口:pro.shushi.pamirs.workflow.app.core.service.operator.ApprovalFallbackOperatorService

/**
 * XXX为当前流程触发方式为模型触发时对应的触发模型
 * 对应返回不影响流程上下文
 * @param data 入参为触发时的业务数据,数据的JsonString
 * @return
 */
@Function
public XXX fallBack(String data) {
    // TODO: 根据实际的业务逻辑把data转换为对象
    WorkRecord workRecord = JsonUtils.parseObject(data, new TypeReference<WorkRecord>(){});
    // TODO: 增加自定义业务逻辑
    return new XXX();
}

1.3工作流【拒绝】回调钩子

使用方式:把该方法放置到XXX模型的Action下面,或@Fun(XXX.MODEL_MODEL)
触发方式:流程待办进行拒绝操作时
调用入口:pro.shushi.pamirs.workflow.app.core.service.operator.ApprovalFallbackOperatorService

/**
 * XXX为当前流程触发方式为模型触发时对应的触发模型
 * 对应返回不影响流程上下文
 * @param data 入参为触发时的业务数据,数据的JsonString
 * @return
 */
@Function
public XXX reject(String data) {
    // TODO: 根据实际的业务逻辑把data转换为对象
    WorkRecord workRecord = JsonUtils.parseObject(data, new TypeReference<WorkRecord>(){});
    // TODO: 增加自定义业务逻辑
    return new XXX();
}

1.4 工作流【同意】回调钩子

使用方式:把该方法放置到XXX模型的Action下面,或@Fun(XXX.MODEL_MODEL)
触发方式:流程待办进行同意操作时
调用入口:pro.shushi.pamirs.workflow.app.core.util.ArtificialTaskUtils

    @Function(summary = "发起的审批同意时会自动调用此方法")
    @Function.Advanced(displayName = "审批同意")
    public Teacher agree(String data) {
        // TODO: 根据实际的业务逻辑把data转换为对象
//        WorkRecord workRecord = JsonUtils.parseObject(data, new TypeReference<WorkRecord>(){});
        // TODO: 增加自定义业务逻辑
        return new Teacher();
    }

1.4 工作流【反悔】回调钩子

使用方式:把该方法放置到XXX模型的Action下面,或@Fun(XXX.MODEL_MODEL)
触发方式:流程待办进行反悔操作时
使用场景:流程待办进行反悔操作时,需要额外更改其他的业务数据逻辑时可用该回调钩子。

注意:该函数的namespace需要设置为流程触发模型。

调用入口:pro.shushi.pamirs.workflow.app.core.service.operator.ArtificialRetractOperatorService

  @Function
  @Function.fun(WorkflowBizCallConstants.retract)
  public void retract(WorkflowUserTask workflowUserTask) {
      // 获取流程实例
      workflowUserTask.fieldQuery(WorkflowUserTask::getInstance);
      WorkflowInstance instance = workflowUserTask.getInstance();
      // 获取用户任务实例
      WorkflowUserInstance userInstance = new WorkflowUserInstance()
              .setId(workflowUserTask.getWorkflowUserInstanceId())
              .queryById();
      // 反悔的用户id
      Long userId = workflowUserTask.getUserId();
      // 反悔的节点id
      String nodeId = workflowUserTask.getNodeId();
  }

1.4回调钩子在业务系统中的调用示例

    @Function(summary = "发起的流程撤销时会自动调用此方法")
    @Function.Advanced(displayName = "撤销流程")
    public PurchaseProjectProxy recall(String data) {
        Object tempObj = BeanDefinitionUtils.findFirst(ClientDataConverter.class).out(PurchaseProjectProxy.MODEL_MODEL, JsonUtils.parseMap(data));
        PurchaseProjectProxy proxy = BeanDefinitionUtils.getBean(ClientDataConverter.class)
                .<PurchaseProjectProxy>in(new ModelComputeContext(), PurchaseProjectProxy.MODEL_MODEL, tempObj);

        PurchaseProject purchaseProject = service.recall(ArgUtils.convert(PurchaseProjectProxy.MODEL_MODEL, PurchaseProject.MODEL_MODEL, proxy));
        return ArgUtils.convert(PurchaseProject.MODEL_MODEL, PurchaseProjectProxy.MODEL_MODEL, purchaseProject);
    }

2.自定义审批方式、自定义审批节点名称

【注意】 流程自定义函数需指定:category = FunctionCategoryEnum.CUSTOM_DESIGNER

@Model.model(审批模型.MODEL_MODEL)
@Component
public class 审批模型Action {

    /**
     * 自定义审批方式
     * @param json json为业务数据,可用JsonUtils转换
     * @return 返回参数:
     * COUNTERSIGN_ONEAGREE_ONEREJUST 或签(一名审批人同意或拒绝即可)
     * COUNTERSIGN_ALLAGREE_ONEREJUST 会签(需所有审批人同意才为同意,一名审批人拒绝即为拒绝)
     * COUNTERSIGN_ONEAGREE_ALLREJUST 会签(一名审批人同意即为同意,需所有审批人拒绝才为拒绝)
     * SINGLE 单人
     */
    @Function
    @Function.Advanced(category = FunctionCategoryEnum.CUSTOM_DESIGNER, displayName = "测试自定义审批类型")
    public WorkflowSignTypeEnum signType(String json) {
        // TODO: 增加自定义业务逻辑
        return WorkflowSignTypeEnum.COUNTERSIGN_ONEAGREE_ONEREJUST;
    }

    /**
     * 自定义审批节点名称
     * @return
     */
    @Function
    @Function.Advanced(category = FunctionCategoryEnum.CUSTOM_DESIGNER, displayName = "测试自定义审批名称")
    public String customApprovalName() {
        return UUID.randomUUID().toString();
    }
}

Oinone社区 作者:望闲原创文章,如若转载,请注明出处:https://doc.oinone.top/backend/4542.html

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

(0)
望闲的头像望闲数式管理员
上一篇 2023年11月15日 pm2:19
下一篇 2023年11月16日

相关推荐

  • 自定义createorupdate方法时,关联模型数据怎么保存?

    需要自己手动增加保存关联模型数据的逻辑。 多对一、一对一以及一对多 可直接用fieldSave进行保存即可 //如 data.fieldSave(PamirsEmployee::getPositions); 多对多 需要对数据进行处理,前端提交过来的数据,进行判断,是新增还是修改,或者删除

    2023年11月1日
    1.2K00
  • 协同开发支持

    协同开发概述 在使用Oinone进行业务开发中,目前开发方式为: 开发各个本地启动项目 与 设计器环境共库共redis的方式进行。 在多个开发人员同时修改一个模型,或者没有及时更新其他同学提交的代码时,存在业务模型创建的数据表字段被删除的情况,协同开发模式正式为解决这个问题而生。 版本支持 4.7.x版本 已经包含分布式支持。 使用步骤 1、业务后端boot工程引入协同开发包 <dependency> <groupId>pro.shushi.pamirs.distribution</groupId> <artifactId>pamirs-distribution-session-cd</artifactId> </dependency> 2、yml文件配置ownSign pamirs: distribution: session: allMetaRefresh: false ownSign: wangxian 配置说明:allMetaRefresh,全量刷新Redis中的元数据,绝大多数情况下都不需要配置;1)第一次启动或者Redis的缓存被清空后,会自动进行全量。2)配置为true表示强制进行全量,一般都不需要配置;3)【推荐】默认增量的方式(即allMetaRefresh: false)写入redis的数据更少,相应的启动速度也更快4)【强制】ownSign是环境隔离的设置,同一个项目组不同的开发人员之间,ownSign配置成不同的(即各自配置成各自的,达到互不干扰) 3、业务系统DB和缓存的约束1)【强制】业务库和设计器Redis共用,包括Redis的前缀,租户和系统隔离键都需要一样(这三个值影响RedisKey的拼接)2)【强制】base库业务系统与设计器共用;3) 【强制】公共库即pamirs (资源-resource、用户-user、权限-auth、文件-file等)共用;4)【强制】「业务库」数据源的别名必须一直,每个开发人员必须配置到自己的本地 或者是远程库库加一个后缀区分; 4、开发同学在各自访问设计器时,URL最后面增加;ownSign=wangxian后回车,ownSign会被保存到浏览器缓存中,后续访问其他的URL访问不需要再次输入;如果需要去掉ownSign的值,则直接把界面上的悬浮窗删掉即可。说明:访问设计URL上增加的ownSign需要与开发各自本地项目yml文件中ownSign的值相同。(每个开发人员各自用各自的ownSign)PS:具体参数配置详见Oinone协同开发使用手册

    2023年12月4日
    1.3K00
  • 自定义审批方式、自定义审批节点名称

    @Model.model(审批模型.MODEL_MODEL) @Component public class 审批模型Action { @Function @Function.Advanced(category = FunctionCategoryEnum.CUSTOM_DESIGNER, displayName = "测试自定义审批类型") public WorkflowSignTypeEnum signType(String json) { // json为业务数据,可用JsonUtils转换 return WorkflowSignTypeEnum.COUNTERSIGN_ONEAGREE_ONEREJUST; } @Function @Function.Advanced(category = FunctionCategoryEnum.CUSTOM_DESIGNER, displayName = "测试自定义审批名称") public String customApprovalName() { return UUID.randomUUID().toString(); } }

    2023年12月5日
    1.5K00
  • 工作流引入流程概览与流程监控

    流程概览依赖说明 使用 流程概览 功能前,需要在项目中引入 pamirs-workflow-datavi-core、 pamirs-data-visualization-core依赖,并启动datavi模块: <dependency> <groupId>pro.shushi.pamirs.workflow</groupId> <artifactId>pamirs-workflow-datavi-core</artifactId> </dependency> <dependency> <groupId>pro.shushi.pamirs.data.visualization</groupId> <artifactId>pamirs-data-visualization-core</artifactId> </dependency> 警告: 在 oinone 平台启用「流程概览」能力时,应用启动模块一旦引入 pamirs-workflow-api/core,必须同时引入 pamirs-workflow-datavi-api/core。在多启动模块架构下,严禁出现仅部分启动模块引入 pamirs-workflow-core 而未引入 pamirs-workflow-datavi-core 的情况,否则将导致流程概览相关元数据计算异常,出现删表等情况。 流程概览配置项 流程概览页面内置缓存机制,可通过配置项调整缓存刷新周期及图表展示的数据条数: pamirs: workflow: dashboard: cache-time: 10 # 流程概览缓存刷新时间(单位:分钟),默认 10 分钟 page-size: 10 # 流程运行分析中 4 个图表的展示数量,默认查询前 10 条数据 统计指标说明 引入 pamirs-workflow-datavi-core 依赖后,系统会按照以下规则进行数据同步: 当日数据同步:每小时同步一次当日数据; 昨日数据同步:次日凌晨同步前一日数据。 由于在引入依赖后才会开始执行数据同步,统计指标页提供了「同步」按钮,可用于对历史数据进行补采。即使不执行历史同步,也不会影响核心业务流程,仅会影响统计数据和图表的展示效果。 统计指标数据主要用于 支撑 流程概览 和 流程监控 中的统计图表展示; 为数据分析与可视化提供基础数据。 上述统计数据对工作流的审批、流转等核心业务无任何影响。如有需要,也可以基于流程监控的数据,配合数据可视化设计器,自定义构建符合业务需求的展示页面。

    2025年11月17日
    17500
  • 【PostgreSQL】后端部署使用PostgreSQL数据库

    PostgreSQL数据库配置 驱动配置 Maven配置(14.3版本可用) <postgresql.version>42.6.0</postgresql.version> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>${postgresql.version}</version> </dependency> 离线驱动下载 postgresql-42.2.18.jarpostgresql-42.6.0.jarpostgresql-42.7.3.jar JDBC连接配置 pamirs: datasource: base: type: com.alibaba.druid.pool.DruidDataSource driverClassName: org.postgresql.Driver url: jdbc:postgresql://127.0.0.1:5432/pamirs?currentSchema=base username: xxxxxx password: xxxxxx 连接url配置 暂无官方资料 url格式 jdbc:postgresql://${host}:${port}/${database}?currentSchema=${schema} 在jdbc连接配置时,${database}和${schema}必须完整配置,不可缺省。 其他连接参数如需配置,可自行查阅相关资料进行调优。 方言配置 pamirs方言配置 pamirs: dialect: ds: base: type: PostgreSQL version: 14 major-version: 14.3 pamirs: type: PostgreSQL version: 14 major-version: 14.3 数据库版本 type version majorVersion 14.x PostgreSQL 14 14.3 PS:由于方言开发环境为14.3版本,其他类似版本(14.x)原则上不会出现太大差异,如出现其他版本无法正常支持的,可在文档下方留言。 schedule方言配置 pamirs: event: enabled: true schedule: enabled: true dialect: type: PostgreSQL version: 14 major-version: 14.3 type version majorVersion PostgreSQL 14 14.3 PS:由于schedule的方言在多个版本中并无明显差异,目前仅提供一种方言配置。 其他配置 逻辑删除的值配置 pamirs: mapper: global: table-info: logic-delete-value: (EXTRACT(epoch FROM CURRENT_TIMESTAMP) * 1000000 + EXTRACT(MICROSECONDS FROM CURRENT_TIMESTAMP))::bigint PostgreSQL数据库用户初始化及授权 — init root user (user name can be modified by oneself) CREATE USER root WITH PASSWORD 'password'; — if using automatic database and schema creation, this is very important. ALTER USER root CREATEDB; SELECT * FROM pg_roles; — if using postgres database, this authorization is required. GRANT CREATE ON DATABASE postgres TO root;

    2023年11月1日
    1.0K00

Leave a Reply

登录后才能评论