由于最近一段时间在给一个创业的公司做客户关系管理CRM系统,限于人力要求(其实是没有多少人力),只能看能否有稳定,开源的半成品进行改造,而且最好不需要前端(js)相关开发人员的支援就可以把事情做成,经过一段时间(其实也就是1周)的调研,最好把目标锁定在OFBiz上。
OFBiz简介,什么是OFBiz
OFBiz is an Apache Software Foundation top level project.
Apache OFBiz全称是The ApacheOpen For Business Project。是开放的电子商务平台,是一个非常著名的开源项目,提供了创建基于最新的J2EE/XML规范和技术标准,构建大中型企业级、快平台、跨数据库、跨应用服务器的多层、分布式电子商务类WEB应用系统的框架。
OFBiz几乎实现了所有的J2EE核心设计模式,各个模块之间的耦合比较松散,用户能够比较容易的根据自己的需要进行拆卸,非常灵活。下面介绍一下它的目录结构以及文件说明。
可以参考一些blog中关于OFBiz的讨论:
Apache OFBiz进行环境部署
Apache OFBiz是一个商业软件架构,opentaps 基于 Apache OFBiz 的解决方案,其官方网站地址:
在官网中下载最新版本的OFBiz:apache-ofbiz-13.07.02.zip
将其解压,执行命令
ant ant load-demo cd tools ./startofbiz.sh
执行完成后,就可以在本机的下面url中的查看相应的功能:
其中,管理员的用户名 admin/ofbiz,登录后的界面如下(其中修改了默认的视觉风格):
一些重要的配置文件
<!--?xml version="1.0" encoding="UTF-8" standalone="no"?-->
component-load.xml
路径:ofbiz\application\,该配置文件的作用为模块加载文件,定义了所有在OFBIZ启动时需要加载的应用程序的位置,当你创建了新的应用程序时,别忘了在该文件中添加应用程序的位置信息,在 ofbiz\hot-deploy\目录下的应用程序不需要在component-load.xml里定义,ofbiz启动时会自动加载所有hot- deploy下的内容。
ofbiz-component.xml
位置:基于ofbiz的任何应用程序根目录下,指出该应用程序数据模型(<entity-resource>),商业逻辑(<service-resource>),web应用程序(<webapp.../>)的位置。
例子:
<entity-resource type="model" reader-name="main" loader="main" location="entitydef/entitymodel.xml" /> <service-resource type="model" loader="main" location="servicedef/services_agreement.xml" /> <webapp name="accounting" title="Accounting" server="default-server" location="webapp/accounting" base-permission="OFBTOOLS,ACCOUNTING" mount-point="/accounting" />
web.xml
位置:应用程序\webapp\accounting\WEB-INF,用于配置main servlet(s),控制后台服务器(如tomcat server),及一些相关参数。
controller.xml
位置:应用程序\webapp\accounting\WEB-INF,作用:负责控制接收到的请求request。任何到来的请求,无论是屏幕请求,还是服务请求或事件请求,都要经过controller.xml的处理,然后转交给相应的部分处理。
例子:
<request-map uri="main"> <security https="true" auth="true" /> <response name="success" type="view" value="main" /> </request-map> <view-map name="main" type="screen" page="component://accounting/widget/CommonScreens.xml#main" />
(当请求"main"到来时,在controller.xml中,先找到<request-map uri="main">,根据其value="main",继续向下找到view-map name="main"
,最后得到该请求该返回的页面位置:page="component://accounting/widget /CommonScreens.xml#main" )
在OFBiz中,是根据模块-请求-服务-页面的总体流程来实现的,每个模块的配置文件如下:
<?xml version="1.0" encoding="UTF-8"?> <ofbiz-component name="basicconfig" 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"/> <entity-resource type="data" reader-name="main" loader="main" location="data/BasicDataTypeData.xml"/> <entity-resource type="model" reader-name="main" loader="main" location="entitydef/entitymodel.xml"/> <service-resource type="model" loader="main" location="servicedef/services_consultant.xml"/> <webapp name="basicconfig" title="BasicConfig" description="BasicConfigDescription" server="default-server" base-permission="OFBTOOLS,BASICCONFIG" location="webapp/basicconfig" mount-point="/basicconfig" app-bar-display="true"> </webapp> </ofbiz-component>
其中涉及到 实体模型文件,服务模型文件,webapp声明部分。
OFBiz中的服务
其中的服务实现有两种,其中src对应其中的java类,此时声明service的engine为java,而没有使用OFBiz中自带的特殊服务类型,下面就是服务声明部分:
<service name="createConsultant" engine="java" location="com.xxx.basicconfig.service.ConsultantServices" invoke="createConsultant" auth="true"> <description>Get commission receiving parties and amounts for a product. <br/> amount input is for the entire quantity. <br/><br/> Returns a List of Maps each containing <br/> partyIdFrom String commission paying party <br/> partyIdTo String commission receiving party <br/> commission BigDecimal Commission <br/> days Long term days <br/> currencyUomId String Currency <br/> productId String Product Id <br/> Will use the virtual product if no agreement is found for a variant product. If no quantity is specified, defaults to one (1). </description> <!--<permission-service service-name="acctgCommissionPermissionCheck" main-action="VIEW"/>--> <attribute name="consultantName" type="String" mode="IN" optional="false"/> <attribute name="consultantCode" type="String" mode="IN" optional="false"/> <attribute name="consultantEmail" type="String" mode="IN" optional="false"/> <attribute name="consultantGender" type="String" mode="IN" optional="false"/> <attribute name="consultantCity" type="String" mode="IN" optional="false"/> <!--<attribute name="commissions" type="List" mode="OUT" optional="false"/>--> </service>
其中涉及到了服务名称,引擎类型(java),如果引擎是java类,location就使用了对应的Java类完整路径,invoke中指定了该类型调用的方法。
属性列表中声明了该服务所输入/输出的所有的参数列表,如果在调用该服务时,参数并没有满足要求,比如名称,类型,输入(IN)且optional=false的参数没有传过来,则会报错。
服务类的方式采用类型的静态方法(保证无状态),其实现举例如下:
public static Map<String, Object> deleteConsultant(DispatchContext dispatchContext, Map<String, Object> context) { String consultantId = (String) context.get("userId"); Delegator delegator = dispatchContext.getDelegator(); GenericPK dsConsultant = delegator.makePKSingle("UserLoginSecurity", consultantId); try { delegator.removeByPrimaryKey(dsConsultant); } catch (GenericEntityException e) { Debug.logWarning(e.getMessage(), module); return ServiceUtil.returnError(e.getMessageList()); } return new HashMap<>(); }
在Map结构的Context中,根据key(也就是service文件中声明的属性名称,mode需为IN/INOUT)来拿到其对应的值,返回一个Map,其中的key对应service文件声明的属性,mode对应OUT,需要将该名称的属性值放到Map中。
在服务实现中无可避免地需要使用数据层服务,这个时候,就需要dispatchContext.getDelegator()方法来拿到Delegator作为数据端的代理,使用OFBiz中的数据模型服务来操纵数据库。关于Delegator以及数据服务端,在下一篇总结中介绍。
相关推荐
- **定义**:Apache OFBiz(Open For Business)是一款开源的企业级应用框架,它集成了ERP(企业资源规划)、CRM(客户关系管理)以及E-commerce(电子商务)等多种功能。其设计目标是为了提供一个灵活且可扩展的...
- **社区驱动的开源项目**:Apache OFBiz 是一个完全免费且由社区维护的开源项目。 - **功能强大**:作为最佳电子商务与企业资源规划(ERP)软件之一,它提供了全面的功能集合,适合各种规模的企业使用。 #### 第一...
11. 扩展和重构OFBiz:包括了将现有的BeanShell脚本转换为Java事件,以及使用了哪种扩展策略来优化OFBiz的开发。 12. 测试与备份:介绍了如何保存测试的快照点,备份Derby数据库文件和Web服务器工作文件,以便快速...
Apache OFBiz 是用于企业流程自动化的开源产品,包括 ERP(企业资源规划)、CRM(客户关系管理)、电子商务/电子商务、SCM(供应链管理)、MRP(制造资源规划)、...Apache OFBiz 项目是 Apache 软件基金会的一部分。
Apache OFBiz Datamodel 2
apache-ofbiz-16.11.02.zip,ofbiz菜鸟笔记,Apache+OFBiz+开发初学者指南.chm
学习Opentaps和Ofbiz的经典入门!
在学习Apache OFBiz的过程中,你可以参考提供的"Apache+OFBiz+开发初学者指南.chm"文件,这可能包含了OFBiz的基础知识、安装指南、开发环境的搭建以及基本操作的示例。同时,"OFBiz其它资源.txt"文件可能包含了一些...
#### 一、Apache OFBiz Datamodel 概述 Apache OFBiz 是一个开源的企业级电子商务框架,它提供了完整的业务流程管理、内容管理和电子交易处理功能。OFBiz Datamodel 作为其核心组成部分之一,负责定义和存储业务...
Apache OFBiz Datamodel 3 是一个高级的数据模型系统,主要用于管理电子商务、供应链管理等业务场景下的数据流与数据结构。OFBiz 本身是一款开源的企业级应用框架及应用项目,提供了一系列模块化、可扩展的组件来...
OpenTaps(Open Source Total Appliance for Professional Services)是一款基于Apache OfBiz的企业级开源商务套件,旨在提供全面的企业应用解决方案,包括CRM(客户关系管理)、ERP(企业资源规划)、电子商务、...
本部分将详细介绍如何通过五个简单的步骤开始使用 Apache OFBiz 进行制造管理和 MRP 实施。 ##### 步骤一:理解您的制造流程 在开始使用 OFBiz 之前,首先需要对您的制造流程有深入的理解。这包括识别关键的制造...
Apache OFBiz是一种开源的电子商务解决方案,其全称为Open For Business。它是一个功能强大的企业级电子商务平台,能够在组织内部构建稳健的电子商业系统。本文档涵盖的内容以OFBiz 9.04版本为核心,详细介绍了OFBiz...
ApacheOFBiz:registered: 欢迎使用ApacheOFBiz:registered: ! 一个功能强大的顶级Apache软件项目。 OFBiz是用Java编写的企业资源计划(ERP)系统,并包含大量库,实体,服务和功能,以运行您的业务的各个方面。 ...
Apache+OFBiz+开发初学者指南.rar OFBiz开发快速入门.rar OFBiz-技术文档.rar OFBiz API中文版.rar Apache OFBiz Cookbook Sep 2010.rar Opentaps widget使用说明.rar OFBiz.Development.2008.rar Groovy中文...
CVE-2021-26295 Apache OFBiz 反序列化漏洞
Apache OFBiz 是用于企业流程自动化的开源产品,包括 ERP(企业资源规划)、CRM(客户关系管理)、电子商务/电子商务、SCM(供应链管理)、MRP(制造资源规划)、...Apache OFBiz 项目是 Apache 软件基金会的一部分。