值转换规则(集成脚本)
1 简介
1.1 功能介绍
值转换规则类型中支持选择脚本类型。基于源对象输入值,通过脚本的方式,联查输出值赋予目标对象。
1.2 应用场景
当同义基础资料在源系统和目标系统的编码相同时,可以很方便的使用SQL规则分别从源系统获取编码,并从目标系统根据编码获取基础资料ID。
注意:当业务场景较为复杂时,建议使用“集成脚本”实现值转换规则,以避免写出特别复杂的SQL。
1.3 系统路径
【集成管理】→【数据集成】→【值转换规则】
1.4 字段/按钮说明
字段说明:
字段名称 | 详细解释 |
规则类型 | 选择规则类型为集成脚本 |
源对象 | 需要转换的源对象 |
目标对象 | 需要转换的目标对象 |
编码 | 规则编码,可自动生成 |
名称 | 规则名称,可自动生成 |
默认值 | 当找不到对应的映射数据时取当前设置的默认值 |
映射类型 | 根据所选对象自动生成 |
集成脚本 | 输入通过源对象联查目标对象的脚本 |
按钮说明:
按钮名称 | 详细解释 |
保存 | 保存值转换规则 |
测试 | 测试值转换规则 |
关联查询 | 查询值转换规则所关联的集成方案、服务流程 |
缓存结果 | 查看值转换规则缓存结果 |
历史版本 | 查看历史版本 |
2 主要操作
2.1 新增脚本转换规则
步骤1:请进入值转换规则列表,点击“新增”按钮,规则类型选择“集成脚本”
步骤2:选择和输入相关内容后保存
步骤3:保存后,即可测试,验证脚本是否执行结果是否符合预期
注意:集成脚本分为两部分,注释处填写脚本的工作机制;点击右侧文本框按钮,在对话框中输入实际执行的脚本代码
2.2 主要脚本语法规则
1、脚本使用基本的JavaScript语法,具体内容参考《集成脚本开发指南》
2、为方便访问源/目标系统数据库,集成脚本中提供4个系统变量、3个系统函数、5个常量
系统变量分别是:
$src - 源系统数据库
$tar - 目标系统数据库
$this - 当前苍穹帐套
param - 输入值
系统函数分别是:
query_value(cn, sql, params, types) - 执行SQL获取第一行第一列的值
query_row(cn, sql, params, types) - 执行SQL返回满足条件的第一行数据(Map),key都是小写形式
query_list(cn, sql, params, types) - 执行SQL返回满足条件的数据行(Map)组成的列表,key都是小写形式
常量分别是:
VARCHAR - 字符串
DECIMAL - 小数
BIGINT- 64位长整数
INTEGER - 32位整数
TIMESTAMP - 日期/时间
3、结果用 return 返回,系统变量($src、$tar、$this)作为 query函数的 cn 参数的赋值;
当sql中没有参数(?)时,params和types可以忽略;否则 params 和 types 的值要求是列表,且其中元素个数与SQL中的参数(?)个数必须一致
4、常量(VARCHAR, DECIMAL, BIGINT, INTEGER, TIMESTAMP)作为 types 的赋值,通常的用法是用:[VARCHAR, VARCHAR, DECIMAL, ...],中括号中的个数及类型必须与SQL中的参数(?)一致
5、当脚本中计算的变量值与SQL参数要求的类型不一致时,可以使用以下函数进行转换:
T(v) - 将变量v转换为日期/时间类型,作为TIMESTAMP类参数值
String(v) - 将变量v转换为字符串类型,作为VARCHAR类参数值
Number.parseInt(v) - 将变量v转换为32位整数类型,作为INTEGER类参数值
Number.parseLong(v) - 将变量v转换为64位长整型类型,作为BIGINT类参数值
Number.parseDecimal(v) - 将变量v转换为小数类型,作为DECIMAL类参数值
2.3 脚本语法示例
以下为根据EAS组织ID,获取组织类型的名称的SQL:
var sql = "select FLAYERTYPEID from t_org_admin where fid = ? and fisAdminOrgUnit=1"; var id = query_value($src, sql, [param], [VARCHAR]); if(id){ sql = "select fname_l2 from T_Org_LayerType where fid =?"; return query_value($src, sql, [id], [VARCHAR]); } //有税号的默认为公司 var sql="select top 1 ftaxnumber as tn from t_org_company where fid = ? and fisAdminOrgUnit=0 and fisCompanyOrgUnit = 1"; if(query_value($src, sql, [param], [VARCHAR])){ return "公司"; }else{ return "部门"; }
2.4 星空企业版脚本值转换示例
星空企业版系统集成中,有涉及到值转换的场景而候选键映射又无法满足时,可以使用脚本转换规则通过调用星空的单据查询接口获取需要的数据,实现数据转换。案例中以源对象和目标对象都是星空系统的对象来展示星空WEBAPI接口调用的脚本写法。
样例:函数调用星空API
源对象:星空-币别
目标对象:星空-币别
var srcParams = {"#data":[{"FormId":"BD_Currency","FieldKeys":"FNumber","FilterString":"FCURRENCYID = '"+param+"'"}]}; var srcNumber = $src_service("ExecuteBillQuery",srcParams).result[0][0]; if (typeof(srcNumber) == "java.util.LinkedHashMap") { throw srcNumber; } var tarParams = {"#data":[{"FormId":"BD_Currency","FieldKeys":"FCURRENCYID","FilterString":"FNumber = '"+srcNumber+"'"}]}; var tarId = $tar_service("ExecuteBillQuery",tarParams).result[0][0]; if (typeof(tarId) == "java.util.LinkedHashMap") { throw tarId; } return tarId;
值转换异常分析请参考:
值转换规则(集成脚本)
本文2024-09-23 00:49:34发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-141984.html