EBMIDE——服务脚本IOS(二)

服务的嵌套调用

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

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

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

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

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

服务嵌套调用定义

<!--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>

相关文章

EBMIDE——相关文章索引

你可能感兴趣的:(ios)