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

OFBiz进阶--OFBiz标签之[*Services.xml]-mililang介绍与分析(四)[<*find|entity|related|store|r]

程序员文章站 2022-06-17 13:35:19
...

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




     Mililang标签:  
          <*find|entity|related|store|remove*>, 实体操作(Entity Engine Operations)

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

    <now-date-to-env field=""/><!-- 使用系统当前时间创建一个 java.sql.Date 类型的日期 -->
    <now-date-to-env field="nowDate"/>
    
    <now-timestamp field=""/><!-- 使用系统当前时间创建一个 java.sql.Timestamp 类型的日期时间 -->
    <now-timestamp field="nowTimestamp"/>
    
    <sequenced-id sequence-name="" field="" stagger-max="" get-long-only="false"/>
      <!-- 获取sequenced-id: 序列号生成的字段名; field传入指定变量; stagger-max序列号的最大值; get-long-only仅返回 java.lang.Long 类型值 -->
      <sequenced-id sequence-name="FinAccount" field="finAccountId"/>
      <sequenced-id sequence-name="FinAccountTrans" field="newEntity.finAccountTransId"/>
    
    <make-next-seq-id seq-field-name="" value-field="" increment-by="1" numeric-padding="5"/>
      <!-- 创建第二序列ID: seq-field-name主键序列的字段名; value-field结果变量名; increment-by步进值; numeric-padding数据值宽度(5=00001); -->
      <make-next-seq-id value-field="newEntity" seq-field-name="acctgTransEntrySeqId" numeric-padding="5"/>
    
    <entity-data location="" delegator-name="" mode="load" timeout="-1" error-list-name="error_list"/>
      <!-- 通过指定路径加载实体数据: location执行文件路径; delegator-name默认委托者; mode载入方式(load负载/assert断言); timeout超时限制(-1标识不限制); error-list-name错误消息集合名; -->
    
<!-- ================ -->
    <find-by-and list="" map="" entity-name="" order-by-list="" delegator-name="" use-cache="false" use-iterator="false"/>
      <!-- 此标签类似与delegator.findByAnd(); list结果集; map传入map条件; entity-name实体名; order-by-list字段排序; 
        delegator-name委托者变量; use-cache不使用缓存; use-iterator不返回迭代器; -->
        <find-by-and entity-name="InventoryItem" map="lookupFieldMap" list="secondaryInventoryItemList" order-by-list="orderByList"/>
    
    <find-by-primary-key value-field="" map="" delegator-name="" entity-name="" fields-to-select-list="" use-cache="false"/>
      <!-- 此标签类似与delegator.findByPrimaryKey(); value-field返回对象; map传入map条件; delegator-name委托者变量; entity-name表名; 
        fields-to-select-list指定返回字段的集合; use-cache不使用缓存; -->
        <find-by-primary-key entity-name="Invoice" map="lookupPKMap" value-field="invoiceValue"/>
    
    <entity-and list="noteMainStatus" entity-name="NoteMainStatus" filter-by-date="false" use-cache="false">
       <!-- 按条件获取list结果集: list结果集名称; entity-name实体名; filter-by-date启动按时间过滤(数据过期问题验证的开关;); result-set-type结果集类型(forward/scroll); use-cache不缓存; -->
          
       <field-map field-name="noteStatusCode" value="DEFAULT_NOTE" from-field=""/>
       <select-field field-name="noteStatusCode"/>
       <order-by field-name="noteStatusCode"/>
       <limit-range size="3" start="0"/>
<!--        <limit-view view-size="" view-index=""/> -->
<!--        <use-iterator/> -->
            <!-- use-iterator这个标签如果设置了, 则输出一个 iterator迭代器(org.ofbiz.entity.util.EntityListIterator), 默认没有输出的是 list(java.util.List) -->
      <!-- 上述各个子标签参数详见下面标签 entity-condition 的解析 -->
    </entity-and>
    <entity-and entity-name="FinAccountStatus" list="oldFinAccountStatusList">
        <field-map field-name="finAccountId" from-field="parameters.finAccountId"/>
        <order-by field-name="-statusDate"/>
    </entity-and>
    
    <entity-condition list="typeList" entity-name="NoteMainType" delegator-name="" distinct="true" filter-by-date="false" use-cache="false">
      <!-- 按条件获取实体: list获取到的结果list集合名称; entity-name被获取的表名; delegator-name代理器名称(默认是default); distinct区分不同; filter-by-date启动按时间过滤(数据过期问题验证的开关;); result-set-type结果集类型(forward/scroll); use-cache不缓存; -->
        <!-- result-set-type结果集类型(forward/scroll) -->
        <!-- filter-by-date, 指定查询必须过滤掉这些当前不激活的记录。不激活的记录的字段fromDate和thruDate(两个日期-时间类型的字段),不包含当前时间。
          .好的(知道更远注意力)非过期一条记录的正确方法是设置thruDate自动为null(在电脑术语中,这表示“空”或者“没有值“)。 -->
        <!-- 属性filter-by-date即为对记录表数据时间有效性的过滤,使用前提是当前实体必须有fromDate 和 thruDate这两个字段,且不能使用缓存进行查询 ,
        即use-cache="false",转化成sql 表示为 ((thruDate IS NULL OR thruDate > '当前时间') AND (fromDate IS NULL OR fromDate <= '当前时间'))  -->
        <!-- entity-condition当使用缓存进行查询时,不能使用distinct、having-condition-list、select-field。entity-condition查询限制条件最外层必须
        为condition-list、condition-expr、condition-object中的一个,三者不能两两并存。entity-condition的几个子节点配置先后顺序分别为:
        [condition-list、condition-expr、condition-object]三者中的一个、[having-condition-list]、[select-field],[order-by]、
        [use-iterator、limit-view、limit-range]三者中的一个。 -->
      
      <condition-list combine="and">
        <!-- 多个过滤条件的集合; 过滤方式(and/or) -->
      
        <condition-expr field-name="parentTypeId" operator="equals" value="NOTEDEFAULT" ignore="false" ignore-case="false" ignore-if-empty="false" ignore-if-null="false"/>
          <!-- 过滤条件: field-name表字段名称; operator比较方式; from-field比较值的来源; value指定值; ignore不忽略当前过滤条件; ignore-case区分大小写; ignore-if-empty不忽略空对象; ignore-if-null不忽略空 -->
            <!-- operator比较方式(less/greater/less-equals/greater-equals/equals/not-equals/in/not-in/between/like) -->
        
<!--         <condition-object field=""/> -->
          <!-- 对象过滤 -->
        
      </condition-list>
      
<!--       <having-condition-list> -->
        <!-- 字段的 合计函 数过滤集合(下面配置有错, 结果如:HAVING SUM(OrderPrice)<2000) -->
            <!-- having-condition-list一般用于带有group-by 查询的视图实体查询,首先对根据condition-list查询条件进行查询,然后再根据having-condition-list查询条件进行限制查询。 -->
        
<!--         <condition-expr field-name="parentTypeId" operator="equals" value="NOTEDEFAULT" ignore="false" ignore-case="false" ignore-if-empty="false" ignore-if-null="false"/> -->
<!--       </having-condition-list> -->
      
      <select-field field-name="noteTypeId"/>
        <!-- 指定返回表中的指定字段名的数据 -->
        <!-- 属性distinct很好理解,剔除重复数据。需要注意的是如果配合select-field 共同使用的时候,
        判断重复的条件是判断select-field 需要显示字段是否重复,而不是判断当前实体所有的字段,即SQL 执行顺序是 先select-field 再distinct。  -->
      
      <order-by field-name="noteTypeId"/>
        <!-- order-by按指定字段排序; field-name字段名称;  -->
        
      <limit-range size="3" start="0"/>
        <!--限制查询范围: size结果集条数限制(非负整数); start结果集起始页设置(非负整数); -->
        
<!--       <limit-view view-size="" view-index=""/> -->
        <!-- 结果限制: view-size结果集条数限制(非负整数); view-index结果集起始页设置(非负整数), 默认写 1; -->
        
<!--       <use-iterator/> -->
        <!-- 使用迭代器 -->
    </entity-condition>
    <entity-condition entity-name="FinAccountAuth" list="finAccountAuthList" filter-by-date="true">
        <condition-expr field-name="finAccountId" from-field="finAccountId"/>
    </entity-condition>
    
    <entity-count count-field="" entity-name="" delegator-name="default">
      <!-- 实体个数统计: count-field统计的结果输出到此变量; entity-name表名; delegator-name默认委托者 -->
      
      <condition-list>
        <condition-expr field-name=""/>
        <condition-object field=""/><!-- 过滤条件中的: 对象变量(entity-condition创建的), 这里的 obj 一般是 groovy构建的 EntityCondition 对象 -->
      </condition-list>
      <having-condition-list>
        <condition-expr field-name=""/>
        <condition-object field=""/>
      </having-condition-list>
    </entity-count>
    <entity-count count-field="noEftAccounts9000After" entity-name="EftAccount">
        <condition-expr field-name="contactMechId" value="9000"/>
    </entity-count>
    
    <entity-one entity-name="NoteMain" value-field="noteId" auto-field-map="true" use-cache="false">
      <!-- GenericValue lookedUpValue = delegator.findByPrimaryKey("NoteMain", UtilMisc.toMap("noteId", noteId)); -->
      <!-- 通过一定的变量获取单个实体: entity-name实体表名; value-field输出到此变量; auto-field-map自动封装为map; use-cache不使用缓存; -->
      
      <field-map field-name="" from-field="" value=""/><!-- 传入条件变量: field-name变量名; from-field变量来源变量; value变量值; -->
      <select-field field-name=""/><!-- 可选输出哪些字段 -->
    </entity-one>
    <entity-one entity-name="Agreement" value-field="agreement" auto-field-map="true"/>
    
    <get-related relation-name="" list="" value-field="" map="" order-by-list="" use-cache="false"/>
      <!-- 此标签类似与delegator.getRelated(); relation-name关系名; list关系名得到的结果集; value-field获取一个关系变量; 
        map传入map条件; order-by-list排序字段; use-cache不缓存; -->
        <get-related value-field="agreement" relation-name="AgreementTerm" list="agreementTerms"/>
    
    <get-related-one relation-name="" to-value-field="" value-field="" use-cache="false"/>
      <!-- 此标签类似与delegator.getRelatedOne(); relation-name关系名; to-value-field结果变量; value-field获取一个关系变量; use-cache不缓存; -->
      <get-related-one relation-name="Payment" value-field="finAccountTrans" to-value-field="payment"/>
    
    <order-value-list order-by-list="" list="" to-list=""/><!-- 将一个list集合按照 排序list中的字段排序, 将排序后的集合给 to-list变量; -->
    <order-value-list list="facilityLocationList" order-by-list="facilityLocsOrdLst"/>
    
    <filter-list-by-and list="" map="" to-list=""/><!-- 按指定变量过滤list集合: list将要过滤的集合名; map过滤条件变量; to-list过滤后的集合名; -->
    
    <filter-list-by-date list="" all-same="true" to-list="" valid-date="" from-field-name="fromDate" thru-field-name="thruDate"/>
      <!-- 按日期条件过滤list集合: list被过滤的集合名; all-same集合中变量类型是否相同; to-list过滤后的集合名; valid-date校验时间变量; 
        from-field-name开始时间变量; thru-field-name结束时间变量; -->
        <filter-list-by-and list="acctgTransEntryList" map="productFilter" to-list="acctgTransEntryList"/>
    
    
    <!-- ================== -->
    <make-value value-field="newEntity" entity-name="NoteMain" map=""/>
      <!-- make-valu创建变量: value-name创建的表对象变量名; entity-name表名; -->
      <make-value value-field="newEntity" entity-name="Agreement"/>
    
    <clone-value new-value-field="" value-field=""/> <!-- 将 value-field 变量的内容 复制到 new-value-field 指定的变量中; -->
    <clone-value value-field="lookedUpValue" new-value-field="newLookedUpValue"/>
    
    <create-value value-field="newEntity" do-cache-clear="true" or-store="false"/>
      <!-- 表数据创建操作: value-field表对象变量; do-cache-clear执行缓存清理; or-store创建或更新开关(false则只创建, 不更新); -->
      <create-value value-field="newEntity"/>
    
    <store-list list="" do-cache-clear="true"/><!-- 更新list集合中的数据到数据库中: list集合; do-cache-clear清理缓存; -->
    <store-list list="uomConversions"/>
    
    <refresh-value value-field="" do-cache-clear="true"/>
      <!-- 刷新变量: value-field刷新此变量; do-cache-clear清理缓存; -->
      <refresh-value value-field="returnItem"/>
    
    <remove-by-and map="" entity-name="" do-cache-clear="true"/>
      <!-- 此标签类似与delegator.removeByAnd(); map传入map条件; entity-name实体名; do-cache-clear清理缓存; -->
      <remove-by-and entity-name="PaymentApplication" map="paymentApplicationMap"/>
    
    <remove-list list="" do-cache-clear="true"/>
      <!-- 此标签类似与delegator.removeAll(); list将要被remove的集合; do-cache-clear清理缓存; -->
      <remove-list list="quoteTermList"/>
    
    <remove-related relation-name="" value-field="" do-cache-clear="true"/>
      <!-- 此标签类似与delegator.removeByRelated(); relation-name关系名; value-field被移除的变量; do-cache-clear清理缓存; -->
      <remove-related relation-name="PartyNote" value-field="noteData"/>
    
    <remove-value value-field="" do-cache-clear="true"/>
      <!-- 从相应表中删除此 value-field 指定的对象; do-cache-clear清理缓存; -->
      <remove-value value-field="agreementItem"/>
    
    <clear-cache-line entity-name="" map=""/> <!-- 将当前 map变量指定的数据从 entity-name 表所在的系统缓存中清理掉  -->
    
    <clear-entity-caches/> <!-- 它将清除所有实体引擎缓存中的所有行。它没有属性或子元素。 -->
    
    <set-nonpk-fields map="context" value-field="newEntity" set-if-null="true"/>
      <!-- set-nonpk-fields将表的非主键信息封装: map-name传入表对象变量的map; value-name表对象变量; -->
      <set-nonpk-fields map="parameters" value-field="newEntity"/>
    
    <set-pk-fields map="context" value-field="newEntity" set-if-null="true"/>
      <!-- set-pk-fields将表主键信息封装: map-name传入表对象变量的map; value-name表对象变量; -->
      <set-pk-fields map="parameters" value-field="newEntity"/>
    

 



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