EBMIDE——服务脚本IOS(二)

news/2024/7/20 21:58:07 标签: 脚本, ios, service, io, string, file

服务的嵌套调用

把通用的服务脚本抽出来配置成独立的子服务,然后提供给其他服务内部进行调用,这样能够避免相同逻辑的脚本重复编写。

服务嵌套调用需要注意的地方:

* 服务的上下文:子服务参数的传入/传输

*  服务嵌套调用时的异常处理和事务处理

* 避免互相嵌套调用产生死循环

 

服务嵌套调用定义

<!--service: 服务定义,name: 服务名称,debug:调试,publish:发布,transaction:事务控制-->

<service name="" debug="false" publish="false" transaction="false">

  <in>

    <!--set: 输入输出定义,name: 参数名称-->

    <set name=""/>

  </in>

  <out>

    <set name=""/>

  </out>

  <script>

    <!--invoke: 调用子服务,service:子服务名称-->

    <invoke service="">

      <in>

        <!-- i:当前服务的参数,o:子服务的输入参数-->

        <ioi="" o=""/>

      </in>

      <out>

        <!-- i:子服务的输出参数,o:当前服务的参数-->

        <ioi="" o=""/>

      </out>

    </invoke>

    <!--error: 错误处理脚本-->

    <error>

      <io i="" o=""/>

    </error>

  </script>

</service>

 

服务嵌套调用例子

原子服务CreateFile

<service name="CreateFile" debug="true" publish="true" transaction="false">

  <comment/>

  <!--输入参数-->

  <in>

    <set name="Name" type="string" label="文件名称"/>

  </in>

  <!--输出参数-->

  <out>

    <set name="File" type="entity" label="文件对象"/>

    <set name="Error" type="string" label="错误信息"/>

  </out>

  <!--服务脚本-->

  <script>

    <io i="CreateEntity('EBM.Data.File')" o="File"/>

    <io i="CreateDTS()" o="File.DTS"/>

    <io i="FormatDate(Date(),'yyyyMMdd')" o="File.Folder"/>

    <io i="@Name" o="File.Name"/>

    <io i="'.fxl'" o="File.Ext"/>

    <io i="GetDriver()" o="File.Driver"/>

    <!--异常处理-->

    <error>

      <io i="Error()" o="Error"/>

    </error>

  </script>

</service>

嵌套服务调用

<service name="服务嵌套测试" debug="true" publish="true" transaction="false">

  <comment/>

  <!--输入参数-->

  <in>

    <set name="Name" type="string" label="文件名称"/>

  </in>

  <!--输出参数-->

  <out>

    <set name="File" type="entity" label="文件对象"/>

    <set name="Error" type="string" label="错误信息"/>

  </out>

  <!--服务脚本-->

  <script>

    <invoke service="CreateFile">

      <in>

        <!-- i:当前服务的参数,o:子服务的输入参数-->

        <io i="@Name" o="Name"/>

      </in>

      <out>

        <!-- i:子服务的输出参数,o:当前服务的参数-->

        <io i="@File" o="File"/>

      </out>

    </invoke>

    <!--异常处理-->

    <error>

      <io i="Error()" o="Error"/>

    </error>

  </script>

</service>

 

相关文章

EBM专栏

 


http://www.niftyadmin.cn/n/1574663.html

相关文章

AtomicInteger 源码以及对CAS的理解

2019独角兽企业重金招聘Python工程师标准>>> public class AtomicInteger extends Number implements java.io.Serializable {private static final long serialVersionUID 6214790243416807050L;// setup to use Unsafe.compareAndSwapInt for updatesprivate sta…

EBMIDE——服务脚本IOS编辑器(二)

新的服务脚本编辑器&#xff0c;除了能够编辑IOS服务脚本&#xff0c;还能够对服务进行测试调用。实现了开发测试这个基本的平台式开发流程。 新功能效果图 支持设计视图&#xff0c;把常用的服务配置&#xff0c;输入参数/输出参数&#xff0c;都提供了相应的输入控件&#x…

UVa1437 String painter

emmm...好难的一道dp 其实本质是两次dp.第一次求出都不相等时候的最优解, 第二次在求出两串有相同时的更优的解. https://blog.csdn.net/hndu__lz/article/details/52167981 这位讲的不错, 可以去看看. 1 #include <cstdio>2 #include <cstring>3 #include <ios…

控件篇——MDI桌面框架

用Flex实现类似Windos的桌面效果&#xff0c;包括工具栏、窗体等。系统以桌面为容器的好处就是能够装载各种的子系统和应用&#xff0c;而不会有概念上的不一致&#xff0c;因为是windows的理念&#xff0c;海纳百川&#xff0c;而且能带来较熟悉的用户体现。 工具栏&#xff1…

线程queue

线程queue queue的三种用法&#xff1a; 先进先出->队列 import queueqqueue.Queue(3) q.put(first) q.put(second) q.put(third)print(q.get()) print(q.get()) print(q.get()) 结果(先进先出): first second third 后进先出->堆栈 q queue.LifoQueue(3) #后进先出->…

EBMIDE——服务脚本IOS(三):IOS语言

IOS简介 IOS是In/Out Script(输入/输出脚本)的简称&#xff0c;在我的设计中&#xff0c;用in&#xff0c;out&#xff0c;script3个节点来描述一个服务调用。 目前的问题 目前的IOS脚本部分是用XML节点来描述的&#xff0c;这样做降低了脚本语法的解析难度。但是&#xff0c…

EBMIDE——IOS语言(二)

前言&#xff1a;为什么需要IOSL&#xff1f; l 要用文件实现业务逻辑的配置&#xff0c;无须重新编译系统。 l 能够很好的适应自身产品体系的集成需求、功能需求。 l 非常灵活&#xff0c;只要有需要复杂逻辑配置的地方&#xff0c;都能够采用该语言体系实现配置。 l 实现…

R语言中基于聚类的离群点挖掘

思路&#xff1a;首先&#xff0c;通过K-means算法将数据点划分为成若K个簇&#xff1b;然后计算每一个数据对象到最近簇的中心距离&#xff0c;来与离群点设置的阈值进行比较&#xff0c;以此来判别该数据对象是否是离群点。 1.读取数据 data<- read.csv(read_file,header …