
# 一、业务场景
很多客户有定时执行任务,或者异步执行一些耗时久的业务逻辑的需求,需要使用后台事务;但目前后台事务有很多功能介绍、操作说明,却没有一个整体流程的二开事件方案。
还有一些客户,想基于后台事务平台,不想依托于已有的操作,想在自己的业务场景通过代码实现后台事务的创建与发布,也没有详细的接口文档说明及二开案例。
# 二、实践思路
1. 元数据二开
开发功能Facade或业务功能Function,然后客户端【后台事务定义】界面,新建后台事务定义,选择已开发的Facade或Function,设置调度计划,配置参数,测试发布;
2. 代码二发
调用后台事务提供的接口,直接代码创建发布后台事务,指定执行的业务方法、执行时间来触发执行一次;或指定指定的Function,设置调度计划来定时执行;
# 三、详细设计
## BOS开发
### 1、新建一个功能Facade或一个业务功能Function
1. BOS工具切换至设计开发工具

2. 新建功能Facade
1. 新建功能Facade

2. 增加方法

3. 发布功能Facade
4. 在发布生成的代码中实现业务逻辑
FacadeControllerBean重写刚才新增的方法
例如:我创建的Facade是TestJobFacade,增加的方法是test1,那就在TestJobFacadeControllerBean重写_test1方法;

3. 新建业务功能Function
1. 新增业务功能Function

2. 新增操作定义
Function和Facade不同,不是在代码中重写方法实现业务逻辑,而是需要引用实体的事件方法,最后实现的业务逻辑也是实体事件引用的方法;
例如:引用的实体事件testEvent引用了上面新增的facade方法test1,所以最后实际执行的还是TestJobFacadeControllerBean的_test1方法;


3. 发布业务功能Function
### 2、本地开发环境更新子系统树
1. BOS工具切换至业务建模工具
2. 选择刚才新建的Facade或Function的上级目录,从包更新子系统树

### 3、部署环境更新子系统树
1. 将二开包部署至服务器后,管理控制台重新产生子系统树,重启服务

### 4、客户端创建后台事务定义
1. 新增后台事务定义

2. 选择任务
选择上面步骤二开的Facade或Function方法

3. 配置调度计划
可以设置每天、每周、每月、一次性;如果需要复杂的调度计划,可以使用自定义,填写Cron表达式,Cron表达式可以参考[https://www.pppet.net/](https://www.pppet.net/)

4. 配置任务方法的参数

5. 保存
6. 测试事务执行一次

在【后台事务监控】界面可以查询到测试的事务执行情况

双击打开,可以查询详情

7. 发布后台事务
发布后台事务,后台事务就会按照配置的调度计划定时执行业务方法

## DEP开发
### 1、新建一个功能Facade或业务功能Function
1. 新建一个动态扩展方案

2. 新建业务单元

3. 新建Facade

选择包路径,填写名称

新建方法

通过脚本实现业务逻辑

保存
4. 新建Function

选择包路径,填写名称
新建操作信息,和BOS二开一样,Function是需要引用实体的事件方法

保存
5. 启用方案

### 2、客户端创建事务定义
DEP创建的Facade或Function不需要更新子系统树,客户端创建后台事务定义,操作步骤和BOS开发一致,选择任务就可以选到DEP新建