2008-04-18 14:35

1.当客户端发出请求时,调用第一个配置文件WEB-INF/controller.xml,根据请求的地址
处理方法1:直接调用java类的方法
<request-map uri="login">
        <security https="true" auth="false"/>
        <event type="java" path="org.ofbiz.webapp.control.LoginWorker" invoke="login"/>
        <response name="success" type="view" value="main"/>
        <response name="error" type="view" value="login"/>
</request-map>
如果为login,会查找path="org.ofbiz.webapp.control.LoginWorker"这个类的invoke="login"
这个方法进行处理
处理方式2:通过service配置文件取查找对应的service(常用)
    <request-map uri="createForum">
        <security https="true" auth="true"/>
        <event type="service" path="" invoke="createForum"/>
        <response name="success" type="view" value="FindForum"/>
        <response name="error" type="view" value="FindForum"/>
    </request-map>
表示调用的类型为type="service"调用的方法为invoke="createForum"
2.进入servicedef/services.xml,这是service的配置文件
  
从里面找到上面对应的配置信息
<service name="createForum" default-entity-name="GroupForum" engine="simple"
            location="org/ofbiz/group/GroupServices.xml" invoke="createForum" auth="true">
        <description>Create a GroupForum</description>
        <permission-service service-name="exampleGenericPermission" main-action="CREATE"/>
        <auto-attributes include="pk" mode="OUT" optional="false"/>
        <auto-attributes include="nonpk" mode="IN" optional="true"/>
        <override name="forumName" optional="false"/>
</service>
文件配置的createForum这个文件实现的相关信息location="org/ofbiz/group/GroupServices.xml"表示实现
是通过minilanguage配置文件
3.进入script下面的org/ofbiz/group/GroupServices.xml文件
通过minilanguage配置文件
    <simple-method method-name="createForum" short-description="create a GroupForum">
        <make-value entity-name="GroupForum" value-name="newEntity"/>
        <sequenced-id-to-env sequence-name="GroupForum" env-name="newEntity.forumId"/> <!-- get the next sequenced ID -->
        <field-to-result field-name="newEntity.forumId" result-name="forumId"/>
        <set-nonpk-fields map-name="parameters" value-name="newEntity"/>
        <create-value value-name="newEntity"/>

</simple-method>
配置了对entity-name="GroupForum"实体的创建的相关信息和操作,该步骤可以用java代码实现.
4.进入实体配置文件部分
entitymodel.xml
<entity entity-name="GroupForum" package-name="org.ofbiz.group" title="GroupForum Entity">
        <field name="forumId" type="id-ne"><!-- primary sequenced ID --></field>
        <field name="forumName" type="name"></field>
        <field name="description" type="description"></field>
        <field name="authorID" type="id"></field>
        <field name="created" type="date-time"></field>     
        <prim-key field="forumId"/>
    </entity>
配置了entity-name="GroupForum" 的实体与数据库映射文件

entitygroup.xml
<entitygroup xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="http://www.ofbiz.org/dtds/entitygroup.xsd">       
    <entity-group group="org.ofbiz" entity="GroupForum"/>
    <entity-group group="org.ofbiz" entity="GroupCategory"/>
    <entity-group group="org.ofbiz" entity="GroupThread"/>
    <entity-group group="org.ofbiz" entity="GroupPost"/>
</entitygroup>
配置了实体名称的组

5.service执行成功后会返回到展现逻辑配置部分,也就是WEB-INF/controller.xml中
<request-map uri="login">
        <security https="true" auth="false"/>
        <event type="java" path="org.ofbiz.webapp.control.LoginWorker" invoke="login"/>
        <response name="success" type="view" value="main"/>
        <response name="error" type="view" value="login"/>
</request-map>
现在会请求到main中,
<view-map name="main" type="screen" page="component://group/widget/group/CommonScreens.xml#main"/>
在WEB-INF/controller.xml中找到main的配置信息
该显示用screen配置显示component://group/widget/group/CommonScreens.xml#main

6.现在根据地址找到配置文件component://group/widget/group/CommonScreens.xml
#main表示该文件中name为main的screen
<screen name="main">
        <section>
    <actions>
                <set field="titleProperty" value="OrderOrderTaskList"/>
                <set field="headerItem" value="tasklist"/>
                <script location="component://order/webapp/ordermgr/WEB-INF/actions/task/ordertasklist.bsh"/>
            </actions>
            <widgets>
                <decorator-screen name="main-decorator">
                    <decorator-section name="body">
                        <container style="screenlet">
                            <container style="screenlet-header">
                                <label style="boxhead" text="Main Page"/>
                            </container>
                            <container style="screenlet-body">
                                <section>
                                    <condition><if-empty field-name="userLogin"/></condition>
                                    <widgets>
                                        <container><label text="${uiLabelMap.ExampleMessage}"/></container>
                                    </widgets>
                                </section>
                                <container><label text="${uiLabelMap.Welcome}"/></container>
                            </container>
                        </container>
                    </decorator-section>
                </decorator-screen>
            </widgets>
        </section>
    </screen>
<screen name="login">
        <section>
            <widgets>
                <decorator-screen name="main-decorator">
                    <decorator-section name="body">
                        <platform-specific>
                            <html><html-template location="component://common/webcommon/login.ftl"/></html>
                        </platform-specific>
                    </decorator-section>
                </decorator-screen>
            </widgets>
        </section>
    </screen>
</screens>
该配置文件配置了显示的数据以及显示的格式
其中数据是通过.bsh文件和service提供的,而显示的格式为ftl文件提供的

7.进入group\webapp\group\WEB-INF\actions\forum在
bsh为beansheel配置文件,语法与java类似,在这儿是为了提供显示数据

import java.util.*;
import java.io.*;
import org.ofbiz.entity.*;
import org.ofbiz.base.util.*;

security = request.getAttribute("security");
delegator = request.getAttribute("delegator");
userLogin = session.getAttribute("userLogin");
person = null;
if (userLogin != null ) {
    person = userLogin.getRelatedOne("Person");
}
forumId = request.getParameter("forumId");
categoryId = request.getParameter("categoryId");
if ( categroyId == null ||UtilValidate.isEmpty(categoryId) ){
categoryId = delegator.getNextSeqId("GroupCategory");
}

groupCategory = delegator.findByPrimaryKey("GroupCategory", UtilMisc.toMap("categoryId", categoryId));
context.put("forumId", forumId);
context.put("categoryId", categoryId);
context.put("groupCategory", groupCategory);
context.put("person", person);
该文件把需要的数据放到返回的上下文中

8.进入到group\webapp\group\forum\listForum.ftl
该文件为Freemarker的文件,作用是代替jsp作显示层
<#if forums?has_content>
Some of the famous celebrities who have visited our site:

<table>
<ul>
    <#list forums as forum>
<tr>
       <li><td><a href ="EditForum?forumId=${forum.forumId?if_exists}">${forum.forumId?if_exists}</a></td>
           <td>12 ${forum.forumName?if_exists}</td>
           <td> ${forum.description?if_exists}</td>
          
       <li><td><a href ="deleteForum?forumId=${forum.forumId?if_exists}">${forum.forumId?if_exists}</a></td>
</tr>

<tr>
       <li><td><a href ="FindCategory?forumId=${forum.forumId?if_exists}">${forum.forumId?if_exists}</a></td>
           <td><a href ="EditCategory?forumId=${forum.forumId?if_exists}">${forum.forumId?if_exists}</a></td>
           <td> </td>
          
       <li><td></td>
</tr>

</#list>
</ul>
</table>
</#if>

通过一些表达式和判断把数据显示出来,这样整个请求完毕

其他配置文件的作用:
data目录下的配置文件:
<entity-engine-xml>
    <UserLogin userLoginId="DemoBuyer" currentPassword="47ca69ebb4bdc9ae0adec130880165d2cc05db1a" passwordHint=""/>
    <UserLogin userLoginId="DemoRepAll" currentPassword="47ca69ebb4bdc9ae0adec130880165d2cc05db1a" passwordHint=""/>
    <UserLogin userLoginId="DemoRepStore" currentPassword="47ca69ebb4bdc9ae0adec130880165d2cc05db1a" passwordHint=""/>
    <UserLogin userLoginId="DemoCustCompany" currentPassword="47ca69ebb4bdc9ae0adec130880165d2cc05db1a" passwordHint=""/>
    <UserLogin userLoginId="DemoCustAgent" currentPassword="47ca69ebb4bdc9ae0adec130880165d2cc05db1a" passwordHint=""/>
    <UserLogin userLoginId="DemoCustomer" currentPassword="47ca69ebb4bdc9ae0adec130880165d2cc05db1a" passwordHint=""/>
    <UserLogin userLoginId="supplier" partyId="externaluser" currentPassword="47ca69ebb4bdc9ae0adec130880165d2cc05db1a" passwordHint=""/>
    <UserLoginSecurityGroup groupId="ORDERSUPPLIER_LTD" userLoginId="supplier" fromDate="2001-01-01 12:00:00.0"/>
</entity-engine-xml>
配置了系统启动时后需要添加的一些数据

config目录下的配置文件:为国际化配置信息
   <property key="OrderCaughtExceptionOnCartUpdate">
        <value xml:lang="en">Caught exception on cart update. </value>
        <value xml:lang="es">Excepción capturada en la actualización del carro.</value>
        <value xml:lang="fr">%Exception attrapée dans la mise à jour du chariot. %</value>
        <value xml:lang="it">Eccezione sull'aggiornamento carrello. </value>
        <value xml:lang="ro">Exceptie la actualizarea cosului. </value>
        <value xml:lang="zh">更新购物车时发生意外情况 </value>
    </property>

widget里面的form配置文件:
    <form name="OrderPurchaseProductOptions" type="single" target="OrderPurchaseReportProduct.pdf" title="" extends="OrderPurchaseReportOptions">
        <field name="fromOrderDate" title="${uiLabelMap.OrderReportFromDate}"><date-time type="timestamp"/></field>
        <field name="thruOrderDate" title="${uiLabelMap.OrderReportThruDate}"><date-time type="timestamp"/></field>
        <field name="submitButton" title="${uiLabelMap.CommonRun}" widget-style="smallSubmit"><submit button-type="button"/></field>
    </form>
配置了一些表单信息,和screen一样,但是他可以直接显示数据不需要使用Freemaerker的文ftl文件作页面布局,根据配置信息可以直接生成

ofbiz-componet.xml文件配置了项目要加载的配置文件的信息,它可以告诉OFBIZ应用程序组件的相关信息:数据模型,商业逻辑,用户接口,种子数据,以及其他程序需要的资源。
   <ofbiz-component name="order"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/ofbiz-component.xsd">
    <resource-loader name="main" type="component"/>
    <classpath type="jar" location="build/lib/*"/>
    <classpath type="dir" location="config"/>
    <classpath type="dir" location="script"/>
    <classpath type="dir" location="email"/>
    <entity-resource type="model" reader-name="main" loader="main" location="entitydef/entitymodel.xml"/>
    <entity-resource type="model" reader-name="main" loader="main" location="entitydef/entitymodel_old.xml"/>
    <entity-resource type="model" reader-name="main" loader="main" location="entitydef/entitymodel_view.xml"/>
    <entity-resource type="group" reader-name="main" loader="main" location="entitydef/entitygroup.xml"/>
    <entity-resource type="eca" reader-name="main" loader="main" location="entitydef/eecas.xml"/>
    <entity-resource type="data" reader-name="seed" loader="main" location="data/OrderTypeData.xml"/>
    <entity-resource type="data" reader-name="seed-initial" loader="main" location="data/OrderScheduledServices.xml"/>
    <entity-resource type="data" reader-name="seed" loader="main" location="data/OrderSecurityData.xml"/>
    <entity-resource type="data" reader-name="demo" loader="main" location="data/OrderDemoUser.xml"/>
    <entity-resource type="data" reader-name="demo" loader="main" location="data/OrderProcessWorkflow.xml"/>
    <service-resource type="model" loader="main" location="servicedef/services.xml"/>
    <service-resource type="model" loader="main" location="servicedef/services_cart.xml"/>
    <service-resource type="model" loader="main" location="servicedef/services_shoppinglist.xml"/>
    <service-resource type="model" loader="main" location="servicedef/services_request.xml"/>
    <service-resource type="model" loader="main" location="servicedef/services_quote.xml"/>
    <service-resource type="model" loader="main" location="servicedef/services_requirement.xml"/>
    <service-resource type="model" loader="main" location="servicedef/services_return.xml"/>
    <service-resource type="model" loader="main" location="servicedef/services_opportunity.xml"/>
    <service-resource type="model" loader="main" location="servicedef/services_upgrade.xml"/>
    <service-resource type="eca" loader="main" location="servicedef/secas.xml"/>
   
    <test-suite loader="main" location="testdef/OrderTest.xml"/>
   
    <webapp name="order"
        title="Order"
        server="default-server"
        location="webapp/ordermgr"
        base-permission="OFBTOOLS,ORDERMGR"
        mount-point="/ordermgr"/>
</ofbiz-component>

eca.xml配置了调用指定的entity或者service触发的对应事件
entity:
    <eca entity="OrderHeader" operation="create-store" event="return">
        <condition field-name="statusId" operator="equals" value="ORDER_COMPLETED"/>
        <condition field-name="needsInventoryIssuance" operator="equals" value="Y"/>
        <action service="issueImmediatelyFulfilledOrder" mode="sync"/>
    </eca>
service:
    <eca service="changeOrderItemStatus" event="commit">
        <condition field-name="statusId" operator="equals" value="ITEM_CANCELLED"/>
        <action service="cancelOrderInventoryReservation" mode="sync"/>
        <action service="recalcShippingTotal" mode="sync"/>
        <action service="recalcTaxTotal" mode="sync"/>
        <action service="resetGrandTotal" mode="sync"/>
        <action service="checkOrderItemStatus" mode="sync"/>
    </eca>

entityengine.xml配置了数据库连接的相关信息
    <datasource name="localmssql"
            helper-class="org.ofbiz.entity.datasource.GenericHelperDAO"
            schema-name="dbo"
            field-type-name="mssql"
            check-on-start="true"//启用的数据库连接
            add-missing-on-start="true"
            join-style="ansi"
            alias-view-columns="false"
            use-fk-initially-deferred="false">
        <read-data reader-name="seed"/>
        <read-data reader-name="seed-initial"/>
        <read-data reader-name="demo"/>
        <read-data reader-name="ext"/>
        <inline-jdbc
                jdbc-driver="com.microsoft.sqlserver.jdbc.SQLServerDriver"
                jdbc-uri="jdbc:sqlserver://10.0.70.15:1433;databaseName=ofbiz;SelectMethod=cursor;"
                jdbc-username="ofbiz"
                jdbc-password="ofbiz"
                isolation-level="ReadCommitted"
                pool-minsize="2"
                pool-maxsize="250"/>
        <!-- <jndi-jdbc jndi-server-name="default" jndi-name="comp/env/jdbc/xa/localmssql" isolation-level="ReadCommitted"/> --> <!-- Orion Style JNDI name -->
    </datasource>

ofbiz各配置文件作用以及工作流程相关推荐

  1. Scrapy框架的概念、作用和工作流程

    1. scrapy的概念         Scrapy是一个Python编写的开源网络爬虫框架.它是一个被设计用于爬取网络数据.提取结构性数据的框架. Scrapy是一个为了爬取网站数据,提取结构性数 ...

  2. 一、scrapy爬虫框架——概念作用和工作流程 scrapy的入门使用

    scrapy的概念和流程 学习目标: 了解 scrapy的概念 了解 scrapy框架的作用 掌握 scrapy框架的运行流程 掌握 scrapy中每个模块的作用 1. scrapy的概念 Scrap ...

  3. axios拦截器作用及工作流程详解

    axios 拦截器 在请求或响应被then或catch处理之前拦截它们 作用: 主要是在axios请求和响应之前拦截请求和响应数据.拦截器有两种,请求拦截器一般会统一在请求头中添加token.响应拦截 ...

  4. 人工智能TensorFlow工作笔记010---TensorFlow 游乐场游戏,了解神经网络主要功能作用_工作流程

    技术交流QQ群[JAVA,C,.NET,BigData,AI]:170933152 看书写程序,边看边写... 看下面这个游戏网站地址,然后看介绍吧.主要是介绍一下,神经网络实现过程. http:// ...

  5. Redis——Redis主从复制(工作流程详解)

    Redis主从复制 主从复制简介 主从复制的概念 主从复制的作用 主从复制工作流程 阶段一:建立连接阶段 主从连接(slave连接master) 第一种方式 第二种方式 第三种方式 授权访问 阶段二: ...

  6. Mybatis工作流程,附带mybatis的mapper文件和config配置文件模板。mapper文件和dao接口的关系——xml中的namespace和sql标签id命名要求。

    1. Mybatis工作流程 1.1 使用MySQL创建数据库girls并生成一个表boys,如下图. 1.2 创建该表对应的简单实体类Boys,如下图. 1.3 创建Dao接口以及和接口同名的map ...

  7. ssh框架配置文件流程_通过配置文件和安排增强您的工作流程

    ssh框架配置文件流程 by Marcus Wood 由马库斯·伍德(Marcus Wood) 通过配置文件和安排增强您的工作流程 (Supercharge your workflow with pr ...

  8. Nginx源码分析:master/worker工作流程概述

    nginx源码分析 nginx-1.11.1 参考书籍<深入理解nginx模块开发与架构解析> Nginx的master与worker工作模式 在生成环境中的Nginx启动模式基本都是以m ...

  9. Linux下计划任务和标准化工作流程

    1.定时任务和计划任务: 2.一次性定时任务at(生产中很少使用) at命令: at [option] TIME常用选项:-V 显示版本信息:-l: 列出指定队列中等待运行的作业:相当于atq-d: ...

最新文章

  1. pythonunbuffered_python所遇到的坑
  2. 在下载jar包时,要有三个包,分别为使用的把class、查看文档的api、查看源代码的资源包...
  3. ASP.NET Core 沉思录 - Logging 的两种介入方法
  4. python用turtle画皮卡丘_用Python的turtle作画(2)——皮卡丘
  5. Fixed the bug:while running alert/confirm in javascript the chrome freezes
  6. Codeforces Round #222 (Div. 2): C. Maze(BFS)
  7. vue 第五天 (事件监听基础)
  8. Spring源码下载并导入Idea
  9. 2017年10大主流编程语言最新排行榜出炉
  10. 个人网站设计作品html,经典网页设计:25个优秀的个人网站设计欣赏_html/css_WEB-ITnose...
  11. 逐渐消失的行业-MP3
  12. 微信支付可能改变的六大行业
  13. python键盘上下左右控制_【322】python控制键盘鼠标:pynput
  14. Prometheus 查询语言 PromQL 的 CPU 使用率计算方法
  15. winpe 能否修复服务器系统,教你如何使用winpe来修复系统
  16. 宅急送 项目第八天 JBPM工作流框架
  17. 第一章 JavaWEB专题之Http基础协议解析
  18. 硅谷来信丨一招阻击恶意软件攻击:沙箱集成MITRE ATTCK攻击框架
  19. html bs架构调用客户端打印机用客户端及客户端局域网打印机打印,使用ScriptX.cab控件...
  20. fedora15 安装nvidia 显卡驱动

热门文章

  1. php论坛网论文交易,php4论坛代写网站
  2. RESTful 个人理解总结
  3. php编译打包,解压即用,Ubuntu上Nginx/Apache/PHP编译打包
  4. ntp server 配置参数_02-NTP配置
  5. idea导入的项目、类、方法等全部爆红解决办法
  6. 电商+小程序社交电商的新模式
  7. Triplet-Loss原理及其实现、应用
  8. 云谦:前端框架的趋势与实践
  9. 浅谈Spherical Message Passing for 3D Graph Networks
  10. JavaScript 杨辉三角