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

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

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

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




     Mililang标签:   
          <if/check-*>, 判断操作(Conditional (If) Operations) 

     标签规则: [simple-methods.xsd] 新版本还有 [simple-methods-v2.xsd]


    <if>
      <condition><if-compare operator="less" value="" field="" format="" type="String"></if-compare></condition>
      <then><return/></then>
      <else-if>
        <condition><if-compare operator="less" value="" field="" format="" type="String"></if-compare></condition>
        <then><return/></then>
      </else-if>
      <else><return/></else>
    </if>
      <!-- 上述标签组合类似 java:if..else..; if 符合条件 then, elseif 符合条件 then, else; -->
    
    <if-compare operator="less" value="" field="" format="" type="String"></if-compare>
      <!-- field变量的值与 value内容比较 -->
      <if-compare field="containsEmptyFields" operator="equals" value="true"/>
    
    <if-compare-field operator="less" field="" format="" to-field="" type="String"></if-compare-field>
      <!-- field变量的值与 to-field变量的值比较 -->
    <if-compare-field field="newEntity.amount" to-field="originalAmount" operator="not-equals" type="BigDecimal">
        <log level="warning" message="In createFinAccountTrans had to round the amount from [${originalAmount}] to [${newEntity.amount}]"></log>
    </if-compare-field>
    
    <if-empty field=""></if-empty>
      <!-- 如果 field变量空 -->
      <if-empty field="currentOrganizationPartyId"></if-empty>
    
    <if-has-permission permission="" action=""></if-has-permission>
      <!-- 如果当前登录用户有 permission指定模块的 action指定的权限 -->
      <if-has-permission permission="PAY_INFO" action="_CREATE"/>
    
    <if-instance-of class="" field=""></if-instance-of>
      <!-- 如果 field变量是 class指定的java类 的类型 -->
    <if-instance-of field="answers[&quot;${currentFieldName}&quot;]" class="java.nio.ByteBuffer">
        <make-value entity-name="Content" value-field="content"/>
    </if-instance-of>
    
    <if-not-empty field=""></if-not-empty>
      <!-- 如果 field变量不为空 -->
      <if-not-empty field="entityValue"></if-not-empty>
    
    <if-regexp field="" expr=""></if-regexp>
      <!-- 如果 field变量 能匹配 expr 正则表达式  -->
      <if-regexp field="parameters.partyTaxId" expr="${taxAuthority.taxIdFormatPattern}"/>
      <if-regexp expr="text.*" field="persistIn.drMimeTypeId" />
      
    
    <if-validate-method field="" method="" class="org.ofbiz.base.util.UtilValidate"></if-validate-method>
      <!-- 将 field变量传入 class指定的类中的 method指定的方法中校验  -->
      <if-validate-method field="${answerFieldName}" method="isDate"/>
    
    <check-id field="" error-list-name="error_list"><fail-message message=""/></check-id>
      <!-- 获取指定变量中的错误消息: field错误消息 -->
      <check-id field="parameters.fixedAssetId"/>
    
    <check-permission permission="NOTE" action="_${parameters.mainAction}" error-list-name="error_list">
      <!-- 检查权限: permission权限名; action具体权限值; -->
      <!-- 使用check-permission前提条件是当前service 环境中必须存在用户的登陆信息,即能获取到userLogin . 
      service 的调用场景有很多,controller.xml中,screen中,simple method 中,bsh文件中,ftl 文件中,java 文件中,groovy文件中等,
      其中前三项系统会自动将userLogin,locale 等信息自动封装到service context 中去,所以不需要我们手段传值,
      所以我们在其他环境中调用service的时候就需要对需要的隐性参数进行传值,比如fail-property中会用到locale, 
      check-permission会用到userLogin 等,调用举例如下: 
      dispatcher.runSync("TestServiceOnSimple",UtilMisc.toMap("param3","TestServiceOnJava","userLogin",userLogin,"locale",locale)); //java文件中 
       -->
    
      <accept-userlogin-party party-id-env-name="partyId"/>
        <!-- 当前登录用户若无权限, 但操作的数据与当前登录人相关, 则当前登录人也有操作权限, 即校验为true, 如允许用户看到自己的订单,或更新自己的联系人信息。 -->
      
      <alt-permission permission="" action=""/> 
        <!-- 给当前登录用户分配的备用权限, 若<check-permission>权限校验为false, 继续校验此标签配置权限, 若为true, 则权限校验通过; <alt-permission>可以多个 -->
        <!-- check-permission 和 alt-permission 两者的关系是or的关系,即只要两者有一个满足权限要求即可。 -->
      
      <fail-message message=""/>
<!--       <fail-property resource="" property=""/> -->
    </check-permission>
    <check-errors/>
    <!-- <check-permission permission="ACCOUNTING" action="_UPDATE"/> -->
    
    <assert error-list-name="error_list" title="">
      <!-- 断言:在方法或循环中放置断言, 当断言检查失败时,中断方法的执行,向错误消息列表添加错误消息; error-list-name错误信息列表变量名; title断言的消息 -->
      
      <and><if-regexp field="" expr=""></if-regexp></and>
      <not><if-regexp field="" expr=""></if-regexp></not>
      <or><if-regexp field="" expr=""></if-regexp></or>
      <xor><if-regexp field="" expr=""></if-regexp></xor>
        <!-- and/not/or/xor: 并且/非/或者/异或(用于判断数据是否符合条件, 上句是变量是否匹配指定的正则表达式); field变量名; expr正则表达式; -->
    </assert>
    
    <while>
      <condition><if-compare operator="less" value="" field=""></if-compare></condition>
      <then></then>
    </while>
      <!-- while循环: 符合condition中的条件, 则执行 then 中的过程 -->
    <while>
        <condition>
            <and>
                <not><if-empty field="currentOrganizationPartyId"></if-empty></not>
                <if-compare field="containsEmptyFields" operator="equals" value="true"/>
            </and>
        </condition>
        <then>
            <clear-field field="parentPartyRelationship"/>
            <clear-field field="entityKey"/>
            <clear-field field="entityValue"/>
        </then>
    </while>
    

 


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