`

ofbiz开发入门之CmsBackEnd实现的CRUD

阅读更多

昨晚快12点的时候看到耀哥回复我附件里面有相应的下载,于是我就下载完就睡了。今早上不到七点起来洗漱完开始着手练习任务。虽然我之前也已经自己在网上下载到耀哥去年上传的那两压缩包,但是比较发现昨晚下载的那个版本文件最小,我想那这个版本应该是最轻量级的吧,所以就干脆拿这个版本以CmsRegister为例做ofbiz的CRUD练习演示。
下面是我的步骤:

1.下载附件并解压,删除__MACOSX目录(猜想应该是MAC操作系统里面的),保留cmsbackend文件夹

 

2.将cmsbackend文件夹拷贝到之前搭建好的ofbiz环境中的specialpurpose目录下

 

3.展开cmsbackend目录,选择src目录,点击右键Build Path-->User As Source Folder

 

4.打开specialpurpose目录下的component-load.xml,在component-loader节点后面添加一行<load-component component-location="cmsbackend"/>将cmsbackend组件挂上,这样下次再load-demo的时候实体引擎就会解析该组件下的实体创建表并将种子数据加入到数据库表中

 

5.打开cmsbackend\entitydef\entitymodel.xml,在最下方添加实体定义代码,内容如下:
 <entity entity-name="CmsRegister" packge-name="org.ofbiz.cms.register" title="CmsRegister Entity">
  <field name="id" type="id-ne"></field>
  <field name="username" type="name"></field>
  <field name="realname" type="name"></field>
  <field name="email" type="name"></field>
  <field name="description" type="very-long"></field>
  <prim-key field="id"/>
 </entity>
 
6.在cmsbackend目录下的config目录下新建CmsRegisterUILabels.xml用于控制UI的title属性,内容如下:
 <?xml version="1.0" encoding="UTF-8"?>
 <resource xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <property key="CmsRegister">
   <value xml:lang="en">register</value>
   <value xml:lang="zh">注册管理</value>
  </property>
  <property key="CmsRegisterId">
   <value xml:lang="en">id</value>
   <value xml:lang="zh">注册ID</value>
  </property>
  <property key="CmsRegisterUsername">
   <value xml:lang="en">username</value>
   <value xml:lang="zh">用户名</value>
  </property>
  <property key="CmsRegisterRealname">
   <value xml:lang="en">realname</value>
   <value xml:lang="zh">真实姓名</value>
  </property>
  <property key="CmsRegisterEmail">
   <value xml:lang="en">email</value>
   <value xml:lang="zh">电子邮箱</value>
  </property>
  <property key="CmsRegisterDescription">
   <value xml:lang="en">description</value>
   <value xml:lang="zh">自我介绍</value>
  </property>
  <property key="CmsRegisterCreate">
   <value xml:lang="en">create</value>
   <value xml:lang="zh">新建</value>
  </property>
 </resource>

 

7.在cmsbackend\widget\CommonScreens.xml下的main-decorator节点中注入CmsRegisterUiLabels,即<property-map resource="CmsRegisterUiLabels" map-name="uiLabelMap" global="true"/>

 

8.在CmsBackendMenus.xml文件中添加“注册管理”的菜单项,即
 <menu-item name="register" title="${uiLabelMap.CmsRegister}">
   <link target="FindCmsRegister" />
 </menu-item>
 
9.根据菜单“注册管理”的链接FindCmsRegister找到cmsbackend应用下的controller.xml配置文件,给其中添加相应的配置
 <request-map uri="FindCmsRegister">
  <security https="true" auth="true"/>
  <response name="success" type="view" value="FindCmsRegister"/>
 </request-map>
 
 <view-map name="FindCmsRegister" type="screen" page="component://cmsbackend/widget/CmsBackendScreens.xml#FindCmsRegister"/>

 

10.在cmsbackend\widget\CmsBackendScreens.xml中添加一个name="FindCmsRegister"的screen,内容如下:
 <screen name="FindCmsRegister">
        <section>
            <actions>
                <set field="headerItem" value="CmsRegister"/>
                <set field="titleProperty" value="CmsRegister"/>
                <set field="pCtx" from-field="parameters"/>
            </actions>
            <widgets>
                <decorator-screen name="CmsBackendCommonDecorator" location="${parameters.mainDecoratorLocation}">
                    <decorator-section name="body">
                                <decorator-screen name="FindScreenDecorator" location="component://common/widget/CommonScreens.xml">
                                    <decorator-section name="menu-bar">
                                        <container style="button-bar">
                                            <link target="EditCmsRegister" link-type="anchor" text="${uiLabelMap.CmsRegisterEdit}" style="buttontext create"/>
                                        </container>
                                    </decorator-section>
                                    <decorator-section name="search-options">
                                        <include-form name="FindCmsRegister" location="component://cmsbackend/widget/CmsBackendForms.xml"/>
                                    </decorator-section>
                                    <decorator-section name="search-results">
                                        <include-form name="ListCmsRegister" location="component://cmsbackend/widget/CmsBackendForms.xml"/>
                                    </decorator-section>
                                </decorator-screen>
                    </decorator-section>
                </decorator-screen>
            </widgets>
        </section>
    </screen>

 

11.上一步中涉及到注入CmsBackendForms.xml中两个表单,一个用于条件查询,一个用于列表展示,内容如下:
 <!--用于查询的表单-->
 <form name="FindCmsRegister" type="single" target="FindCmsRegister" default-entity-name="CmsRegister">
     <field name="noConditionFind"><hidden value="Y"/></field>
   <field name="username" title="${uiLabelMap.CmsRegisterUsername}" >
         <text-find hide-options="true"/>
     </field>
   <field name="realname" title="${uiLabelMap.CmsRegisterRealname}" >
         <text-find hide-options="true"/>
     </field>
   <field name="email" title="${uiLabelMap.CmsRegisterEmail}" >
         <text-find hide-options="true"/>
     </field>
     <field name="description" title="${uiLabelMap.CmsRegisterDescription}" >
         <text-find hide-options="true"/>
     </field>   
   <field name="searchButton" title="${uiLabelMap.CommonFind}" widget-style="smallSubmit">
       <submit button-type="button"/>
   </field>
   </form>
   <!--用于列表展示的表单-->
    <form name="ListCmsRegister" type="list" list-name="listIt" paginate-target="FindCmsRegister" default-entity-name="CmsRegister" separate-columns="true"
        odd-row-style="alternate-row" header-row-style="header-row-2" default-table-style="basic-table hover-bar">
      <actions>
          <service service-name="performFind" result-map="result" result-map-list="listIt">
              <field-map field-name="inputFields" from-field="pCtx"/>
              <field-map field-name="entityName" value="CmsRegister"/>
              <field-map field-name="orderBy" from-field="parameters.sortField"/>
              <field-map field-name="viewIndex" from-field="viewIndex"/>
              <field-map field-name="viewSize" from-field="viewSize"/>
          </service>
      </actions>     
      <field name="id" title="${uiLabelMap.CmsRegisterId}" sort-field="true">
        <display/>
    </field>
    <field name="username" title="${uiLabelMap.CmsRegisterUsername}" sort-field="true">
        <display/>
    </field>
    <field name="realname" title="${uiLabelMap.CmsRegisterRealname}" sort-field="true">
        <display/>
    </field>
    <field name="email" title="${uiLabelMap.CmsRegisterEmail}" sort-field="true">
        <display/>
    </field>
    <field name="edit" title="${uiLabelMap.CommonEdit}">
            <hyperlink also-hidden="false" description="${uiLabelMap.CommonEdit}" target="EditCmsRegister">
                <parameter param-name="id"/>
            </hyperlink>
      </field>
   <field name="delete" title="${uiLabelMap.CommonDelete}">
            <hyperlink also-hidden="false" description="${uiLabelMap.CommonDelete}" target="deleteCmsRegister">
                <parameter param-name="id"/>
            </hyperlink>
      </field>
    </form>
   
  说明:查询功能室借助ofbiz自带的查询功能来实现的,在ListCmsRegister表单中的<actions>中注入ofbiz自带的service

 

12.为了实现表单页面的充分利用让创建和修改公用同一个表单,在CmsBackendForms.xml中添加表单,内容如下:
  <form name="EditCmsRegister" type="single" target="updateCmsRegister" title="" default-map-name="entity" default-entity-name="CmsRegister">
     <alt-target use-when="entity==null" target="createCmsRegister"/>
     <field name="id" title="${uiLabelMap.CmsRegisterId}" required-field="true" widget-style="required">
      <text/>
   </field>
     <field name="username" title="${uiLabelMap.CmsRegisterUsername}" required-field="true" widget-style="required">
       <text/>
    </field>
    <field name="realname" title="${uiLabelMap.CmsRegisterRealname}" required-field="true" widget-style="required">
       <text/>
    </field>
    <field name="email" title="${uiLabelMap.CmsRegisterEmail}" >
       <text/>
    </field>
    <field name="description" title="${uiLabelMap.CmsRegisterDescription}" >
       <textarea />
    </field>
     
   <field name="submitButton" use-when="entity==null" title="${uiLabelMap.CommonCreate}"><submit button-type="button"/></field>
     <field name="submitButton" use-when="entity!=null" title="${uiLabelMap.CommonUpdate}"><submit button-type="button"/></field>
  </form>
 
13.删除的话就不用表单了,接下来需要做的就是在cmsbackend应用下的controller.xml配置文件中为相应的请求资源路径注入配置,内容如下:
  <request-map uri="EditCmsRegister"><security https="true" auth="true"/><response name="success" type="view" value="EditCmsRegister"/></request-map>
    <request-map uri="createCmsRegister">
        <event type="service" invoke="createCmsRegister"/>
        <response name="success" type="request-redirect-noparam" value="FindCmsRegister"></response>
    </request-map>
    <request-map uri="updateCmsRegister">
        <event type="service" invoke="updateCmsRegister"/>
        <response name="success" type="request-redirect" value="FindCmsRegister">
    </response>
    </request-map>
    <request-map uri="deleteCmsRegister">
        <event type="service" invoke="deleteCmsRegister"/>
        <response name="success" type="request-redirect-noparam" value="FindCmsRegister"></response>
    </request-map>
   
    <view-map name="EditCmsRegister" type="screen" page="component://cmsbackend/widget/CmsBackendScreens.xml#EditCmsRegister"/>
 

14.在CmsBackendScreens.xml配置文件中添加一个name="EditCmsRegister"的screen,内容如下:
  <screen name="EditCmsRegister">
        <section>
            <actions>
                <set field="titleProperty" value="CmsRegister"/>
                <set field="tabButtonItem" value="CmsRegister"/>
                <entity-one entity-name="CmsRegister" value-field="entity"/>
            </actions>
            <widgets>
                <decorator-screen name="CmsBackendCommonDecorator" location="${parameters.mainDecoratorLocation}">
                    <decorator-section name="body">
                        <include-form name="EditCmsRegister" location="component://cmsbackend/widget/CmsBackendForms.xml"/>
                    </decorator-section>
                </decorator-screen>
            </widgets>
        </section>
    </screen>

  
15.在cmsbackend应用下的servicedef目录中为services.xml配置文件配置相应的服务,内容如下:
  <service name="createCmsRegister" default-entity-name="CmsRegister" engine="simple" location="component://cmsbackend/script/org/ofbiz/cmsbackend/CmsBackendServices.xml" invoke="createCmsRegister" auth="true">
        <description>Create a CmsRegisterEvents</description>
        <auto-attributes include="pk" mode="IN" optional="false"/>
        <auto-attributes include="nonpk" mode="IN" optional="true"/>
    </service>

    <service name="deleteCmsRegister" default-entity-name="CmsRegister" engine="simple" location="component://cmsbackend/script/org/ofbiz/cmsbackend/CmsBackendServices.xml" invoke="deleteCmsRegister" auth="true">
        <description>Delete a CmsRegisterEvents</description>
        <auto-attributes include="pk" mode="IN" optional="false"/>
    </service>
    <service name="updateCmsRegister" default-entity-name="CmsRegister" engine="simple" location="component://cmsbackend/script/org/ofbiz/cmsbackend/CmsBackendServices.xml" invoke="updateCmsRegister" auth="true">
        <description>Update a CmsRegisterEvents</description>
        <auto-attributes include="pk" mode="IN" optional="false"/>
        <auto-attributes include="nonpk" mode="IN" optional="true"/>
    </service>
   
16.根据每个服务的location找到相对应的CmsBackendServices.xml配置文件,并在其中根据相应调用的方法名添加相应的服务,内容如下:
  <simple-method method-name="createCmsRegister" short-description="" login-required="true">
        <make-value entity-name="CmsRegister" value-field="newEntity" />
        <sequenced-id sequence-name="CmsRegister" field="newEntity.id"/>
        <set-nonpk-fields map="parameters" value-field="newEntity"/>
        <create-value value-field="newEntity"/>
    </simple-method>
   <simple-method method-name="updateCmsRegister" short-description="" login-required="true">
        <entity-one entity-name="CmsRegister" value-field="newEntity"><field-map field-name="id" from-field="parameters.id"/></entity-one>
        <set-nonpk-fields map="parameters" value-field="newEntity"/>
        <store-value value-field="newEntity"/>
   </simple-method>       
  <simple-method method-name="deleteCmsRegister" short-description="" login-required="true">
        <entity-one entity-name="CmsRegister" value-field="newEntity"><field-map field-name="id" from-field="parameters.id"/></entity-one>
        <remove-value value-field="newEntity"/>
   </simple-method>

 

17.将整个ofbiz的build.xml文件拖到ant窗口中,clean-all  -->  load-demo  -->  start

 

18.在浏览器中输入http://localhost:8080/cmsbackend

 

说明:以上这些步骤中涉及的代码大部分都是模仿example组件中的思路而弄得,所以大部分都是复制粘贴而来,时间也仅仅用了一个多小时就搞定了,接下来我会亲自用手写的方式做第二个版本,相信思路会更清晰,效率会更高些。

0
0
分享到:
评论

相关推荐

    OFBIZ快速入门OFBIZ快速入门

    OFBIZ快速入门OFBIZ快速入门OFBIZ快速入门OFBIZ快速入门OFBIZ快速入门OFBIZ快速入门

    Ofbiz快速开发入门详解

    Ofbiz开发快速入门.pdf.源码:hello.rar

    ofbiz开发入门总结

    NULL 博文链接:https://qiangjiyi.iteye.com/blog/2091700

    OFBiz开发快速入门

    OFBiz开发快速入门,手把手教你OFBIZ入门,建立第一个hello模块,包括增删改查以及管理等功能,理解OFBIZ代码结构的好资料。案例版本比较老,但是整体的架构没有变化。

    OFBIZ开发指南 英文2

    OFBIZ开发指南 英文2OFBIZ开发指南 英文2OFBIZ开发指南 英文2

    ofbiz开发者入门教程

    ofbiz 官方开发者入门结合自己实践的完整入门教程

    Ofbiz开发规范.docx

    Ofbiz开发规范.docx

    ofbiz开发手册

    本文档作为一个OFBiz的入门教材,主要介绍OFBiz的环境搭建、安装以及用一个简单的应用作为例子介绍了OFBiz应用开发的流程。

    OFBIZ10.04组件开发入门.doc

    本文档以讲解Region例子程序的代码为引子,介绍OFBIZ组件开发的相关知识。目的是为帮助OFBIZ初学者,尽快上手,自己动手进行开发,进而自己学习更多的OFBIZ技术,“在水中学会游泳”……

    Ofbiz 入门教程

    Ofbiz 入门教程Ofbiz 入门教程Ofbiz 入门教程Ofbiz 入门教程Ofbiz 入门教程Ofbiz 入门教程Ofbiz 入门教程Ofbiz 入门教程

    ofbiz开发初学者指南

    ofbiz开发初学者指南

    OFBIZ开发指南 英文

    OFBIZ开发指南 英文OFBIZ开发指南 英文 OFBIZ开发指南 英文 OFBIZ开发指南 英文

    ofbiz开发文档

    ofbiz开发文档。最新版下载。最新使用文档和使用方法。仅做参考

    Ofbiz开发初学者指南的learning练习源码

    由于Ofbiz版本已经到13了,原来的那本开发初学者指南还是很老旧的版本,书中的源代码已经过时了,在新版下无法工作,阻碍了入门者做练习,增加了学习的难度。此资源针对最新的v13版本做了修正,因此能够在新版本下...

    ofbiz快速入门实例

    Apache OFBiz全称是The ApacheOpen For Business Project。是开放的电子商务平台,是一个非常著名的开源项目,提供了创建基于最新的J2EE/XML规范和技术标准,构建大中型企业级、快平台、跨数据库、跨应用服务器的...

    OFBIZ2.0 入门手册,适合刚学习的朋友们

    OFBIZ2.0 入门手册,适合刚学习的朋友们. 简单的介绍了 OFBIZ的基本使用方法!!!!!

    ofbiz资料大全

    OFBiz开发快速入门.rar OFBiz-技术文档.rar OFBiz API中文版.rar Apache OFBiz Cookbook Sep 2010.rar Opentaps widget使用说明.rar OFBiz.Development.2008.rar Groovy中文教程.rar freemarker中文手册.rar ...

Global site tag (gtag.js) - Google Analytics