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

mf1389004071 2014-04-02

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
        Ofbiz超级群(71700661)......上海_香飘飘
        博客: http://ofbizer.iteye.com/
        邮箱: mf1389004071@163.com
        有此标记, 均为原创, 禁止盗用, 转载请注明来源
        技术无上限, 能力有上限, 欢迎参与交流讨论和提出建议
        本文永久地址: http://ofbizer.iteye.com/blog/2040199
 
 
   

Global site tag (gtag.js) - Google Analytics