• OFBiz进阶之HelloWorld(三)CRUD操作


    参考文档 https://cwiki.apache.org/confluence/display/OFBIZ/OFBiz+Tutorial+-+A+Beginners+Development+Guide

    创建、更新和删除操作一个实体将由minilang 写成的服务实现。为了更好的理解这些内容,我们写自己的服务来完成这些操作,之后我们将通过调用已经实现的服务来完成。

    要做这些,我们将采用会员模型的实体:

    --Party
    --Person
    一个人是一会员,所以创建一个人先得创建一类型是partyTypeId="PERSON"的会员。
    所以有两种方式做这些:
    1. 创建一个服务来进行带有类型Person 的会员创建工作。
    2. 在服务中先创建一个会员,再创建个人。

    1. Writing Services

    a. 在practice下创建目录servicedef,此目录将包含所有服务定义文件,如:services.xml,secas.xml。

        注:如果一个服务用java编写,应放到src目录,如果是用minilang编写,应放到script目录。

             比如java applications/party/src/org/ofbiz/party/party/PartyServices.java和minilang applications/party/script/org/ofbiz/party/party/PartyInvitationServices.xml;

             各自的类路径和文件路径将在服务定义中体现。

    b. 在控制器(controller.xml)中你必须创建一个入口为执行服务的请求和设置响应:

    <request-map uri="createPracticePerson">
        <security https="true" auth="true"/>
        <event type="service" invoke="createPracticePerson"/>
        <response name="success" type="view" value="PersonForm"/>
    </request-map>

    c. 现在所有写好的服务必须在服务器启动时装载,因此需要在ofbiz-component.xml为服务定义(service definition)创建一个条目(entry)

    <service-resource type="model" loader="main" location="servicedef/services.xml"/>

    注意:对服务定义的任何修改均需要重启服务器才能生效。

    2. Writing CRUD Operations for Party Entity

    开始我们将为会员写服务,然后当写创建Person 服务时将调用会员的服务。

    a. 在servicedef 下创建文件services.xml

    b. 为Party实体定义CRUD操作的服务。服务的名称是createPracticeParty, updatePracticeParty, deletePracticeParty,并且指定正确的路径到这些服务实现的文件,例如/framework/example/script/org/ofbiz/example/example/ExampleServices.xml。

    c. 为这些服务的实现在你的组件目录中创建目录结构和PracticeServices.xml文件。

       (实现可参考Example组件的services.xml和ExampleServices.xml文件。)

        注意:不要使用<override>标签,它在教程随后的介绍中。

                从这里开始,你想运行这些服务的话,可以通过webtools 运行这些服务:webtools--> Run Service . 这样你可以测试你的服务。
                你应该阅读http://markmail.org/message/dj4wvtm4u2nxoz3r这功能近来已经增加,与对实体写CRUD操作的传统方式不同。

        新功能让你仅定义这些服务,通过说起你想运行的操作。基本上设计引挚属性为"entity-auto"和调用(invoke)属性为"create", "update", or "delete"。你可以看下example 组件的services.xml 中的下列代码:

    <service name="createExample" default-entity-name="Example" engine="entity-auto" invoke="create" auth="true">
        <description>Create a Example</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="exampleTypeId" optional="false"/>
        <override name="statusId" optional="false"/>
        <override name="exampleName" optional="false"/>
    </service>

    engine="entity-auto" invoke="create"为缺省实体"Example."做创建记录的角色。
    作为练习你可以做更进一步,这些步骤在帮助你理解概念,你仅能在你的代码中练习上面所给模式。

    3. Writing CRUD Operations for Person Entity

    为个人person 实体创建记录需要有partyId,因此首先调用createPracticeParty服务得到partyId后再去创建person记录。
    我们将在person 实体列表表单下面增加一个附加的表单。这个表单将调用这个服务来创建一个person 记录。

    a. 创建用于创建person的附加表单,并且把下面的person 表单加在同一个screen 中。

    <form name="CreatePerson" type="single" target="createPracticePerson">
          <auto-fields-service service-name="createPracticePerson"/>
          <field name="submitButton" title="Create" widget-style="smallSubmit"><submit button-type="button"/></field>
    </form>

    b. 为 person 实体写CRUD 操作,这个就是在services.xml 中createPracticePerson 的代码。

    <service name="createPracticePerson" default-entity-name="Person" engine="simple"
              location="component://practice/script/org/hotwax/practice/PracticeServices.xml" invoke="createPracticePerson" auth="true">
         <description>Create a Person</description>
         <auto-attributes include="pk" mode="OUT" optional="false"/>
         <attribute name="salutation" mode="IN" type="String" optional="true"/>
         <attribute name="firstName" mode="IN" type="String" optional="false"/>
         <attribute name="middleName" mode="IN" type="String" optional="true"/>
         <attribute name="lastName" mode="IN" type="String" optional="false"/>
         <attribute name="suffix" mode="IN" type="String" optional="true"/>
    </service>  

    Update和Delete与上面类似。

    c. 用可编辑的字段转换List 表单 (参考: ListExampleItems from ExampleForms.xml) ,在里面加入更新和删除选项,也把附加的表单加入同一screen 中。

    d. 为这些服务增加控制项,是通过这表单来调用的。

    e. 运行应用,查看效果

  • 相关阅读:
    《超越自己》--刘墉
    《菊与刀》--[美]鲁思·本尼迪克特(Ruth Benedict)
    《暧昧的日本人》--李兆忠
    《女性的选择》--[日]今野由梨
    《懂得低头,才能出头》--李艳
    原来还有这样的记词方法_Java版记不规则动词_博主推荐
    《永不止步》--[奥]力克胡哲
    C#面向服务WebService从入门到精通
    C# Windows服务开发从入门到精通
    sql server递归查询
  • 原文地址:https://www.cnblogs.com/yanchuanblog/p/3989649.html
Copyright © 2020-2023  润新知