从EAS向苍穹同步人员,苍穹中已有的分录信息(直接上级信息)被清空

问题描述:
通过‘预置_人员信息(EAS-苍穹)’方案,用户从EAS向苍穹同步人员信息时,如果EAS中缺失部门分录中的直接上级,而在人员信息同步后于苍穹端手工维护了该信息,那么应该如何避免下次同步时手工维护的直接上级被清空?

解决方案:
找到对应的集成方案:预置_人员信息(EAS-苍穹)
特别说明:所有修改需要结合现场的需求来评估是否满足现场的业务需求,并且经过测试环境验证后更新正式环境。

修改

查看/编辑 转换脚本

处理逻辑
EAS推送数据到苍穹时,先查询苍穹是否存在该数据,存在的话,取出当前苍穹的直接上级字段,根据分录的候选键重新塞到目标数据分录中。
注意点:目标数据中可能不存在当前单据的id,需要重新查询id,由于标准产品已经存在查询用户类型的查询脚本,为保证性能,可以直接在该脚本加一个fid字段,如果目标对象存在id字段,则可以忽略该逻辑。
加入处理脚本(其中红色部分为需要加入的部分)
if(tar.number== null){return null;}
var sql = "SELECT top 1 fusertype as type,fid from t_SEC_User@basedata where fnumber = ?";
var list = query_list($tar, sql, [tar.number], [VARCHAR]);
// 如果存在该用户,且用户类型不为1,忽略
if(list && list[0].type != '1') {
tar.#_IGNORE_TAG = true;
}
if(list && list[0].fid != null){
//eas同步苍穹,部门分录不覆盖直接上级字段,其中fsuperiorid为苍穹直接上级字段,fposition,fdptid为候选键字段,用来做确定需要更新的时那行数据
var entrySql = "SELECT fsuperiorid,fposition,fdptid as fdpt FROM T_SEC_USERPOSITION@SYS where fid=?";
//查询目标分录结果
var entrylist = query_list($tar,entrySql, [list[0].fid], [BIGINT]);
if(entrylist){
for(row:entrylist) {
if(row.fsuperiorid != null){
for(var i = 0; i < tar.entryentity.length; i++) {
if(tar.entryentity[i].position.zh_CN == row.fposition && tar.entryentity[i].dpt == row.fdpt ){
tar.entryentity[i].superior = row.fsuperiorid;
}
}
}
}
}
}

查看部门信息分录候选键

附:如需保留目标系统中额外新增的分录信息
在转换脚本中根据部门分录中的部门id作为候选键进行判断,当目标系统中的分录信息不包含该id时,则将该条分录重新添加到写入的分录信息中。
加入处理脚本(其中红色部分为需要加入的部分)
if(tar.number== null){return null;}
v
从EAS向苍穹同步人员,苍穹中已有的分录信息(直接上级信息)被清空
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



