转 ofbiz各配置文件作用以及工作流程

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>

时间: 2024-10-17 15:53:18

转 ofbiz各配置文件作用以及工作流程的相关文章

ansible架构原理及工作流程

一.ansible介绍 ansible是一种自动化运维工具,基于paramiko模块开发,用于批量执行任务和发布工作,被广泛用于日常运维工作当中. 二.ansible架构架构图: ansible核心模块介绍:core models: ansible自带的模块,file,shell,copy等custom models: ansible自带模块不足以满足工作需要时,用户添加扩展模块host inventory: 由ansible 管理的主机,包括主机名,ip,端口等playbook: yaml格式

Vuex的工作流程,以及它的作用,使用场景

vuex的工作流程: 1.在vue组件里面,通过dispatch来触发actions提交修改数据的操作. 2.然后再通过actions的commit来触发mutations来修改数据. 3.mutations接收到commit的请求,就会自动通过Mutate来修改state(数据中心里面的数据状态)里面的数据. 4.最后由store触发每一个调用它的组件的更新 Vuex的作用:项目数据状态的集中管理,复杂组件(如兄弟组件.远房亲戚组件)的数据通信问题. 原文地址:https://www.cnbl

GitHub超详细图文攻略 - Git客户端下载安装 GitHub提交修改源码工作流程 Git分支 标签 过滤 Git版本工作流(转载)

最近听同事说他都在使用GitHub,GitHub是程序员的社区,在里面可以学到很多书上学不到的东西,所以最近在准备入手这方面的知识去尝试学习,正好碰到这么详细完整的文章,就转载了,希望对自己和大家有帮助. GitHub操作总结 : 总结看不明白就看下面的详细讲解. GitHub操作流程 : 第一次提交 : 方案一 : 本地创建项目根目录, 然后与远程GitHub关联, 之后的操作一样; -- 初始化Git仓库 :git init ; -- 提交改变到缓存 :git commit -m 'desc

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

1.定时任务和计划任务: 2.一次性定时任务at(生产中很少使用) at命令: at [option] TIME        常用选项:     -V 显示版本信息:     -l: 列出指定队列中等待运行的作业:相当于atq     -d: 删除指定的作业:相当于atrm     -c: 查看具体作业任务     -f /path/from/somefile:从指定的文件中读取任务     -m:当任务被完成之后,将给用户发送邮件,即使没有标准输出  #注意:作业执行命令的结果中的标准输出和

【嵌入式开发】 Bootloader 详解 ( 代码环境 | ARM 启动流程 | uboot 工作流程 | 架构设计)

作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42462795 转载请著名出处 相关资源下载 :  -- u-boot 源码 : http://download.csdn.net/detail/han1202012/8342761 -- S3C2440 文档 : http://download.csdn.net/detail/han1202012/8342701 -- S5PV210_iROM_Applicati

Haddop随笔(一):工作流程的源码

一.几个可能会用到的属性值 1.mapred.map.tasks.speculative.execution和mapred.reduce.tasks.speculative.execution 这两个属性可以决定Map任务和Reduce任务是否开启推测式执行策略.推测式执行策略在Hadoop中用来应对执行缓慢的任务所造成的瓶颈,但是对代码缺陷所导致的任务执行过慢,推测执行是一种反向的作用,应当避免,而Hadoop默认是开启推测式执行的. 2.mapred.job.reuse.jvm.num.ta

【代码管理】GitHub超详细图文攻略 - Git客户端下载安装 GitHub提交修改源码工作流程 Git分支 标签 过滤 Git版本工作流

找到一篇很详细的Git教程,真的很不错,推荐!!! GitHub操作总结 : 总结看不明白就看下面的详细讲解. . 作者 :万境绝尘  . GitHub操作流程 : 第一次提交 : 方案一 : 本地创建项目根目录, 然后与远程GitHub关联, 之后的操作一样; -- 初始化git仓库 :git init ; -- 提交改变到缓存 :git commit -m 'description' ; -- 本地git仓库关联GitHub仓库 : git remote add origin [email 

Struts2工作流程个人解析

前面稍微学习了下Strust2基本使用,对Struts2的工作流程以及底层源码完全不懂,今天打算把Struts2的工作流程好好的摸索一遍. 1.这是一张网上download的struts2工作流程图, 对上图稍做解释: 1.首先客户端/浏览器发送一个请求到服务器,即HttpServletRequest会经过一系列(Fliter)过滤器(ActionContextCleanUp该过滤器是可选过滤器,主要作用就是对ActionContext进行CleanUp操作,不让后续的Fliter清除,延长ac

SpringMVC-DispatcherServlet工作流程及web.xml配置

工作流程: Web中,无非是请求和响应: 在SpringMVC中,请求的第一站是DispatcherServlet,充当前端控制器角色: DispatcherServlet会查询一个或多个处理器映射(handler mapping)并根据请求所携带的URL信息进行决策,将请求发送给哪个SpringMVC控制器(controller): 控制器做两件事:一是将数据打包,二是定义逻辑视图名,然后返回给DispatcherServlet: DispatcherServlet通过视图解析器(view r