package org.ofbiz.hello3;
import java.util.HashMap;
import java.util.Map;
import org.ofbiz.base.util.Debug; // uses Log4J
import org.ofbiz.base.util.UtilMisc; // helpful utility for working with Maps, Lists, etc.
import org.ofbiz.entity.GenericDelegator;
import org.ofbiz.entity.GenericEntityException;
import org.ofbiz.entity.GenericValue;
import org.ofbiz.service.DispatchContext;
import org.ofbiz.service.ServiceUtil;
public class Hello3Services {
public static final String module = Hello3Services.class.getName();
// 用于测试。
public static Map createHelloPerson(DispatchContext dctx, Map context) {
//JAVA服务写成一种标准的格式:一个公共类里有一个公共静态方法,该方法有两个参数,//一个DispatchContext用于取得对象(delegators, dispatchers, locale, and //security),一个名叫context的影射Map包含了你的输入参数并返回一个结果影射。
GenericDelegator delegator = dctx.getDelegator();
//步骤一、获取delegator
// 用DispatchContext类的getDelegator()方法取得和该dispatch/context想关联的//GenericDelegator对象,即delegator. GenericDelegator是用于访问数据库的类,想//操作数据库必须先取得该对象。
try {
String helloPersonId = delegator.getNextSeqId("HelloPerson");
//步骤二、用delegator调用方法取得序列号
// GenericDelegator 类的getNextSeqId 方法用于从给定的序列中取得下一个有保证的//唯一的序列号;如果该序列不存在,该方法将创建它。方法原型为:
//String getNextSeqId(java.lang.String seqName)
Debug.logInfo("helloPersonId = " + helloPersonId, module);
// 输出到控制台或日至,用于调试
GenericValue helloPerson = delegator.makeValue("HelloPerson",
UtilMisc.toMap("helloPersonId", helloPersonId));
//步骤三、调用delegator的makeValue方法创建GenericValue对象
// GenericDelegator 类的makeValue方法用于创建GenericValue对象,该对象对应数据//库中一个具体实体,该方法的第一个参数是String型的实体名,第二个参数是一个映射。//方法原型为:
//GenericValue
makeValue (java.lang.String entityName, java.util.Map fields)
helloPerson.setNonPKFields(context);
//步骤四、将输入参数中的非主码参数向GenericValue对象赋值
// GenericValue对象helloPerson调用GenericValue类的setNonPKFields方法将输入的//非主码域值传递给自己。该方法的原型为:
//void
setNonPKFields(java.util.Map fields)
//其实该方法是GenericValue类继承GenericEntity类的方法得来的。
delegator.create(helloPerson);
//步骤五、调用delegator的create方法将GenericValue对象写入数据库
// 调用GenericDelegator类的create()方法根据GenericValue 的格式创建实体,并将
//实体写入数据源。该方法的原型是:GenericValue create(GenericValue value)
Map result = ServiceUtil.returnSuccess();
// 由ServiceUtil类的returnSuccess()方法返回一个Map对象
//方法原型是:
//static java.util.Map returnSuccess(java.lang.String successMessage)
result.put("helloPersonId", helloPersonId);
// 在映射中关联指定对象的值到指定对象的码,即将输出参数放到映射中返回用户
//方法原型为:Object put(Object key, Object value)
return result;
// return Map
} catch (GenericEntityException ex) { // required if you use delegator in Java
return ServiceUtil.returnError(ex.getMessage());
}
}
}
小结:
步骤一、获取delegator
步骤二、用delegator调用方法取得序列号
步骤三、调用delegator的makeValue方法创建GenericValue对象
步骤四、将输入参数中的非主码参数向GenericValue对象赋值
步骤五、调用delegator的create方法将GenericValue对象写入数据库
最后,通过MAP返回。