当前位置: 代码迷 >> 综合 >> 金蝶EAS DEP脚本(1)—— 基本概念
  详细解决方案

金蝶EAS DEP脚本(1)—— 基本概念

热度:110   发布时间:2023-11-23 15:01:51.0

 

简介
  • 使用dep的好处:
    1. 免部署
    2. 易维护
    3. 逻辑代码与java相似
  • 使用dep的缺点:
    1. 没有代码提示
    2. 方法需要找对
    3. 涉及底层逻辑还是需要依赖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里扩展定义可编写扩展脚本,选择某个叶子节点即可编写针对该业务方法的前置脚本和后置脚本。
  • 前置脚本在业务方法被调用前被执行,后置脚本在业务方法返回后被执行。
  • 脚本中可以使用业务方法的参数,也可以设置业务方法的返回值。