# 流程框架api与spi介绍
# 前端API
# JS-API
表单保存方法saveFormData
saveFormData主要作用于用户点击保存按钮时触发保存方法。
此方法有两个参数processContext、bfpContext。其中processContext为流程相关信息,bfpContext为bfp框架相关信息。
saveFormData为必写方法,注意此方法如果有异步操作,返回一个promise,否则直接返回form数据。具体参考示例:
saveFormData(processContext, bfpContext) { // 如果有异步操作,返回一个promise,否则直接返回form数据 let page = this.getIframePc() if(page){ return page.saveFormData(processContext, bfpContext) } else { return new Promise(resolve => { resolve(this.formData) }) } }
表单校验方法beforeSaveFormData
beforeSaveFormData主要作用于用户点击保存按钮时,进入保存方法之前生效,多用于对表单的校验,用户可以按照需求设计表单校验规则。
此方法有两个参数processContext、bfpContext,其中processContext为流程相关信息,bfpContext为bfp框架相关信息。
beforeSaveFormData为非必写方法,注意返回值可以返回一个promise,也可以直接返回boolean值。具体参考示例:
beforeSaveFormData(processContext, bfpContext, beforeSubmit = true ,isRunValidate = true) { let page = this.getIframePc() if(page){ return await page.beforeSaveFormData(processContext, bfpContext, beforeSubmit = true ,isRunValidate = true) } else { if (beforeSubmit && this.event_beforeSubmit && (await this.event_beforeSubmit()) === false) { return false } if(isRunValidate){ return this.validateAll() } else { return true } } }
保存表单后触发方法afterSaveFormData
afterSaveFormData主要作用于用户触发表单保存事件后,得到后台服务器返回值之后触发此方法,可用于自定义一些表单返回弹框、信息等。用户可根据自己的需求定制化前端返回内容。
此方法有两个参数processContext、bfpContext。其中processContext为流程相关信息,bfpContext为bfp框架相关信息。
afterSaveFormData为非必写方法,注意如果有异步操作,返回一个promise,否则直接返回form数据。具体参考示例:
afterSaveFormData(processContext, bfpContext) { // 如果有异步操作,返回一个promise,否则直接返回form数据 let page = this.getIframePc() if(page){ return page.afterSaveFormData(processContext, bfpContext) } else { return new Promise(resolve => { this.event_afterSubmitSuccess && this.event_afterSubmitSuccess() resolve() }) } }
# BFP-SPI
# 业务数据扩展SPI
首先要在需要在jar包的META-INF/services/目录里同时创建一个以服务接口命名的文件。该文件里就是实现该服务接口的具体实现类。而当外部程序装配这个模块的时候,就能通过该jar包META-INF/services/里的配置文件找到具体的实现类名,并装载实例化,完成模块的注入。
在我们EOS的工程中,我们需要在需要扩展spi的构建包目录下,找到构建包的\src\META-INF目录,创建services文件夹,创建以服务接口命名的文件. 文件内容首先是接口路径例如:com.XXX.data.XXX.resourceService.ProcessResourceService,其次是4个参数:tenant、catalog、process、activity;tenant代表租户,默认为default;catalog是业务目录,默认为-1;process为接口路径地址;activity:活动定义ID(具体在流程环节下生效).
关于4个参数,可以只传tenant,代表同一租户下流程的spi都可以生效,也可以传前两个tenant、catalog代表同一租户下流程的同一业务目录下spi都可以生效,也可以传前三个tenant、catalog、process代表同一租户下流程的同一业务目录下的单个流程的spi生效,也可以全部传tenant、catalog、process、activity代表同一租户下流程的同一业务目录下的单个流程的单个环节下spi生效.但是注意tenant是必传的,后面参数可以选择性传参.
具体参考示例:
其次在具体的实现类里需要集成IProcessBizDataOperateService接口,实现该接口下两个方法queryBizFormData()和saveBizFormData().
queryBizFormData()是查询接口数据的方法,该方法有4个参数:String bizPrimaryKeyId, String[] bizPrimaryKeyValue, String entityName,ProcessContext processContext;bizPrimaryKeyId代表业务表主键ID(联合主键采用逗号拼接),bizPrimaryKeyValue代表业务表主键值(联合主键值采用逗号拼接;数组为支持N表数据场景下的查询),entityName代表实体名称,processContext代表流程框架相关信息.客户可根据自己的需求取到需要的信息,用信息去调用自己的查询接口,得到应该返回的数据.
saveBizFormData()是保存表单数据方法,该方法有4个参数:String bizPrimaryKeyId, String[] bizPrimaryKeyValue, String entityName,ProcessContext processContext;bizPrimaryKeyId代表业务表主键ID(联合主键采用逗号拼接),bizPrimaryKeyValue代表业务表主键值(联合主键值采用逗号拼接;数组为支持N表数据场景下的查询),entityName代表实体名称,processContext代表流程框架相关信息.客户根据传参,自行组装参数,调用保存方法,保存表单数据.注意保存方法需要返回保存数据的主键信息,用于提供查询接口使用.
具体参考示例:
public class ProcessResouceService implements IProcessBizDataOperateService { @Override public Object queryBizFormData(String bizPrimaryKeyId, String[] bizPrimaryKeyValue, String entityName, ProcessContext processContext) throws Exception { return null; } @Override public String[] saveBizFormData(List<Map<String, Object>> formData, String entityName, ProcessContext processContext) throws Exception { return new String[0]; } }
# 相关数据扩展SPI
首先要在需要在jar包的META-INF/services/目录里同时创建一个以服务接口命名的文件。该文件里就是实现该服务接口的具体实现类。而当外部程序装配这个模块的时候,就能通过该jar包META-INF/services/里的配置文件找到具体的实现类名,并装载实例化,完成模块的注入。
在我们EOS的工程中,我们需要在需要扩展spi的构建包目录下,找到构建包的\src\META-INF目录,创建services文件夹,创建以服务接口命名的文件. 文件内容首先是接口路径例如:com.XXX.data.XXX.RelativeDataServiceImpl,其次是4个参数:tenant、catalog、process、activity;tenant代表租户,默认为default;catalog是业务目录,默认为-1;process为接口路径地址;activity:活动定义ID(具体在流程环节下生效).
关于4个参数,可以只传tenant,代表同一租户下流程的spi都可以生效,也可以传前两个tenant、catalog代表同一租户下流程的同一业务目录下spi都可以生效,也可以传前三个tenant、catalog、process代表同一租户下流程的同一业务目录下的单个流程的spi生效,也可以全部传tenant、catalog、process、activity代表同一租户下流程的同一业务目录下的单个流程的单个环节下spi生效.但是注意tenant是必传的,后面参数可以选择性传参.
具体参考示例:
其次在具体的实现类里需要集成IProcessRelativeDataService接口,实现该接口下两个方法setRelativeData()。
setRelativeData()是设置相关数据接口的方法,该方法有3个参数:List<Map<String, Object>> formData, String entityName, ProcessContext processContext;formData代表表单数据,entityName代表流程绑定实体名称,processContext代表流程框架相关信息。客户根据传参,自行组装参数,调用设置相关数据方法。
具体参考示例:
public class RelativeDataServiceImpl implements IProcessRelativeDataService { @Override public Map<String, Object> setRelativeData(List<Map<String, Object>> formData, String entityName, ProcessContext processContext) { Map<String, Object> relativeData = new HashMap<String, Object>(); return relativeData; } }