包含一些初级的ofbiz开发实例的文档,供ofbiz初学者使用<-- The modules in this file are as followsorg. ofbiz. commonapp study --!KI--org. ofbiz. commonapp. study --二三三三三三二三三三三三三三三三三三三三二Entity entity- name- Study customerpackage-namne="org. ofbiz. Commonapp studytitle=" study customer entity>/fieldKpril-key field="cus tomerId"/>K/entitymodel>这个XML文件中的Tag基木是看得明白的,只是 field的type是 Ofbiz已经预定义好的,这是为了保证数据库问的迁移在 enti tyengine.xml加入我们刚才定义的文件,加入一行在合适的位置:Resource loader-"mainfile location=entitymodel study xml /具体放的位置我们可以通过查看 enti tyengine.xm1找到,里面已给有加好的其他文件。在 entitygroup.xm1加入我们的 Schema定义,在后面加入一行ntity group grfblapp" entity= Study Customer /这样我们就定义好了 Schema,现在把c:\ ofbiz commonapp\ etcentityengine.xm1拷贝到c:\ ofbiz\ catalina\ shared\ classes日录下,这点要切记,我以前就因为没有拷贝,最后 Schema怎么也创建不了重新启动Ofbiz访问Url:http://localhost:8080/webtools点击右上方的" Login"链接,用 admin/ ofbiz登录,登录过入后选择链接“ Check/ Update Database”,这时会出现 Check的Form该表单可以只检验 Schema是否改变,默认的 GroupName是org. ofbiz. Commonapp”,这个不需要变,点击“ Check only”按钮,Obiκ会检验变动情况,显示出一个完整的列表,你可以查一下是否有我们刚建的" Study Customer",如果没有,可能是我们前面定义的有些问题,检查一下再重新做。在检查到以后,可以再选择“ Check and Add Missing”,这是 Ofbiz很强大的一个功能,你在XM中新增了表,或在某个表中新增了段,它会自动映射到数据库中,避免我们去直接操作数据库现在己经完成了 StudyCustomer Schema的创建,如果想检验下是否有表创建,我们可以用编辑器打开c:\ ofbiz\ dataofbiz. script,在里面查询 CREATE TABLE Study Customer的字样,如果前面没有问题,我们可以找到的。4.如何使用已经定义的 Schema如何使用已经定义的 Schema0fbiz遵循MvC的设计模式,在View端,即JSP端主要使用0biz定义的Tag来显示或提取数据, Control是一个 Controller servlet,我们在 ControllerServlet的 URI mapping配置文件中定义各URL应该指向什么程序,这样,通过这个 mapping配置文件,可以保证我们各个页面及具体处理程序之问的独立性,例我们可以通过修改这个配置文件就可以收变某个Form的 Post action的URL,而不需要修改实际的HML或JSP代码。0fbiz中定义了 Regions的概念,即将一个HTML页面分成几个区域,像Top, Left, Right, Main等,通过这些 Regions我们可以方便的组合UI界面,并且可以方便改变各部分所处的位置,如我们可以把菜单很容易的从上方移到卜方,只需要改变一个配置文件。 Regions类似于HTML中的 Frame,但它是通过一个页面米组合界面, Frame是通过几个页面显示在不同的帧中, Frame的控制比较复杂,而且需要改变相关的程序。在 Ofbiz中,我们可以直接在JSP中操作 Schema定义的 Ob ject,即我们刚定义的 Study customer,示例如下<%@ taglib uri-ofbizTags prefix="ofbiz %<%@ page import="java.uti1.求”%〉<%@ page import="org. ofbiz core util.*, org. ofbiz core. pseudotag *%>K%@ page import= org. ofbiz core entity. *k%>Jsp: useBean id="delegatortype="org. ofbiz core entity. GenericDelegator scope=request"/>Jsp: useBean id- security type="org. ofbiz core security Securityscope= request<%if(security. has EntityPermission(" PARTYMGR",VIEW", session))%>%trydelegator. create("study Cus tomerUtilMisc. toMap( customerId, l, customer Name,Custl, customerNoteCustomer Note 1"))Iterator cutsUtilMisc. toIterator(delegator. findAll( Study Customer", UtilMisc toList("customerId, customer Name,"customerNote)))while(custs hasNext o)Genericvalue cust =(GenericValue)custs next oout println(cust. getString(customerId"))out printIn(cust. getString(customerName" ))out println(cust. getString(customerNote"))catch(Exception e)out println(e get Message()‰<%else%>

You do not have permission to view this page. ("PARTYMGR VIEW"orPARTYMGR ADMIN" needed)/h3><%:%这段程序挺容易理解,先是通过 delegator创建一个0 bject,该 Object将会由0fbiz自动同步到数据库中。然后通过 delegator的 finaL1取到所有已保存的 Object,最后通过一个 Iterator对象显示出来。这个程序起名为 testofbiz.jsp,为简单起见,我们放到 Ofbiz已有的一个Webapp的目录下,放到c:\ ofbizofbiz\ partymgrwebapp\ party日录下。然后我们需要修改两个配置文件: controller.xm1和 regions.xml,这两个文件就是我们上面提到的 Illapplllg和 regions配置文这两个文件都在:c:\ ofbiz\ ofbiz\partymgr webapp\WEB-INF下,在controller.xm1屮加入下面Krequest-map uri=testofbiz>Test Ofbizsecurityhttpsfalseauth-false/>Response name=success type=view value="testofbiz"/>Put section-title Test Ofbiz/put>put section='content' content=/party/testofbiz jsp'/>具体加入位置请参考已有的配置。配置完后,重新启动 ofbiz,然后访问URL:http://localhost:8080/partymgr/control/testofbiz由于我们在 testofbiz.jsp程序中使用了 Ofbiz的安全控制机制,系统会提示现在没有访问权限,需要登录,点击右边的“ Login”用 admin/ ofbiz登录后会看到我们程序 testofbiz.jsp的运行结果。如果需要增加新记录,请修改ULilMisc. toMap( custOmerId",1,"cus tomer Name","Cust1", cus tOmerNoLeCustomer Note 1"))中的各个段的值,然后再访问http://localhost:8080/partymgr/control/testofbiz如果不修改而直接访问那个URL时,系统会提示 Primary key冲突。5.按照显示与逻辑分离的原则使用 Schema:上篇讲了如何在JSP中使用创建的 Schema对象,这次我们来讲述下如何把程序逻辑放到 Javabeans中,把显示处理放到JSP中,并使用coη troller.xm1将两部分整合起来。首先我们来创建一个 JavaBeans,来完成Add/Get/ Delete/ pdate Schema对象的操作,程序文件名为Test0biz.java,放置在c:} ofbizofbiz\ testofbiz\com\ geeyoofbiz录下,具体程序如下package com. geeyo ofbizimport javax. servlet.skimportjavax.servlethttpskmport java util.xImport java. net. kimport org. ofbiz core util. timport org. ofbiz core entity.*import org. ofbiz core service.aimport org. ofbiz core security.*import org. ofbiz. core. stats.skpublic class testofbizpublic static void main(Stringl] argsthrows exceptionGenericdelegator delegatorGenericDelegator. get GenericDelegator("default")delegator. create("Study Customer", UtilMisc toMap("customerId", 3, cusLOmerName,Kane3",cus tommerNote",This is test cus tomer. 3")Iterator cutsUtilMisc. toIterator(delegator. findAll( Study Customer UtilMisc toListcustomerId","customerName","customerNote ))Thile(cuts has Next o)GenericValue cust =(GenericValue)cusis nextoSystem. out. println(cust. getString( customerId))System. out. println(cust. getString(customerName"))System. out. println(cust. getString( customerNote"))ablic static String createnewrecord (httPservletreqUest requestHttpservletrespOnse responsethrows exceptionMap paras = UtilMisc get ParameterMap(request)GenericDelegator delegatorGenericDelegator. get GenericDelegator( default );delegator. create( study Customer paras)return successpublicstaticstRinglookallrecords(httpservlEtrequestrequestHttpservletresPonse responsethrows exceptionGenericDelegator delegatorGenericDelegator. getGenericDelegator(" default")Iterator cutsUtilMisc. toIterator(delegator. findAll( Study Customer UtilMisc. toListcustomerId", customerName","customer Note ))Collection col= new Arraylist owhile(cuts. hasNext o)GenericValue cust=(GenericValue)custs nextOcol. add(cust)request getSession(. setAttribute("search results", co1)return successpublic static String findRecord(HilpServletRequest requestHttpservletresPonse responsethrows ExceptionString id=(String)request getParameter( customerId")GenericDelegator delegatorGenericDelegator. getGenericDelegator ("default")tryGenericvalue custdelegator. findBy Primarykey( study Customer UtilMisc toMap("customerIdd))request. get Session(. setAttribute("edit cust",cust)i catch (GenericEntityException gee) tDebug. logWarninggee)return successpublicstaticStringupdaterecord(httpservLetrequestrequestHttpservletrespoNse responsethrows exceptionMap paras UtilMisc get ParameterMap (request)GenericDelegator delegatorGenericDelegator. get GenericDelegator( default")Genericvalue custdelegator. findBy Primarykey( study Customer UtilMisc toMap ("customerIdparas. get("customerId")))cust. seiNonPKFields(paras)cust. storerequest.gelSession(. seLAttribute( edit cust", cust)return successpublicstaticStringremoverecord(httpserVletrequestrequestHttpservletrespOnse responsethrows ExceptionString strId =request getParameter(" id")GenericDelegator delegatorGenericDelegator. getGenericDelegator( default")GenericValue custdelegator. findByPrimaryKey( sludy Cus tomer ULilMisc toMap("cus tomerldstrId))cust. remove o)return success程序中的处理大部分可以看懂的,其中有个功能,是Map paras = UtilMisc getParameter Map request)这是0fbiz的个冇趣但非常有用的功能,它是把 request中各段的名字和值映射到一个Map对象中,然后使用cust. setNonPKFields(paras)就可以赋给 Object cust的各个段,免了我们使用request. getParameter("name")来取各个值,在值很多的时候这个功能可以大大减少冗余代码量。基本程序的逻辑是这样的,1.从 request.读取传来的值2.使用 delegator米处理,Add/ Update/ Delete/ Query3.将返回结果放到 Session中传给JSP我做了个 Ant build.xml文件可以帮助编译,把这个文件放在