简介
- 使用dep的好处:
- 免部署
- 易维护
- 逻辑代码与java相似
- 使用dep的缺点:
- 没有代码提示
- 方法需要找对
- 涉及底层逻辑还是需要依赖java代码
一、扩展脚本运行引擎为Rhino,基于javascript语法,运行期解释执行。jvm中的类的方法和属性均可应用于脚本中,调用方式类似于代码调试。
- 比如下面一段脚本:
<span style="color:#000000"><code>//客户端设置编码规则脚本
//定义引入变量
var easNames = JavaImporter();
//引入指定包
easNames.importPackage(Packages.com.kingdee.eas.base.codingrule);
//使用引入作用域
with(easNames){
//从上下文中获取编辑界面编辑对象
var editData = pluginCtx.getDataObject();
//取得F7控件
var bizOrgUnit = pluginCtx.getKDBizPromptBox("prmtCompanyOrgUnit").getValue();
//远程方法调用获取编码
var number = CodingRuleManagerFactory.getRemoteInstance().getNumber(editData, bizOrgUnit.getId());
//设置TextField编码
pluginCtx.getKDTextField("txtNumber").setText(number);
}
</code></span>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
指定作用域
在示例代码中
<span style="color:#000000"><code>var easNames = JavaImporter();
easNames.importPackage(Packages.com.kingdee.eas.base.codingrule);
</code></span>
- 1
- 2
- 和java中import类似,这里使用JavaImporter()的importPackage引入包com.kingdee.eas.base.codingrule,CodingRuleManagerFactory 属于该包中的内容,但其处在with(easNames){ … }中
- 所以不需要指定其全路径,即可调用getRemoteInstance()方法,如果需要引入其它包,则增加easNames.importPackage(Packages.包路径);即可。
- 如果没使用with指定作用域,则必须使用全名称(包名+类名)。
注意:当引入的不同包路径下有重复的类名称情况下,在with(easNames){作用域中,该类名在引用时也需要指定其全路径。
变量
使用var 声明变量,声明时无具体类型运行期确定类型。例如var editData = pluginCtx.getDataObject();声明editData为编辑界面的编辑对象。变量的定义声明遵循javascript语法。
函数
使用 function 关键字开始函数的声明,在函数声明中看不到类型,包含参数和返回值,如下所示
<span style="color:#000000"><code>//创建值对象
function createNewData(entityBosType, entityPK){
var objectValue = new com.kingdee.eas.ep.DataBaseCustomInfo();
objectValue.setBOSType(entityBosType);
objectValue.setPK(new com.kingdee.bos.metadata.MetaDataPK(entityPK));
return objectValue;
}
</code></span>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
然后就可以调用了定义的函数了
<span style="color:#000000"><code>var bizInterface = com.kingdee.bos.BOSObjectFactory.createRemoteCommonBOSObject(new com.kingdee.bos.metadata.MetaDataPK(entityPK));
//新增
bizInterface.addnew(createNewData(entityBosType, entityPK));
</code></span>
- 1
- 2
- 3
在javaScript中没有类的概念,接口实现也使用关键字function声明。比如给一些控件增加监听器:
<span style="color:#000000"><code>//F7控件增加值改变监听
pluginCtx.getKDBizPromptBox("prmtHROrg").addDataChangeListener(function (event){
// 改变前的值
event.getOldValue() ;
// 改变后的值
event.getNewValue()
com.kingdee.eas.util.client.MsgBox.showInfo (
"DATA CHANGED:" +event.getOldValue() +
event.getNewValue());
});
//KDTable增加表格编辑事件监听
pluginCtx.getKDTable("kdtEntrys").addKDTEditListener(function(event,methodName){
// 当状态为编辑完成时触发
if(methodName == "editStopped"){
com.kingdee.eas.util.client.MsgBox.showInfo("$$$$$EditStopped");
}
});
</code></span>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
使用扩展脚本
- 扩展定义:针对扩展点编写扩展脚本。
- 扩展点:能够支持扩展脚本的公用业务方法,需要改变其执行效果预期的地方。
- 在实体或ui里扩展定义可编写扩展脚本,选择某个叶子节点即可编写针对该业务方法的前置脚本和后置脚本。
- 前置脚本在业务方法被调用前被执行,后置脚本在业务方法返回后被执行。
- 脚本中可以使用业务方法的参数,也可以设置业务方法的返回值。