[OFBiz技术讨论] OFBiz进阶--OFBiz标签之[*Services.xml]-mililang介绍与分析(二)[服务<call-*>]

mf1389004071 2014-03-30

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

 
 
   

Global site tag (gtag.js) - Google Analytics