欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

OFBiz进阶--OFBiz标签之[*Services.xml]-mililang介绍与分析(二)[服务]

程序员文章站 2022-06-17 13:28:51
...

OFBiz进阶--OFBiz标签之
                 [*Services.xml]-mililang介绍与分析(二)




标签 <call-*> , 调用业务处理标签(Call Operations)
     标签规则: [simple-methods.xsd] 新版本还有 [simple-methods-v2.xsd]

<call-map-processor xml-resource="xpp/com/note/SimpleForNoteMain.xml" error-list-name="error_list"
  processor-name="validateNoteMainMap" in-map-name="parameters" out-map-name="context">
  <!-- 调用来自一个既存Map的一个简单map处理器,创建一个新的Map或者如果名称out-map已经存在,添加到一个既存的Map。  -->
  <!-- error-list-name错误消息列表对象名,如果给定的名称不存在,将创建一个新的List。 -->
    <!-- 注意: 在同一个上下文中存在的所有List和Map必须拥有唯一的名称。 -->
  <!-- call-map-processor调用校验Simple方法:  -->
  <!-- xml-resource调用的Simple方法文件所在位置(类似java类路径);  -->
  <!-- processor-name要执行的Simple方法名称;  -->
  <!-- in-map-name传入对象名; out-map-name返回对象名(如果不存在则创建。如果已经存在则覆盖内容。); -->

  <!-- 通过在 call-map-processor 标签下放入一个simple-map-processor标签可以 -->
    <!-- 使用一个内联的 simple-map-processor。如果一个外部和一个内联的map-processor两者都被指定了, -->
    <!-- 外部的将先调用,允许内联的去覆盖它的行为。 -->
  <simple-map-processor name="validateNoteMainMap">
    <!-- 简单的map数据处理 -->
    <make-in-string field="createdDate">
      <!-- 通过字符串变量构建 map<key,value> 值 -->
      <in-field field="createdMonth"/>
        <!-- 传入变量 -->
      <constant>/</constant>
        <!-- 简单连接符 -->
      <in-field field="createdYear"/>
      <property resource="" property=""/>
      <!-- resource资源名称(general/blog/NoteUiLabels); property属性key; -->
    </make-in-string>
      <!-- 从一个日期变量中获取 日期 和 年份, 并放入返回的map中(以/分割); 如(09/2012), 示例如下 -->
    <make-in-string field="expireDate">
   <in-field field="expMonth"/>
   <constant>/</constant>
   <in-field field="expYear"/>
 </make-in-string>

    <process field="noteId">
        <copy replace="true" set-if-null="true" to-field=""/>
            <!-- 复制 process.@field 变量: replace若结果Map中已存在是否覆盖;  -->
            <!-- set-if-null若值为空是否设置; to-field=复制给结果Map.@to-field变量; -->
            <copy to-field="currentPasswordVerify"/>
    </process>
      <!-- 设置变量到结果Map, 从上下文Map中copy给结果Map; -->
      <!-- 注意: 若一个变量在这里没有出现, 则在返回的map中将不存在该变量; 即返回的map中的变量都要在此出现并传递 -->

    <process field="noteName"><copy/><not-empty><fail-property resource="NoteUiLabels"
    property="NoteMainCreateProcessor_NoteName_isMissing"/></not-empty></process>
      <!-- 变量的空验证: 若验证为空, 则调用 resource(国际化配置文件名称) 的配置中  -->
        <!-- property(配置的key值) 指定的配置, 返回本地化错误信息 -->

    <process field="productId"><copy/>
      <compare operator="less" value="" format="" type="String">
        <!-- 比较: operator条件, value比较值, format格式化的格式字符串, type数据类型 -->
     
        <fail-message message=""/>
      </compare>
      <!-- 将当期变量和value比较, 若结果为true, 则复制给结果Map, 否则返回错误消息 -->
     
      <compare-field operator="less" field="" format="" type="String">
        <!-- 比较变量: operator比较操作符; field被比较的变量; format格式化的格式字符串; type数据类型; -->
     
        <fail-message message=""/>
      </compare-field>
      <!-- 当前变量与指定的field变量比较, 若结果为true, 则复制给结果Map, 否则返回错误消息 -->
      <compare-field operator="equals" field="PASSWORD">
        <fail-property resource="PartyUiLabels" property="PartyPasswordMatchError"/>
      </compare-field>
     
      <convert type="PlainString" format="" to-field="" replace="true" set-if-null="true">
        <!-- 变量数据转换: type数据类型; format格式化的格式字符串; to-field格式化完传递给此变量; -->
          <!-- replace若[to-field]变量存在值,是否覆盖; set-if-null转换结果为null,是否赋值给[to-field]; -->
        <fail-message message=""/>
      </convert>
      <convert to-field="createdDate" replace="true" set-if-null="false" type="Timestamp">
        <fail-property resource="ContentUiLabels" property="ContentCreateDateInvalidFormat"/>
      </convert>
     
      <regexp expr=""> <fail-message message=""/> </regexp>
        <!-- 将当前变量与 expr 正则表达式比较; 若结果为false,
        则返回错误消息 如: <regexp value="[a-zA-Z]{2,20}"/> -->
       
      <validate-method method="isDateAfterToday" class="org.ofbiz.base.util.UtilValidate">
        <!-- 调用校验方法, 验证数据; 这里可以写自己的校验静态方法, 这里的验证方法是:
        org.ofbiz.base.util.UtilValidate 类的 isDateAfterToday();  -->
         
        <fail-property resource="NoteUiLabels" property="NoteMainCreateProcessor_createdDate_isNoteAfterToday"/>
      </validate-method>

    </process>
  </simple-map-processor>
</call-map-processor>
   
<set-service-fields service-name="updateCreditCard" map="creditCard" to-map="uccMap" error-list-name="error_list"/>
    <!-- 构建指定服务需要的参数到新Map中: service-name服务名; map待过滤的数据集; to-map服务需要的参数集; error-list-name错误消息列表变量; -->

<call-service service-name="checkPermissionForCreateNoteMain" in-map-name="parameters" include-user-login="true" break-on-error="true">
  <!-- 调用外部服务: service-name服务名称; in-map-name传入服务的map变量名(可选); include-user-login是否携带登录信息; break-on-error当执行出错时当前方法终止执行, 返回错误信息(false则继续执行); -->
   <!-- include-user-login默认地,将包含用户登录(true),因此如果当前简单方法有一个用户登录,将传送它们到服务。  -->
 
 <error-prefix property="" resource=""></error-prefix>
   <!-- 已废弃//错误消息前缀: resource资源名称(general/blog/NoteUiLabels); property属性key; -->
 
 <error-suffix property="" resource=""></error-suffix>
   <!-- 已废弃//错误消息后缀: resource资源名称(general/blog/NoteUiLabels); property属性key; -->
 
 <message-prefix property="" resource=""></message-prefix>
   <!-- 已废弃//消息前缀: resource资源名称(general/blog/NoteUiLabels); property属性key; -->
 
 <message-suffix property="" resource=""></message-suffix>
   <!-- 已废弃//消息后缀: resource资源名称(general/blog/NoteUiLabels); property属性key; -->
 
 <default-message property="" resource=""></default-message>
   <!-- 默认消息: resource资源名称(general/blog/NoteUiLabels); property属性key; -->
   <!-- <default-message resource="AccountingUiLabels" property="AccountingCreditCardCreatedSuccessfully"/> -->
 
 <result-to-field result-name="noteId" field="noteIdTmp"/>
   <!-- 从服务结果的Map中获取值给变量: 获取Map中 result-name 指定的key的值, 赋值给 field 指定的变量; result-name返回Map中指定的key的值; field返回值赋给此变量; -->
       <!-- 注意: 若field没设定, 则 field名 = result-name名, 设定了field, 则使用field指定的变量存储结果值 -->
       <result-to-field result-name="agreementId" field="agreementIdTo"/>
  
 <result-to-request result-name="permission" request-name=""/>
   <!-- 从服务结果的Map中获取值给request: 获取Map中 result-name 指定的key的值, 赋值给 request-name 指定的变量; result-name返回Map中指定的key的值; field返回值赋给此变量; -->
   <result-to-request result-name="paymentMethodId" request-name="paymentMethodId"/>
 
 <result-to-result result-name="" service-result-name=""/>
   <!-- 从服务结果的Map中获取值给结果Map: 获取Map中 result-name 指定的key的值, 赋值给 field 指定的变量; result-name返回Map中指定的key的值; field返回值赋给此变量; -->
   <result-to-result result-name="contentRevisionSeqId" service-result-name="rootContentRevisionSeqId"/>
  
 <result-to-session result-name="" session-name=""/>
   <!-- 从服务结果的Map中获取值给session: 获取Map中 result-name 指定的key的值, 赋值给 field 指定的变量; result-name返回Map中指定的key的值; field返回值赋给此变量; -->
   <result-to-session result-name="categories" session-name="categoriesField"/>
 
 <results-to-map map-name=""/>
   <!-- 将服务返回结果给 map-name 指定的变量 -->
    <results-to-map map-name="serviceResult"/>
 
</call-service>
   
<call-service-asynch service-name="checkPermissionForCreateNoteMain" in-map-name="parameters" include-user-login="true" />
  <!-- 调用外部服务: 异步地调用一个服务并忽略结果,因此没有使用返回信息。但它们都有系统错误信息。 -->
<!-- call-service-asynch  example start -->
<set-service-fields service-name="sendMailFromScreen" map="parameters" to-map="emailParams"/>
<set field="emailParams.xslfoAttachScreenLocation" value="component://accounting/widget/AccountingPrintScreens.xml#InvoicePDF"/>
<set field="emailParams.bodyParameters.invoiceId" from-field="parameters.invoiceId"/>
<set field="emailParams.bodyParameters.userLogin" from-field="parameters.userLogin"/>
<set field="emailParams.bodyParameters.other" from-field="parameters.other"/><!-- to to print in 'other currency' -->
<call-service-asynch service-name="sendMailFromScreen" in-map-name="emailParams"/>
<property-to-field resource="AccountingUiLabels" property="AccountingEmailScheduledToSend" field="successMessage"/>
<!-- call-service-asynch  example end -->

<script location="" error-list-name="error_list"></script><!-- 执行script脚本(location指向具体路径); 接收返回的错误; -->
<script location="component://bi/webapp/bi/WEB-INF/actions/reportbuilder/GetStarSchemas.groovy"/>

<call-bsh error-list-name="error_list" resource="">
    <!-- 使用脚本块(groovy支持): 脚本用到的一些变量在 <simple-method>.@attribute 已经定义好; error-list-name错误消息列表变量; resource资源标识(general/blog/NoteUiLabels); -->
  <![CDATA[
    java.sql.Timestamp createdDate = context.createdDate;
    java.util.Calendar cal = java.util.Calendar.getInstance();
    cal.setTimeInMillis(createdDate.getTime());
    cal.add(java.util.Calendar.DAY_OF_YEAR, daysToShip.intValue());
    return org.ofbiz.base.util.UtilMisc.toMap("createdDate",new java.sql.Timestamp(cal.getTimeInMillis()));
  ]]>
  <!-- 脚本执行内容的标签体 <![CDATA[ bsh ]]> -->
</call-bsh>
<check-errors/>

<call-simple-method method-name="validateNoteMainMap" xml-resource=""/>
  <!-- 调用Simple方法的写法: method-name方法名称, -->
    <!-- 若 xml-resource 属性不设置, 则这里用到的方法, 必须是当前文件内的; -->
    <call-simple-method method-name="genericBasePermissionCheck"
            xml-resource="component://common/script/org/ofbiz/common/permission/CommonPermissionServices.xml"/>

 


==================================关于本文===================================
 
        作者: mf1389004071
        ......上海_香飘飘
        博客: http://ofbizer.iteye.com/
        邮箱: mf1389004071@163.com
        有此标记, 均为原创, 禁止盗用, 转载请注明来源
        技术无上限, 能力有上限, 欢迎参与交流讨论和提出建议
        本文永久地址: http://ofbizer.iteye.com/blog/2038441