EBMIDE——服务脚本IOS

news/2024/7/20 20:26:13 标签: 脚本, xml, ios, 服务器, file, 工作

前言

之前,想到这样一个情景,用一个脚本来描述一个服务的操作,这样做的好处是,业务逻辑落到了配置文件。业务变化时只需通过修改配置,而不需要重新编译系统。

最近几天,由于工作需要,转到了服务器的研发,刚好碰上这一应用场合,终于有机会完成这一脚本的设计。

 

IOS简介

IOSIn/Out Script(输入/输出脚本)的简称,在我的设计中,用inoutscript3个节点来描述一个服务调用。

 

设计目标

采用XML作为服务的描述语言,因为目前XML解析的库已非常完善,采用XML能够省去大量的语法解析工作

一个服务对外界的元素是输入参数和输出参数,所以定义了InOut两个节点分别描述;

一个服务应该包含多个操作,这些操作有先后关系,赋值关系;

服务的多个操作应该支持顺序,分支,循环3个基本的执行方式;

服务执行过程中会产生临时变量,要支持临时变量的存放;

必须保证服务的多个操作的事务性;

服务的内部错误处理。

 

服务脚本节点定义

set节点

定义输入/输出参数:name参数名称

io节点

定义Invoke/Out操作:i执行脚本o输出变量

if/elseif/else节点

定义条件执行节点:i执行判断脚本

foreach节点

定义循环遍历执行节点:i获取父项脚本o输出子项变量

throwerror节点

定义引发异常节点:i获取异常信息脚本

error节点

定义错误处理节点

 

 

完整的服务脚本

<servicename="">------【服务节点】name:服务名称

   <in>------【输入参数】

     <setname=""/>

   </in>

   <out>------【输出参数】

     <setname=""/>

   </out>

   <scriptt="false">------【服务脚本ttransaction事务控制

     <ioi=""o=""/>

     <ioi=""o=""/>

     <ifi="">

       <ioi=""o=""/>------if结果为true时执行

       <ioi=""o=""/>

       <elseifi="">

         <ioi=""o=""/>------elseif结果为true时执行

         <ioi=""o=""/>

       </elseif>

       <else>

         <ioi=""o=""/>------if/elseif所有结果为false时执行

         <ioi=""o=""/>

       </else>

     </if>

     <foreachi=""o="">

       <ioi=""o=""/>------i值必须是可遍历的数据类型,o值是遍历时的子项

       <ioi=""o=""/>

     </foreach>

     <throwerrori=""/>------引发异常能控制事务回滚

     <error>

       <ioi=""o=""/>

       <ioi=""o=""/>

     </error>

   </script>

 </service>

 

服务脚本引擎

用来解析执行服务脚本,是服务器的一个子模块。

 

服务脚本例子

例子1:创建实体对象服务

<servicename="NewEntity">

 <in>

   <setname="Type"/>

 </in>

 <out>

   <setname="New"/>

 </out>

 <scriptt="true">

   <ioi="CreateEntity(@Type)"o="New"/>

   <ioi="CreateDTS()"o="New.DTS"/>

   <ioi="InsertEntity(@New)"o="P1"/>

   <ifi="!@P1">

     <ioi="Null()"o="New"/>

   </if>

   <error>

     <ioi="Error()"o="New"/>

   </error>

 </script>

</service>

例子2:带文件操作和数据库操作,并且有事务控制的例子

<servicename="CreateSheet">

 <in>

   <setname="Template"type="string"/>

   <setname="Items"type="manifest"/>

 </in>

 <out>

   <setname="DTS"/>

   <setname="Error"/>

 </out>

 <scriptt="true">

   <!--创建文件映射?-->

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

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

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

   <ioi="@File.DTS"o="File.Name"/>

   <ioi="'.fxl'"o="File.Ext"/>

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

   <ioi="ToFullPath(Concat(@File.Folder,'/',@File.Name,@File.Ext), @File.Driver)" o="SavePath"/>

   <!--创建文件-->

   <ioi="ToFullPath(@Template)"o="Path"/>

   <ioi="LoadSheet(@Path)"o="Sheet"/>

   <ioi="FillSheet(@Sheet, @Items)"o="Sheet"/>

   <ioi="InvokeSheet(@Sheet)"o="Sheet"/>

   <!--写文件-->

   <ioi="WriteText(@SavePath, @Sheet)"o="Success"/>

   <!--入库-->

   <ioi="InsertEntity(@File)"o="Success"/>

   <ifi="!@Success">

     <throwerrori="'䨪¨®êoInsertEntity(@File)'"/>

   </if>

   <!--

   <throwerror i="'事务回滚测试'"/>

   -->

   <ioi="@File.DTS"o="DTS"/>

   <error>

     <ioi=""o="DTS"/>

     <ioi="Error()"o="Error"/>

   </error>

 </script>

</service>

 

 

相关文章

EBM专栏

 


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

相关文章

EBMIDE——服务调用

前言 EBMIDE——服务脚本IOS 前篇文章介绍了服务脚本的定义&#xff0c;下面介绍如何进行服务的调用。 服务已经定义了所需要的输入参数in和输出参数out&#xff0c;服务调用则需要向服务传输正确的输入数据&#xff0c;服务调用完成后以相同的数据格式返回输出。 服务调用数…

**wechat系统线程监控方案(后台定时监控脚本部署)

2019独角兽企业重金招聘Python工程师标准>>> 在做系统的时候&#xff0c;某些重要的业务点可能是单独部署&#xff0c;因为服务器宕机、程序代码出错或者数据错误的原因可能会导致某个业务功能很长一段时间无法正常执行。此时&#xff0c;我们便需要对这些业务点功能…

EBMIDE——表单、报表模板设计

Fixcel已经集成到了EBMIDE&#xff0c;利用Fixcel能够轻松设计出业务所需要的各种表单模板和报表模板。 相关文章 EBM专栏

EBMIDE——相关文章索引

EBMIDE主项目 EBMIDE——序 EBMIDE——服务脚本IOS EBMIDE——服务调用 EBMIDE——表单、报表模板设计 EBMIDE——服务脚本IOS编辑器 EBMIDE——ORM数据实体编辑器 EBMIDE——服务脚本IOS(二) EBMIDE——服务脚本IOS编辑器(二) EBMIDE——服务脚本IOS(三)&#xff1a;…

LoadXml载入Xhtml文件速度很慢

如果有如下的Xhtml文字&#xff0c;在.Net中用XmlDocument.LoadXml载入的时候&#xff0c;速度很慢。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns"http:/…

EBMIDE——服务脚本IOS编辑器

新增了服务脚本IOS的编辑器&#xff0c;能够创建并编辑服务脚本。 支持代码高亮显示&#xff0c;右键菜单创建脚本节点&#xff0c;编辑表达式… 相关文章 EBM专栏

文件上传下载过程中中文名称问题

//上传--// 1 保存数据到excel&#xff0c;对应的sheet头header,body数据类型list//2 上传文件到服务器中//下载--// 1 获取文件路径//2 导出数据到保持的路径&#xff08;或者是浏览器路径&#xff09;/*** 保存数据到excel* param listBody* param sheetName*/public void sa…

EBMIDE——ORM数据实体编辑器

利用Fixcel的表单引擎&#xff0c;能够轻易地实现各种配置文件的编辑&#xff0c;例如ORM引擎的数据实体映射编辑&#xff0c;这比人手编辑配置xml要方便的多。 以下是Fixcel里定义的数据实体表单模板 相关文章 EBM专栏