功能描述
导入数据时,如果希望在导入数据之前进行一些预先的处理工作,可在导入前运行APL代码实现。如:
场景一:导入订单时,需要计算所有订单行内物料金额之和然后赋值到订单头的"总金额"字段内。
场景二:导入预处理时希望数据不会一条出错就全部回滚,让数据分批执行(如一批20条)。
功能说明
操作路径:【管理后台】→【对象管理】→【自定义对象管理】→【导入设置】
一、导入数据预处理
导入的预先处理方式有两种:前验证和预处理。
1.1 前验证
- 导入前验证函数和新建编辑的前验证函数类似,可以提示验证信息,同时支持阻断;
- 若数据导入失败,或校验出现错误,错误信息会回填到Excel失败列表中;
- 返回值类型为validateResult。
前验证APL代码示例:
// 对导入数据进行赋值
context.data.owner = ["1000"]
//校验逻辑
ValidateResult validate = ValidateResult.builder()
.success(false) //校验是否成功
.errorMessage("错误信息") //校验失败时的错误提示
.build()
return validate
1.2 预处理
- 导入预处理APL代码在导入前验证APL代码前先执行;
- 一些复杂的导入校验逻辑可以在导入预处理APL代码做好相关计算并写入缓存中;
- 到导入前验证APL代码执行的时候再从缓存中读出计算结果进行校验。
预处理APL代码示例:
def taskId = context.task.taskId as String
log.info(context.task.taskId) // 获取导入的任务id
log.info(context.task.lastBatch) //是否为最后一批数据
// 导入预处理时数据是分批执行的,一批20条,放在context.dataList中
List<Map> dataList = context.dataList as List
// 在 cache 中缓存信息,供前验证函数使用
Cache cache = Fx.cache.defaultCache
dataList.each{ data ->
def rowNo = data._RowNo as String
def name = data.field_MG1ch__c as String
def key = taskId + "_" + rowNo
log.info(key)
def value = "" + name
cache.put(key, value, 30)
}
return ValidateResult.builder()
.success(false) // 返回 false 将终止本次导入
.errorMessage("test")
.build()
二、处理时机
导入的处理时机有两种:新建导入时或更新导入时。两种处理时机均支持添加预处理和前验证APL。
以上两种导入时机分别对应前台导入时的两种方式:添加新数据和更新现有数据。
在前台使用这两种导入方式时会运行对应配置的APL代码。
每种处理时机下的预处理APL和前验证APL都仅可添加一个,处理逻辑请在一个APL代码中写全。
三、 管控导入方式(改名)
两种处理时机均可”管控导入方式“,两者可管控范围不同:
新建导入:【是否触发工作流和阶段推进器】和【是否触发审批流】
更新导入:【是否触发工作流】
在管理后台处为租户级管控,此处设置后前台导入时该选项将同步此处配置且禁用。