EAS扩展脚本编写指南

更新时间:2023-12-03 04:22:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

定制平台系列

扩展脚本编写指南

简介

扩展脚本运行引擎为Rhino,基于javascript语法,运行期解释执行。jvm中的类的方法和属性均可应用于脚本中,调用方式类似于java代码编写。 比如下面一段脚本: //客户端设置编码规则脚本 var easNames = JavaImporter(); easNames.importPackage(Packages.com.kingdee.eas.base.codingrule); with(easNames){ var editData = pluginCtx.getDataObject(); var bizOrgUnit= pluginCtx.getKDBizPromptBox(\var number = CodingRuleManagerFactory.getRemoteInstance().getNumber(editData, bizOrgUnit.getId()); pluginCtx.getKDTextField(\} 其中 var easNames = JavaImporter(); easNames.importPackage(Packages.com.kingdee.eas.base.codingrule); 引入包com.kingdee.eas.base.codingrule,CodingRuleManagerFactory 属于该包中的内容,但其处在with(easNames){ … }中,所以不需要指定其全路径,即可调用getRemoteInstance()方法。如果没使用with指定作用域,则必须使用全名称(包名+类名)。

变量的定义声明遵循javascript语法,接口实现使用function声明。比如给一些控件增加监听器:

//F7控件增加值改变监听 pluginCtx.getKDBizPromptBox(\{ java.lang.System.out.println(\CHANGED:\+event.getOldValue() + \+ event.getNewValue()); }); //KDTable增加表格编辑事件监听 pluginCtx.getKDTable(\ if(methodName == \ { com.kingdee.eas.util.client.MsgBox.showInfo(\

} }); 上下文

扩展脚本中封装了两种上下文,插件上下文(pluginCtx)和方法上下文(methodCtx)。这两种上下文为系统内置,无需额外的声明或获取。

pluginCtx主要存放当前执行环境的相关信息,比如服务端的Context,客户端的界面控件、界面状态、编辑对象等。methodCtx存放当前操作的相关信息,包含方法参数和方法返回值。

插件上下文:

客户端和服务端的插件上下文存储的内容不一样,实现方式上,其分别对应于两个java类,com.kingdee.eas.ep.app.BeanParam和com.kingdee.eas.ep.client.UIParam。这两个类中的方法均可以在脚本中直接使用。

上下文都存在get和put方法。脚本中直接使用get(key)获取值,put(key,value)设置值。

服务端通过pluginCtx.getContext()获取服务端上下文,比如: //服务端更新单据状态 var imp = JavaImporter(); imp.importPackage(Packages.com.kingdee.eas.util.app); with(imp){ var ctx = pluginCtx.getContext(); var billId = methodCtx.getParamValue(0); var sql = \T_SD_SALEORDER SET FBASESTATUS = \+ status + \WHERE FID = '\DbUtil.execute(ctx, sql); }

客户端插件上下文封装了部分常用的内容,具体如下: //获取界面上下文 java.util.Map getUIContext() //获取组织上下文 com.kingdee.bos.Context getMainOrgContext() //获取界面状态,比如新增、编辑 java.lang.String getOprtState() //获取当前编辑对象,编辑界面的editData com.kingdee.bos.dao.IObjectValue getDataObject() //获取界面绑定 com.kingdee.bos.appframework.databinding.DataBinder getDataBinder() //获取规则处理 com.kingdee.eas.framework.client.UILifeCycleHander getLifeCycleHander() //获取当前界面实例 com.kingdee.bos.ui.face.IUIObject getUI() 直接通过pluginCtx调用即可,比如pluginCtx.getUI即可获取当前界面实例。

界面的控件可以通过get + 控件类型 + ( + 控件名 +)的方式获得,比如获取单据分录的表格可以这样pluginCtx.getKDTable(\。

方法上下文:

方法上下文存放了方法的相关信息,包括方法参数和方法返回值。方法上下文提供了如下常用方法: //获取方法名 String getName() //获取方法别名 String getAlias() //获取方法参数类型 String[] getParamTypes() //获取方法某个参数的类型 String getParamType(int index) //获取方法参数值 Object[] getParamValues() //获取方法某个参数值 Object getParamValue(int index) //获取方法返回值类型 String getResultType() //获取方法返回值 Object getResultValue() //设置方法返回值 void setResultValue(Object value) 如果想获得方法的某个参数,比如IObjectPK addnew(CoreBaseInfo model)的参数,这可以通过methodCtx.getParamValue(0)来获得model。同时可以通过methodCtx.getResultValue()来获

得方法的返回值。

注意:设置方法的返回值必须通过methodCtx.setResultValue(value)来设置,不可以用类似方法返回值的方式写(return value)。

可以通过定制平台的扩展定义中的上下文来快速编写一些常用脚本。

自定义业务方法

在实体或Fa?ade中新增一个业务方法后,如何调用该业务方法?

自定义业务方法的调用是通过工具类来实现的。工具类主要需要三个参数:元数据PK(IMetaDataPK pk),方法名称(String methodSignature),参数对象数组(Object[] args)。其中方法名称请从该业务方法的扩展点的描述信息中拷贝获得,否则容易出错,如果方法没有返回值,注意名称前有空格,不要删除。

客户端调用业务方法方式:

com.kingdee.bos.framework.BOClientTool.callCmethod(pk,methodSignature,args) 比如: //客户端调用服务端方法 var easNames = JavaImporter(); easNames.importPackage(Packages.com.kingdee.bos.ctrl.extendcontrols); easNames.importPackage(Packages.com.kingdee.bos); easNames.importPackage(Packages.com.kingdee.bos.util); easNames.importPackage(Packages.com.kingdee.bos.metadata); easNames.importPackage(Packages.com.kingdee.eas.util.client); easNames.importPackage(Packages.com.kingdee.bos.framework); with(easNames){ var pk = new MetaDataPK(\ var name = \ var params = [BOSUuid.read(\ var result = BOClientTool.callCmethod(pk,name,params); MsgBox.showInfo(\ com.kingdee.eas.util.SysUtil.abort(); } 服务器端调用业务方法方式:

com.kingdee.bos.framework.BOProxy.getProxy(ctx,pk).callCmethod(methodSignature,args)

本文来源:https://www.bwwdw.com/article/wr5t.html

Top