OFbiz基本功-创建数据库记录

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

OFbiz中使用groovy在数据库中创建条目。之所以选择Groovy,是因为ofbiz自带的minilang应用面太窄,只能应用在ofbiz中,而java每次修改都要重新重启项目编译。groovy修改不用重启项目,而且引用面较广。

一、创建屏幕

创建一个Screen,包含提交的form表单

   <screen name="CreateSecManageMessage">
        <section>
            <actions>
                <set field="headerItem" value="填写安全信息"/><!-- this highlights the selected menu-item with name "main" -->
            </actions>
            <widgets>
                <decorator-screen name="main-decorator" location="${parameters.mainDecoratorLocation}">
	                <decorator-section name="body">
	                	<screenlet title="添加信息">
	                		<include-form name="createSecManaMess" location="component://securitymanage/widget/SecurityManageForms.xml"/>
	                	</screenlet>
	              	</decorator-section>
                </decorator-screen>
            </widgets>
        </section>
   </screen>

二、创建Form

在相应文件内创建form

    <form name="createSecManaMess" type="single" target="addSecManaMess">
	    <!-- 创建添加项 -->
	   <!--  <auto-fields-service service-name="createSecurityManageTest"/> -->
	    <field name="typeId" title="${uiLabelMap.SecManaMessTypeId}"><text/></field>
	    <field name="typeId" title="类型编号"><text/></field>
		<field name="typeName" title="类别参数名称"><text/></field>
		<field name="data" title="参数数据"><text/></field>
		<field name="UpdateDate" title="更新时间"><text/></field>
		<field name="CreateUser" title="创建人"><text/></field>
		<field name="CreateDate" title="创建时间"><text/></field>
		<field name="AuditUser" title="审核人"><text/></field>
		<field name="AuditStatus" title="审核状态"><text/></field> 
		<field name="InvalidStatus" title="失效状态"><text/></field> 
		<field name="InvalidUser" title="失效人"><text/></field> 
		<field name="InvalidTime" title="失效时间"><text/></field> 
		<field name="Note" title="备注"><text/></field> 
	    <field name="submitButton" title="${uiLabelMap.CommonAdd}"><submit button-type="button"/></field>
	</form>

如果想在数据库创建条目,最好所有条目都列举出来,如果不想用户看到,或者采取默认值,可以使用下面方式:

<!--hiden表示隐藏,用户看不到,value赋予数据项默认值 -->
<field name="create_user" title="${uiLabelMap.create_user}"><hidden value = "admin"/></field>

注释掉的<auto-fields-service service-name="createSecurityManageTest"/>表示不用我们一个一个写下面的数据项,自动生成,并调用服务createSecurityManageTest。

Form的类型有single,list,muti等。

target表示提交表单后跳转的目的地,根据controller.xml文件查询。
所以在controller.xml文件中设定

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

addSecManaMess请求经服务器处理,需要调用createSecurityManageTest服务(创建数据库条目的主角)。

三、配置服务

该服务在servicedef文件夹下的services.xml中先定义。

<service name="createSecurityManageTest" default-entity-name="TblSecManageData" engine="groovy"         location="component://securitymanage/script/org/ofbiz/securitymanage/SecurityManage.groovy" invoke="createSecurityManageTest" auth="true">
    	<description>创建一个添加数据的测试服务</description>
    	<auto-attributes include="pk" mode="IN" optional="true"/>
    	<auto-attributes include="nonpk" mode="IN" optional="true"/>
</service>

default-entity-name:表示使用的数据库表。
location和 invoke:表示groovy文件在哪,以及groovy文件中哪个函数。
auth:表示是否要求用户登陆才能操作。

关于auto-attributes说明:
因为创建表单是自动填充条目,pk表示主键,nonpk非主键,
mode:表示是输入还是输出,IN表示参数只输入,OUT表示参数只输出,INOUT表示参数即作为参数传到服务中,又作为返回值返回。

其实pk一般不作为输入参数,因为主键一般在服务中创建,不用传参。

optional表示选项是否可选,true表示可选,false表示不可选,也就是必须填。
举一反三:
服务中传入传出参数,怎么使用?如下

<attribute name="userLoginId" type="String" mode="IN" optional="true"/>
<attribute name="userLoginName" type="String" mode="OUT" optional="true"/>

创建数据记录的groovy文件

import org.ofbiz.entity.GenericEntityException;
def createSecurityManageTest() {
    
    
	result = [:];
	try{
    
    
		ofbizDemo = delegator.makeValue("TblSecManageData");
		// Auto generating next sequence of ofbizDemoId primary key
		ofbizDemo.setNextSeqId();
		// Setting up all non primary key field values from context map
		ofbizDemo.setNonPKFields(context);
		// Creating record in database for OfbizDemo entity for prepared value
		ofbizDemo = delegator.create(ofbizDemo);
		//result.secManageSeqId = ofbizDemo.secManageSeqId;
	  } catch(GenericEntityException e) {
    
    
	  }
	  return result;
}

groovy文件中有一句注释result.secManageSeqId = ofbizDemo.secManageSeqId;它的作用是返回值,它什么时候需要写呢?当在services.xml文件中含有<auto-attributes include="pk" mode="OUT" optional="false"/>时,表示主键需要作为返回值返回,并且必须返回,因为optional为true。

猜你喜欢

转载自blog.csdn.net/weixin_46375034/article/details/115055930