上下文methodCtx
方法上下文存放了方法的相关信息
方法上下文存放了方法的相关信息,包括方法参数和方法返回值,方法上下文提供如下:
例:
删除主表记录也删除对应表的记录
//服务端更新单据状态
var imp=JavaImporter();
imp.importPackage(Packages.com.kingdee.eas.util.app)
with(imp){
var ctx=pluginCtx.getContext();
var billId=methodCtx.getParamValue(0);//获取参数
var isDone=methodCtx.getResultValue();//获取方法返回值是否成功执行
var status=11;
var sql="delete T_SD_SALEORDER WHERE FBillID='"+billId+"'";
if(isDone){
DbUitl.execute(ctx,sql);
}
methodCtx.setResultValue(java.lang.Boolean.TRUE);//设置方法返回值
}
获取方法参数:
methodCtx.getParaValue(0)获取单据pk
获取方法返回值
在后置脚本中使用,通过状态方法是否成功执行来判断是否需要删除对于表的记录
methodCtx.getResultValue();
设置方法返回值
必须通过methodCtx.setResultValue(value)来设置,不可以用类似方法返回值的方式写
(return value)
获取方法名 String getName()
获取方法别名 String getAlias()
获取方法参数类型 String[] getParamTypes()
获取方法某个参数的类型 String getParamType(int index)
获取方法参数值 Object[] getParamValues()
获取方法某个参数值 Object getParamValue(int index)
获取方法返回值类型 String getResultType()
获取方法返回值 Object getResultValue()
设置方法返回值 void setResultValue(Object value)
客户端调用业务方法方式
com.kingdee.bos.framwork.BOSClientTool.callCmethod(pk,methodSignature,args)
元数据pk(IMetaDataPK pk)
方法名称(String methodSignature)
参数对象数组(Object[] args)
其中元数据pk为实体的全名称,可从元数据检查获得
元数据路径:在元数据信息中alias节点中可以获取
//客户端调用服务端方法
var easNames=JavaImporter();
easNames.importPackage(Packages.com.kingdee.bos.ctrl.extendcontrols);
easNames.importPackage(Packages.com.kingdee.bos.util);
easNames.importPackage(Packages.com.kingdee.bos.metadata);
easNames.importPackage(Packages.com.kingdee.bos.framework);
with(easNames){
//定义所需参数
//元数据pk
var pk=new MetaDataPK("com.kingdee.eas.basedata.assistant.Termsofapply");
//方法名称从该业务方法的扩展点的描述信息中拷贝获得,否则容易出错
//如果方法没有返回值,注意名称前有空格,不要删除...
var name="java.lang.Boolean updateStatus(com.kingdee.bos.util.BOSUuid billId)";//业务方法描述中拷贝过来
//参数以数组形式保存,js数组定义格式请参见附录数组
//下面示例中为一个参数BOSUuid
var params = [BOSUuid.read("2s5eatuISSqb7TuLMfibSMSKQjo=")];
//使用客户端方法业务调用
var result=BOClientTool.callCmethod(pk,name,params);
MsgBox.showInfo("Result is"+result);
com.kingdee.eas.util.SysUtil.abort();
}
----
服务器端调用业务方法方式
com.kingdee.bos.framework.BOProxy.getProxy(plugin.getContext(),pk).callCmethod(methodSignature,args)
服务端上下文 Context ctx
元数据PK IMetaDataPK pk
方法名称 String methodSignature
参数对象数组(Object args)
参数获取方式参数客户端业务方法调用
客户端调用新增,修改,查询等动作,首先需要一个远程接口,通过:
var bizInterface=com.kingdee.bos.BOSObjectFactory.createRemoteCommonBOSObject(
new com.kingdee.bos.metadata.MetaDataPK(entityPK))
其中entityPK为自定义基础资料的路径+app+包名(实体的全名)
var opk=new com.kingdee.bos.dao.ormapping.ObjectUuidPK(
com.kingdee.bos.util.BOSUuid.read(id)
----
//创建值对象
funciton createNewData(entityPK){
var ObjectValue=new com.kingdee.eas.ep.DataBaseCustomInfo();
var entityBosType="这里是我的bostype" //bostype在元数据信息中可以得到
objectValue.setBOSType(new com.kingdee.bos.util.BOSObjectType(entityBosType));
//实体的PK,可通过元数据检查得
ObjectValue.setPK(new com.kingdee.bos.metadata.MetaDataPK(entityPK));
return objectValue;
}
var entityPK="com.kingdee.eas.basedata.assistant.app.Termsofapply";
var object=crateNewData(entityPK);
//通过实体PK获取自定义基础资料或单据接口,所需参数为实体pk
var bizInterface=com.kingdee.bos.BOSObjectFactory.createRemoteCommonBOSObject(
new com.kingdee.bos.metadata.MetaDataPK(entityPK));
bizInterface.addNew(object);//新增
((com.kingdee.eas.ep.DataBaseCustomInfo)object).setName(“TestName”);
object.setId(opk.getKeyValue("id"));
object.setName("myName");
bisInterface.update(opk,object);
//更新值对象
var fid = "87aUzEo7QWiREPo/LfoyDp3Uhts="
var entityPK = "com.kingdee.eas.basedata.assistant.app.Termsofapply";
var bizInterface=com.kingdee.bos.BOSObjectFactory.createRemoteCommonBOSObject(
new com.kingdee.bos.metadata.MetaDataPK(entityPK)
)
var opk=new com.kingdee.bos.dao.ormapping.ObjectUuidPK(com.kingdee.bos.util.BOSUuid.read(id))
//取得原值对象
var object=bizInterface.getValue(opk);
//更改值对象某些属性
object.setName("......");
//更新
bizInterface.update(opk,object);
//删除值对象
var fid = "87aUzEo7QWiREPo/LfoyDp3Uhts="
var entityPK = "com.kingdee.eas.basedata.assistant.app.Termsofapply";
var bizInterface=com.kingdee.bos.BOSObjectFactory.createRemoteCommonBOSObject(
new com.kingdee.bos.metadata.MetaDataPK(entityPK)
)
var opk=new com.kingdee.bos.dao.ormapping.ObjectUuidPK(com.kingdee.bos.util.BOSUuid.read(id))
bizInterface.deleteBatchData([opk])
值对象创建必须设置一个实体的bosType和PK,引擎是通过这两项进行ORMMapping的。删除、更新、查看等动作由于值对象都存在id,所以其可以自动解析获得,不需要手工设置bosType和PK。对于删除操作,需要用deleteBatchData,参数为ObjectUuidPK数组。