服务编排概述
为提升应用开发人员的开发效率,工业数字模型驱动引擎-数据建模引擎(xDM Foundation,简称xDM-F)不仅提供了对应用全量数据服务的管理功能,还提供了适配Java和JavaScript类型的高代码服务编排能力。应用开发人员可通过服务编排能力编排原子API或脚本形成一个跨实体(表)的组合API,提高应用开发的速度与质量。此外,当应用开发人员完成API脚本开发后,高代码服务编排支持验证脚本的正确性或者验证脚本是否符合预期。
- Java服务编排:主要用于处理事务一致性问题。
- JavaScript服务编排:主要用于处理跨对象、复杂的查询类业务。
使用说明
- 默认情况下,所有用户均具有使用服务编排管理的权限。如果您希望只有授权的团队成员或部门成员才能访问和使用服务编排管理功能,您可以通过权限管理。 自定义授权,实现精细化权限控制以满足业务需求。更多权限相关信息请参见
- 服务编排管理功能仅支持在唯一编码为“-1”的默认租户“basicTenant”下使用。
- Java服务编排当前处于试运行阶段,仅支持白名单用户使用。
- “gray”参数已废弃,使用相关接口时无需配置此参数。 的create、get、history、list_page、revise、saveas和update接口的
- Java服务编排不支持包含union all (with table_name as (select *的SQL语法。如需使用此语法,请使用JavaScript服务编排。
编排限制
编排类型 |
说明 |
---|---|
Java类型 |
支持编排如下内容:
|
JavaScript类型 |
入参差异
- Java类型服务编排
Java类型的服务编排入参在服务开发中由用户自行定义。
- JavaScript类型服务编排
JavaScript服务编排入参有两种方式:
- 通过var request="";
JavaScript服务编排要求在JavaScript脚本里面加var request="";,否则运行时会报错。服务编排内容如下:
var request=""; // 数值类型 var tenantId=request.tenantId; //字符串类型 var targetType=request.targetType; //数值类型 var statusArray=request.statusArray; //JSON类型 var userInfo=request.userInfo; var sql="select * from xdm_task where 1=1"; // 数值类型的使用 if( tenantId!=undefined && tenantId !=null ){ sql += " and _tenantId="+tenantId; } // 字符串类型的使用 if( targetType!=undefined && targetType !=null ){ sql += " and targetType='"+targetType+"'"; } // 数组类型的使用 if( statusArray!=undefined && statusArray !=null ){ sql +=" and status in ("; for(var i=0;i<statusArray.length;i++){ if(i !=statusArray.length-1){ sql+="'"+statusArray[i]+"',"; }else{ sql+="'"+statusArray[i]+"')"; } } } // JSON类型的使用 if( userInfo!=undefined && userInfo !=null ){ var creator=userInfo.creator; var modifier=userInfo.modifier; if( creator!=undefined && creator !=null ){ sql += " and creator='"+creator+"'"; } if( modifier!=undefined && modifier !=null ){ sql += " and modifier='"+modifier+"'"; } }
- 执行接口入参:
{"params":{"tenantId":-1,"targetType":"UNITTYPE","statusArray":["SUCCESS","FAIL"],"userInfo":{"creator":"mary","modifier":"jack"}}}
- 获取SQL:
select * from xdm_task where 1=1 and _tenantId=-1 and targetType='UNITTYPE' and status in('SUCCESS','FAIL') and creator='mary' and modifier='jack'
- 执行接口入参:
- 通过{#key}
如在JavaScript服务编排中写入了{#key},在执行接口入参的JSON中会有对应的key,在运行JavaScript服务编排时,会将服务编排中的{#key}替换成入参中对应的key值。在入参中一定要有对应的key,否则服务编排中的{#key}不会被替换。
- 通过var request="";
- 字符串类型服务编排
服务编排内容如下:
var request="";var creator="{#creator}";var sql="select * from xdm_task where creator='"+creator+"'";
- 执行接口入参:
{"params":{}}
{"params":{"creator":null}}
- 获取SQL:
select * from xdm_task where creator='{#creator}'
select * from xdm_task where creator='null'
- 执行接口入参:
- 数值类型服务编排
服务编排内容如下:
var request="";var tenantId={#tenantId};var sql="select * from xdm_task where _tenantId="+tenantId;
- 执行接口入参:
{"params":{"tenantId":-1}} 或者 {"params":{"tenantId":"-1"}}
- 获取SQL:
select * from xdm_task where _tenantId=-1
- 执行接口入参:
- 数组类型服务编排
服务编排内容如下:
var request=""; var statusArray={#statusArray}; var sql="select * from xdm_task where 1=1"; if( statusArray!=undefined && statusArray !=null ){ sql +=" and status in ("; for(var i=0;i<statusArray.length;i++){ if(i !=statusArray.length-1){ sql+="'"+statusArray[i]+"',"; }else{ sql+="'"+statusArray[i]+"')"; } } }
- 执行接口入参:
{"params":{"statusArray":"[\"SUCCESS\",\"FAIL\"]"}} //入参类型:String类型 {"params":{"statusArray":["SUCCESS","FAIL"]}} //入参类型:数值类型
- 获取SQL:
select * from xdm_task where 1=1 and status in ('SUCCESS','FAIL')
- 执行接口入参:
- JSON类型服务编排
服务编排内容如下:
var request=""; var userInfo={#userInfo}; var sql="select * from xdm_task where 1=1" if( userInfo!=undefined && userInfo !=null ){ var creator=userInfo.creator; var modifier=userInfo.modifier; if( creator!=undefined && creator !=null ){ sql += " and creator='"+creator+"'"; } if( modifier!=undefined && modifier !=null ){ sql += " and modifier='"+modifier+"'"; } }
- 执行接口入参:
{"params":{"userInfo":{"creator":"mary","modifier":"jack"}}} //入参类型:String类型 {"params":{"userInfo":{"creator":"mary","modifier":"jack"}}} //入参类型:JSON类型
- 获取SQL:
select * from xdm_task where 1=1 and creator='mary' and modifier='jack'
- 执行接口入参: