`

ofbiz之entity实体写法

 
阅读更多
  1. 实体定义文件 
    实体定义文件一般存放位置是在对应模块的entity文件夹下面,以party为例,party的实体定义文件路径为
    %ofbiz-home%\applications\party\entitydef\entitymodel.xml。 
    通过对应模块的ofbiz-component.xml进行加载。 
    [html] view plaincopy
     
    1. <entity-resource type="model" reader-name="main" loader="main" location="entitydef/entitymodel.xml"/>   
    2. <entity-resource type="model" reader-name="main" loader="main" location="entitydef/entitymodel_old.xml"/>   
  2. 实体类型
    • 普通实体 
      [html] view plaincopy
       
      1. <entity entity-name="TenantDataSource" package-name="org.ofbiz.entity.tenant">   
      2.         <description>   
      3.             There should be one record for each tenant and each group-map for the active delegator.   
      4.             The jdbc fields will override the datasource -> inline-jdbc values for the per-tenant delegator.   
      5.         </description>   
      6.         <field name="tenantId" type="id-ne"/>   
      7.         <field name="entityGroupName" type="name"/>   
      8.         <field name="jdbcUri" type="long-varchar"/>   
      9.         <field name="jdbcUsername" type="long-varchar"/>   
      10.         <field name="jdbcPassword" type="long-varchar"></field>   
      11.           
      12.     <prim-key field="tenantId"/>   
      13.     <prim-key field="entityGroupName"/>   
      14.           
      15.     <relation type="one" fk-name="TNTDTSRC_TNT" rel-entity-name="Tenant">   
      16.             <key-map field-name="tenantId"/>   
      17.     </relation>   
      18. </entity>   
      普通实体和数据库中的表是一一对应的。程序会根据实体定义在数据库中创建表,索引,外键约束等。 

    • 视图实体 
      [html] view plaincopy
       
      1. <view-entity entity-name="WorkEffortAssocView"   
      2.             package-name="org.ofbiz.workeffort.workeffort"   
      3.             title="Work Effort Association Entity with Name">   
      4.     <member-entity entity-alias="WA" entity-name="WorkEffortAssoc"/>   
      5.     <member-entity entity-alias="WETO" entity-name="WorkEffort"/>   
      6.         
      7.     <alias-all entity-alias="WA"/>   
      8.     <alias entity-alias="WETO" name="workEffortToName" field="workEffortName"/>   
      9.     <alias entity-alias="WETO" name="workEffortToSetup" field="estimatedSetupMillis"/>   
      10.     <alias entity-alias="WETO" name="workEffortToRun" field="estimatedMilliSeconds"/>   
      11.     <alias entity-alias="WETO" name="workEffortToParentId" field="workEffortParentId"/>   
      12.     <alias entity-alias="WETO" name="workEffortToCurrentStatusId" field="currentStatusId"/>   
      13.     <alias entity-alias="WETO" name="workEffortToWorkEffortPurposeTypeId" field="workEffortPurposeTypeId"/>   
      14.     <alias entity-alias="WETO" name="workEffortToEstimatedStartDate" field="estimatedStartDate"/>   
      15.     <alias entity-alias="WETO" name="workEffortToEstimatedCompletionDate" field="estimatedCompletionDate"/>   
      16.     <alias entity-alias="WETO" name="workEffortToActualStartDate" field="actualStartDate"/>   
      17.     <alias entity-alias="WETO" name="workEffortToActualCompletionDate" field="actualCompletionDate"/>   
      18.           
      19.     <view-link entity-alias="WA" rel-entity-alias="WETO">   
      20.             <key-map field-name="workEffortIdTo" rel-field-name="workEffortId"/>   
      21.     </view-link>   
      22.         
      23.     <relation type="one-nofk" fk-name="WK_EFFRTASSV_FWE" title="From" rel-entity-name="WorkEffort">   
      24.             <key-map field-name="workEffortIdFrom" rel-field-name="workEffortId"/>   
      25.     </relation>   
      26. </view-entity>  

      [html] view plaincopy
       
      1. <view-entity entity-name="FaultTransSumView" package-name="com.sunyard.cpsp.fault">  
      2.         <description>业务差错统计视图</description>  
      3.         <member-entity entity-alias="FT" entity-name="FaultTrans"></member-entity>  
      4.         <alias entity-alias="FT" name="faultTypeId"  group-by="true"></alias>  
      5.         <alias entity-alias="FT" name="createdDate"  group-by="true"></alias>  
      6.         <alias entity-alias="FT" name="cpspMsgId" col-alias="count" function="count"></alias>  
      7. </view-entity>  

      [html] view plaincopy
       
      1. <datasource name="localmysql"  
      2.             helper-class="org.ofbiz.entity.datasource.GenericHelperDAO"  
      3.             field-type-name="mysql"  
      4.             check-on-start="true"  
      5.             add-missing-on-start="true"  
      6.             check-pks-on-start="false"  
      7.             use-foreign-keys="true"  
      8.             join-style="ansi-no-parenthesis"  
      9.             alias-view-columns="false" //如果使用上面的复合函数类型(红色背景标记)  此处需要改为alias-view-columns="true"  切记!  
      10.             drop-fk-use-foreign-key-keyword="true"  
      11.             table-type="InnoDB"  
      12.             character-set="utf8"  
      13.             collate="utf8_general_ci">  
      14.         <read-data reader-name="seed"/>  
      15.         <read-data reader-name="seed-initial"/>  
      16.         <read-data reader-name="demo"/>  
      17.         <read-data reader-name="ext"/>  
      18.         <read-data reader-name="ext-test"/>  
      19.         <read-data reader-name="ext-demo"/>  
      20.         <inline-jdbc  
      21.                 jdbc-driver="com.mysql.jdbc.Driver"  
      22.                 jdbc-uri="jdbc:mysql://localhost/app_center?autoReconnect=true&characterEncoding=UTF-8"  
      23.                 jdbc-username="root"  
      24.                 jdbc-password="root"  
      25.                 isolation-level="ReadCommitted"  
      26.                 pool-minsize="2"  
      27.                 pool-maxsize="250"  
      28.                 time-between-eviction-runs-millis="600000"/>  
      29.     <!-- Please note that at least one person has experienced a problem with this value with MySQL  
      30.                 and had to set it to -1 in order to avoid this issue.  
      31.                 For more look at http://markmail.org/thread/5sivpykv7xkl66px and http://commons.apache.org/dbcp/configuration.html-->  
      32.     <!-- <jndi-jdbc jndi-server-name="localjndi" jndi-name="java:/MySqlDataSource" isolation-level="Serializable"/> -->  
      33. </datasource>  
      view entity 一般用做多表连接复杂查询,view entity 不会在数据库中反映出来。

    • 扩展实体
      [html] view plaincopy
       
      1. <extend-entity entity-name="UserLogin">   
      2.         <field name="partyId" type="id"></field>   
      3.         <relation type="one" fk-name="USER_PARTY" rel-entity-name="Party">   
      4.             <key-map field-name="partyId"/>   
      5.         </relation>   
      6.         <relation type="one-nofk" rel-entity-name="Person">   
      7.             <key-map field-name="partyId"/>   
      8.         </relation>   
      9.         <relation type="one-nofk" rel-entity-name="PartyGroup">   
      10.             <key-map field-name="partyId"/>   
      11.         </relation>   
      12. </extend-entity>   
      继承已存在的实体并对其进行扩展。

    • 动态实体 
      [java] view plaincopy
       
      1. DynamicViewEntity salesUsageViewEntity = new DynamicViewEntity();   
      2. salesUsageViewEntity.addMemberEntity("OI""OrderItem");   
      3. salesUsageViewEntity.addMemberEntity("OH""OrderHeader");   
      4. salesUsageViewEntity.addMemberEntity("ItIss""ItemIssuance");   
      5. salesUsageViewEntity.addMemberEntity("InvIt""InventoryItem");   
      6. salesUsageViewEntity.addViewLink("OI""OH", Boolean.valueOf(false), ModelKeyMap.makeKeyMapList("orderId"));   
      7. salesUsageViewEntity.addViewLink("OI""ItIss", Boolean.valueOf(false), ModelKeyMap.makeKeyMapList("orderId""orderId""orderItemSeqId""orderItemSeqId"));   
      8. salesUsageViewEntity.addViewLink("ItIss""InvIt", Boolean.valueOf(false), ModelKeyMap.makeKeyMapList("inventoryItemId"));   
      9.   
      10. salesUsageViewEntity.addAlias("OI""productId");   
      11. salesUsageViewEntity.addAlias("OH""statusId");   
      12. salesUsageViewEntity.addAlias("OH""orderTypeId");   
      13. salesUsageViewEntity.addAlias("OH""orderDate");   
      14. salesUsageViewEntity.addAlias("ItIss""inventoryItemId");   
      15. salesUsageViewEntity.addAlias("ItIss""quantity");   
      16. salesUsageViewEntity.addAlias("InvIt""facilityId");   
      17.   
      18. EntityListIterator salesUsageIt = delegator.findListIteratorByCondition(  
      19.     salesUsageViewEntity,   
      20.     EntityCondition.makeCondition(   
      21.         UtilMisc.toList(   
      22.                 EntityCondition.makeCondition("facilityId", EntityOperator.EQUALS, facilityId),   
      23.                 EntityCondition.makeCondition("productId", EntityOperator.EQUALS, productId),   
      24.                     EntityCondition.makeCondition("statusId", EntityOperator.IN,   
      25.                 UtilMisc.toList("ORDER_COMPLETED""ORDER_APPROVED""ORDER_HELD")),   
      26.                 EntityCondition.makeCondition("orderTypeId", EntityOperator.EQUALS, "SALES_ORDER"),   
      27.                 EntityCondition.makeCondition("orderDate", EntityOperator.GREATER_THAN_EQUAL_TO, checkTime)   
      28.         ),   
      29.         EntityOperator.AND),  
      30.     null,   
      31.     null,   
      32.     null,   
      33.     null   
      34. );   
      在程序中手动创建实体,对其进行查询。

  3. 实体定义 
    • 命名规则 
      实体名称(entity-name)首字母大写,如果实体名称由多个关键字组成,那么关键字首字母大写,例如entity-name="TenantDataSource",ofbiz 会在创建数据库表的时候根据entity-name 实体名称除首字母之外的大写字母前加“_”,所以entity-name="TenantDataSource"生成的数据库表名为 “Tenant_Data_Source”. 
      所以要控制entity-name 实体名称不要超过25个字母。 
      Field 表字段,命名规则与实体名称差不多,唯一不同的是首字母小写。 

    • 实体与数据库的关联 
      [html] view plaincopy
       
      1. <entity-group group="org.ofbiz.olap" entity="SalesInvoiceItemFact"/>   
      2. <entity-group group="org.ofbiz.olap" entity="SalesInvoiceItemStarSchema"/>   
      Entity-group(一般定义在各个模块的\entitydef\entitygroupXXX.xml中) 对实体进行分组,使不同的实体分属不同的entity-group。 
      也许你会发现并不是每个entity都进行了entity-group 分组。事实上如果你没有对实体进行分组归类的话,系统启动的时候他会将实体默认归类到"org.ofbiz"中。 
      查看数据库定义文件%ofbiz_home%/framework/entity/config/entityengine.xml 
      可以发现: 
      [html] view plaincopy
       
      1. <delegator name="default"   
      2.            entity-model-reader="main"   
      3.            entity-group-reader="main"   
      4.            entity-eca-reader="main" >  
      5.            distributed-cache-clear-enabled="false">   
      6.         <group-map group-name="org.ofbiz" datasource-name="localderby"/>   
      7.         <group-map group-name="org.ofbiz.olap" datasource-name="localderbyolap"/>   
      8.         <group-map group-name="org.ofbiz.tenant" datasource-name="localderbytenant"/>   
      9. </delegator>   
      可以发现delegator 将多个group-name组织到一起并将group-name与datasource-name对应起来,datasource-name又是什么?通过查看 entityengine.xml 我们可以发现: 
      [html] view plaincopy
       
      1. <datasource name="localderby"   
      2.             helper-class="org.ofbiz.entity.datasource.GenericHelperDAO"   
      3.             schema-name="OFBIZ"   
      4.             field-type-name="derby"   
      5.             check-on-start="true"   
      6.             add-missing-on-start="true"   
      7.             use-pk-constraint-names="false"   
      8.             use-indices-unique="false"   
      9.             alias-view-columns="false"   
      10.             use-order-by-nulls="true">   
      11.         <read-data reader-name="seed"/>   
      12.         <read-data reader-name="seed-initial"/>   
      13.         <read-data reader-name="demo"/>   
      14.         <read-data reader-name="ext"/>   
      15.         <inline-jdbc   
      16.                 jdbc-driver="org.apache.derby.jdbc.EmbeddedDriver"   
      17.                 jdbc-uri="jdbc:derby:ofbiz;create=true"   
      18.                 jdbc-username="ofbiz"   
      19.                 jdbc-password="ofbiz"   
      20.                 isolation-level="ReadCommitted"   
      21.                 pool-minsize="2"   
      22.                 pool-maxsize="250"   
      23.                 time-between-eviction-runs-millis="600000"/>   
      24. </datasource>   
      datasource定义了数据库驱动,数据库用户名、密码等,所以datasource就是我们说的数据库。 
      总结一下:我们通过entity-group将各个实体和数据库之间关联起来,然后再将一个或多个数据库归属到一个delegator 中,那我们又是怎么使用数据库进行数据库操作的呢??查看每个模块应用底下的web.xml 我们可以发现:
      [html] view plaincopy
       
      1. <context-param>   
      2.         <param-name>entityDelegatorName</param-name>   
      3.         <param-value>default</param-value>   
      4.         <description>The Name of the Entity Delegator to use, defined in entityengine.xml</description>   
      5. </context-param>   
      针对不同的应用,我们可以使用不同的delegator .如果不定义则使用default. 
      在启动各个应用模块的时候,系统会根据web.xml 中的 entityDelegatorName 生成delegator 对象,然后将delegator 对象存放到servletContext 中备用。 
      我们就是使用这个delegator对象执行数据库操作,以后会介绍如何使用。 
      [java] view plaincopy
       
      1. delegator = DelegatorFactory.getDelegator(delegatorName);   
      2. servletContext.setAttribute("delegator", delegator);   
    • no-auto-stamp 
      no-auto-stamp="false" 
      entity 属性之一: 将此值设置为true , 则创建数据库表时将来不创建lastUpdatedStamp、lastUpdatedTxStamp、createdStamp、createdTxStamp 这四个字段。 

    • Field.type 
      [html] view plaincopy
       
      1. <field name="tenantId" type="id-ne"/>   
      Type , 将数据字段类型 与 java 类型关联起来的设置。 定义文件路径为: 
      %ofbiz_home%\framework\entity\fieldtype\fieldtypeXXX.xml 其中XXX为你使用的数据库名称。 
      [html] view plaincopy
       
      1. <field-type-def type="email" sql-type="VARCHAR(255)" java-type="String"/>   
    • prim-key 
      [html] view plaincopy
       
      1. <prim-key field="agreementId"/>   
      定义主键,其中field 需要是已经被定义过的字段,即field 定义过。 
      实体支持组合主键,即一个实体定义中可以有多个prim-key节点。 
      如果不定义主键的话,数据库是不会创建表的。 

    • relation
      relation 定义当前实体和其他实体之间的关系,一般用做创建外键和根据关系查询使用。 
      :rel-entity-name:被关联实体名称。 
      :fk-name:如果创建外键,那么定义外键的名称。 
      :title:给当前关系起个别名。 
       : field-name:当前实体的字段,指明当前实体的哪个字段与被关系实体有关系。 
      :rel-entity-name:被关系实体名称 
      :rel-field-name:被关系的实体的字段名称。指明field-name和被关系实体的哪个字段有关系。如果rel-field-name与field-name相同,那么rel-field-name可以不定义。 
      :type="one-nofk":关联类型,主要有三类 “one”、”one-nofk”、”many” 
      很多资料上将one 解释为 one-to-one ,将 many 解释为 one-to-many . 
      个人感觉不是很好理解,如果从数据库方面去理解的话,one、one-nofk  的使用条件是被关系实体的rel-field-name为主键,而many 的使用条件是被关系实体的rel-field-name为非主键。而one 与 one-nofk 的区别在于one会在数据库表结构中创建外键约束,而one-nofk 则不会。 
      relation 除了用来创建外键约束之外还被用来做关系查询。 
      当访问关系的时候可以用 .getRelated("") 或者 .getRelatedOne("") 。用 title+entityName 作为参数。 
      当实体一个"many"关系的时候使用getRelated 返回一个列表,当实体一个"one"关系的时候使用getRelatedOne 返回一个实体对象。 
       
    • index
      [html] view plaincopy
       
      1. <index name="WEFF_KWD_KWD" unique="false">   
      2.     <index-field name="keyword" function="lower"/>   
      3. </index>   
      创建索引。
      : name 给索引起个别名。
      : unique 是否唯一索引。
      : index-field
      : name 对实体哪个字段创建索引
      : function 待确定。 

  4. 定义视图实体 
    • member-entity 
      [html] view plaincopy
       
      1. <member-entity entity-alias="EMPPOS" entity-name="EmplPosition"/>   
      2. <member-entity entity-alias="EMPPOSFUL" entity-name="EmplPositionFulfillment"/>   
      member-entity首先定义当前视图实体可能会用到的实体。
      entity-name实体名称 
      entity-alias实体别名。
      实体定义顺序很重要,除了第一个实体之外其他都是被关联实体。 

    • alias
      [html] view plaincopy
       
      1. <alias entity-alias="EMPPOSFUL" name="partyId" field="partyId"/>   
      2.     <alias entity-alias="EMPPOSFUL" name="emplPositionId" function="count"/>   
      3.     <alias entity-alias="EMPPOSREPST" name="emplPositionIdReportingTo" group-by="true"/>   
      alias 定义当前视图实体中会用到的字段。
      entity-alias为实体别名,指当前字段是哪个实体的,
      field实体字段名称,name字段别名。 
      group-by依据当前字段进行group-by 分组查询
      function对当前字段执行function 函数处理 。 
       
    • alias-all 
      [html] view plaincopy
       
      1. <alias-all entity-alias="ODD" prefix="orderDate" group-by="true">   
      2. <exclude field="dimensionId"/>   
      3. </alias-all>   
      alias-all 将某个实体的全部字段定义进来。Prefix定义以规定字段字符开头的字段。 
      exclude 将实体中某些字段剔除出去。 

    • view-link 
      [html] view plaincopy
       
      1. <view-link entity-alias="SOIF" rel-entity-alias="ODD" rel-optional="false">   
      2. <key-map field-name="orderDateDimId" rel-field-name="dimensionId"/>   
      3. </view-link>  
      视图实体中relation 只能用来做关系查询。 
      而view-link 用来做 join 关联查询
      在entityengine.xml中<datasource ..>元素当中的join-style属性当中设置你的数据库join语法。 
      : rel-optional:关联类型,默认是内连接,如果将此属性值设为true ,则为外连接 

    • entity-condition 
      [html] view plaincopy
       
      1. <entity-condition>   
      2.      <order-by field-name="sequenceId"/>   
      3. </entity-condition>   
      待定

    • 复杂字段 
      [html] view plaincopy
       
      1. <alias entity-alias="OI" name="quantityOrdered" function="sum">   
      2.     <complex-alias operator="-">   
      3.         <complex-alias-field entity-alias="OI"   
      4.             field="quantity"   
      5.             default-value="0"/>   
      6.         <complex-alias-field entity-alias="OI"   
      7.             field="cancelQuantity"   
      8.             default-value="0"/>   
      9.     </complex-alias>   
      10. </alias>   
      结果为: 
      [sql] view plaincopy
       
      1. Select  SUM((COALESCE(OI.QUANTITY, 0) - COALESCE(OI.CANCEL_QUANTITY, 0)))  
      一个缺省值是一个良好的习惯,否则当他们之中有一个为空就会导致结果为空 
      这个操作可以支持你使用数据库的所有函数例如  +, -, * 和 /,字符串连接符||。 
      你也可以添加一个 function="" 实现min, max, sum, avg, count, count-distinct, upper 和 lower 在 complex-alias-field中。
      比如: 
      [html] view plaincopy
       
      1. <alias entity-alias="OI" >   
      2.     <complex-alias operator="-">   
      3.         <complex-alias-field entity-alias="OI"   
      4.                                field="quantity"   
      5.                                default-value="0"   
      6.                                function="sum"/>   
      7.         <complex-alias-field entity-alias="OI"   
      8.                                field="cancelQuantity"   
      9.                                default-value="0"   
      10.                    function="sum"/>   
      11.     </complex-alias>   
      12. </alias>   
      结果为
      [sql] view plaincopy
       
      1. SELECT (SUM(COALESCE(OI.QUANTITY,'0')) - SUM(COALESCE(OI.CANCEL_QUANTITY,'0')))  
分享到:
评论

相关推荐

    ofbiz实体引擎

    在Ofbiz中,实体引擎是核心组件之一,它负责处理数据模型,提供数据访问和管理功能。本篇文章将深入探讨Ofbiz实体引擎的设计理念、主要功能以及实际应用。 ### 一、Ofbiz实体引擎概述 Ofbiz实体引擎基于Java语言,...

    ofbiz数据结构设计

    一、OFBiz的实体模型(Entity Model) OFBiz采用实体-关系(Entity-Relationship,简称ER)模型来组织数据。在OFBiz中,实体代表业务对象,如产品、订单、顾客等。每个实体由一组属性组成,这些属性描述了实体的...

    ofbiz 入门+增删改查+实体

    实体在OFBiz中相当于数据库表,所以新建一个实体模型文件`entitymodel.xml`,定义部门表(Department)。在`ofbiz-component.xml`中添加对新实体的引用,确保在构建和加载数据时能识别这个实体。 构建OFBiz有两种...

    Ofbiz 入门教程

    在 Ofbiz 中,实体模型 (Entity Model) 是非常核心的概念之一,它定义了数据存储的结构。为了定义实体模型,我们需要创建一系列的 XML 文件。这些文件主要包括 `entitymodel_xxx.xml`、`ofbiz-component.xml` 和 `...

    ofbiz学习笔记(自学整理)

    然后,你需要了解Ofbiz的配置文件,如entityengine.xml、services.xml和component.xml,它们分别定义了实体模型、服务和组件的配置。 在深入学习过程中,实践是关键。通过创建和修改简单的服务和实体,你可以逐步...

    OFbiz实体引擎指南

    OFBiz是一个非常著名的电子商务平台,是一个非常著名的开源项目,提供了创建基于最新J2EE/XML规范和技术标准,构建大中型企业级、跨平台、跨数据库、跨...包括实体引擎, 服务引擎, 消息引擎, 工作流引擎, 规则引擎等。

    ofbiz开发入门之CmsBackEnd实现的CRUD

    1. **创建(CRUD - Create)**: 在OFBiz中,创建新记录通常涉及到实体引擎(Entity Engine)的操作。开发者需要定义一个服务(service),通过这个服务调用实体引擎的API来创建新的实体实例。例如,创建一个新的CMS内容...

    Ofbiz 数据库全模型

    这些模型文件通常为XML格式,比如`entityengine.xml`,它们定义了数据库表的字段、类型、约束等,并且可以通过Ofbiz的数据导入导出工具进行数据迁移和备份。开发者可以根据需要修改这些模型,以适应特定的业务需求或...

    WIN7上安装Ofbiz 数据库 postgresql

    6. 使用文本编辑器打开C:\ofbiz\framework\entity\config下的entityengine.xml文件,这是OFBiz的实体引擎配置文件。 在这个文件中,你需要进行两项关键的修改: - 第一处修改涉及默认数据源的配置,确保OFBiz使用...

    ofbiz安装与配置

    * entity:Ofbiz 的实体关系模型代码 * hot-deploy:Ofbiz 的热部署文件 * ofbizComponents:Ofbiz 的组件配置文件 * webtools:Ofbiz 的 Web 工具代码 使用 Eclipse 打开 Ofbiz 的 Ant 命令 我们可以使用 Eclipse...

    ofbiz综合文档

    通过上述内容,我们可以了解到OFBIZ实体引擎的强大之处在于它提供了一个高度定制化的解决方案,用于处理数据访问层的逻辑。`entityengine.xml`文件的配置不仅让开发者能够轻松地定义实体的结构,还能根据需要定制...

    ofbiz入门教程-初学者开发指南

    3. 更新 entityengine.xml 和 entitygroup.xml 文件:在 entityengine.xml 中添加对 entitymodel_study.xml 的引用,在 entitygroup.xml 中注册 StudyCustomer 实体。 4. 创建数据库表:运行Ofbiz的ant脚本或使用...

    Ofbiz快速开发入门详解

    在《Ofbiz开发快速入门》中,你将了解到Ofbiz的核心概念,如实体模型(Entity)、服务(Service)和组件(Component)。实体模型是Ofbiz的基础,它定义了业务数据结构;服务则负责处理业务逻辑,是Ofbiz实现功能的...

    OFBIZ开发指南 英文2

    服务引擎是OFBIZ的核心组件之一,它允许开发者定义服务接口,实现业务逻辑,并通过XML请求和响应进行通信。服务可以通过本地或远程调用,提供了强大的跨模块交互能力。 工作流引擎则管理各种任务和流程,如审批流程...

    ofbiz一个完整例子

    本示例将带你逐步了解如何在OFBiz中创建一个完整的应用实例,从实体创建到服务定义,再到界面展现。 1. 创建实体 在OFBiz中,实体是数据模型的核心,它们对应于数据库中的表。在`Hot-deploy/myfirstdemo/entitydef/...

    Ofbiz数据模型查询手册

    手册首先会介绍Ofbiz的数据模型设计原则,包括实体(Entity)、实体属性(Attribute)、实体关系(Relationship)等概念,以及如何在Ofbiz中创建和管理这些模型。通过学习这些基础,开发者可以更好地理解Ofbiz如何...

Global site tag (gtag.js) - Google Analytics