更新时间:2024-05-11 GMT+08:00
分享

服务编排概述

为提升应用开发人员的开发效率,工业数字模型驱动引擎-数据建模引擎(xDM Foundation,简称xDM-F)不仅提供了对应用全量数据服务的管理功能,还提供了适配Java和JavaScript类型的高代码服务编排能力。应用开发人员可通过服务编排能力编排原子API或脚本形成一个跨实体(表)的组合API,提高应用开发的速度与质量。此外,当应用开发人员完成API脚本开发后,高代码服务编排支持验证脚本的正确性或者验证脚本是否符合预期。

使用说明

  • 默认情况下,所有用户均具有使用服务编排管理的权限。如果您希望只有授权的团队成员或部门成员才能访问和使用服务编排管理功能,您可以通过权限管理 > 授权 > 服务编排自定义授权,实现精细化权限控制以满足业务需求。更多权限相关信息请参见权限管理
  • 服务编排管理功能仅支持在唯一编码为“-1”的默认租户“basicTenant”下使用。
  • Java服务编排当前处于试运行阶段,仅支持白名单用户使用。
  • 数据服务管理 > 全量数据服务 > 系统管理API > 服务编排的create、get、history、list_page、revise、saveas和update接口的“gray”参数已废弃,使用相关接口时无需配置此参数。
  • Java服务编排不支持包含union all (with table_name as (select *的SQL语法。如需使用此语法,请使用JavaScript服务编排。

编排限制

表1 服务编排内容限制

编排类型

说明

Java类型

支持编排如下内容:

  • xDM-F的内置模型
  • 用户自定义的数据模型
  • Java集合类,例如Collection接口和Map接口
  • Java包装类,例如Integer类、Byte类、Float类和Double类
  • 正则表达式,例如Pattern类和Matcher类
  • 时间相关类,例如java.util包下的java.util.Date和java.util.Calendar类
  • JSON相关类,例如Jackson类库
  • Lombok项目
  • 持久化功能相关类,例如GeneralCrudService

JavaScript类型

  • 不可转义:`、'、;和"。
  • 不可转义,但可在SQL中转换:{。

    例如,有一条如下所示的SQL语句:

    select 1 from tablename where name='{}'

    可在SQL中进行如下转换:

    select 1 from tablename where name=chr(123)||'}'
  • 可转义:(、)和|。

    例如,(转义成\\(,)转义成\\),|转义成\\|。

入参差异

  • 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+"'";
        }
      }
      1. 执行接口入参:
        {"params":{"tenantId":-1,"targetType":"UNITTYPE","statusArray":["SUCCESS","FAIL"],"userInfo":{"creator":"mary","modifier":"jack"}}}
      2. 获取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 creator="{#creator}";var sql="select * from xdm_task where creator='"+creator+"'"; 
    1. 执行接口入参:
      {"params":{}} 
      {"params":{"creator":null}}
    2. 获取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;
    1. 执行接口入参:
      {"params":{"tenantId":-1}} 或者 {"params":{"tenantId":"-1"}}
    2. 获取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]+"')";
        }
      }
    }
    1. 执行接口入参:
      {"params":{"statusArray":"[\"SUCCESS\",\"FAIL\"]"}}  //入参类型:String类型
      {"params":{"statusArray":["SUCCESS","FAIL"]}}    //入参类型:数值类型
    2. 获取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+"'";
      }
    }
    1. 执行接口入参:
      {"params":{"userInfo":{"creator":"mary","modifier":"jack"}}}  //入参类型:String类型
      {"params":{"userInfo":{"creator":"mary","modifier":"jack"}}}  //入参类型:JSON类型
    2. 获取SQL:
      select * from xdm_task where 1=1 and creator='mary' and modifier='jack'
分享:

    相关文档

    相关产品