
# 一、需求背景
在实际工作中经常会遇到用户需要一些报表的场景,这时,可以考虑采用金蝶EAS标准模块扩展报表进行开发,也可以使用金蝶BOS进行开发,当然,也可以使用金蝶DEP进行开发。
本次方案就主要采用金蝶EAS DEP+网页版实现一个通用的报表查询工具。
# 二、实现思路
采用金蝶EAS动态扩展平台KScript+WAFⅡ的Rhino脚本实现
1. 在金蝶EAS客户端动态扩展平台新建方案
2. 在金蝶EAS客户端服务端实现查询方法
3. 在金蝶EAS客户端编辑界面利用表格实现数据展示
4. 在金蝶EAS Web端使用Rhino加Waf Ⅱ表格实现网页端展示
# 三、适用版本
客户端版本应该EAS所有版本通用,网页版的我是在8.5做的测试,不确定8.5以下版本是否支持。
***备注:自己使用,只要改动步骤三中的sql语句即可实现报表***
# 四、实现步骤-客户端实现方式
步骤一:在金蝶EAS客户端进入企业建模,从模板复制一个新的方案通用查询报表。



**步骤二:**实体新创建业务方法、事件。


步骤三:实现扩展定义中的脚本。

```java
//截图的中代码,后续可以替换getDataSql中的Sql语句
关键代码:
var imp = JavaImporter();
imp.importPackage(Packages.com.kingdee.eas.util.app);
imp.importPackage(Packages.java.sql);
imp.importPackage(Packages.com.kingdee.eas.util.client);
imp.importPackage(Packages.com.kingdee.bos.dao.query);
with(imp){
var ctx = pluginCtx.getContext();
var getDataSql = "";
var queryType = methodCtx.getParamValue(0);
var otherParams = methodCtx.getParamValue(1);
if(queryType.equals("companylist")){
getDataSql = "select FName_L2 AS 公司名称,FNumber AS 公司编码 from T_ORG_BaseUnit";
}
var row = DbUtil.executeQuery(ctx, getDataSql);
methodCtx.setResultValue(row);
}
```
步骤四:新加功能和工具栏。


步骤五:实现工具栏功能。

```java
var imp = JavaImporter();
imp.importPackage(Packages.com.kingdee.bos.ctrl.kdf.table);
imp.importPackage(Packages.java.text);
with(imp){
var metaPK = com.kingdee.bos.metadata.MetaDataPK.create("com.kingdee.eas.custom.mytestbill.app.GEQueryReport");
var methodSignature = "com.kingdee.bos.dao.IObjectCollection getDateMethod(String arg1, String arg2)";
var args = [companylist,""];
var dataCollection = com.kingdee.bos.framework.BOClientTool.callCmethod(metaPK,methodSignature,args);
var table = pluginCtx.getKDTable("kdtEntrys");
table.removeRows();
table.removeColumns();
var j = 0;
var metaData = dataCollection.getMetaData();
var columnsCount = metaData.getColumnCount()
table.addHeadRow(0);
table.addColumns(columnsCount);
for(j;j<columnsCount;j++){
table.getHeadRow(0).getCell(j).setValue(metaData.getColumnName(j+1));
KDTableHelper.autoFitRowHeight(table, j);
}
//table.getHeadRow(0).getCell().setValue();
var i = 0;
var k = 0;
for(i;i<dataCollection.size() ;i++){
dataCollection.next();
table.addRow();
k = 0;
for(k;k<columnsCount;k++){
table.getRow(i).getCell(k).setValue(dataCollection.getString(metaData.getColumnName(k+1)));
}
}
}
```
关键代码部分说明:
var metaPK = com.kingdee.bos.metadata.MetaDataPK.create("com.kingdee.eas.custom.mytestbill.app.GEQueryReport");
var methodSignature = "com.kingdee.bos.dao.IObjectCollection getDateMethod(String arg1, String arg2)";
var args = ["companylist",""];
com.kingdee.bos.framework.BOClientTool.callCmethod(metaPK,methodSignature,args);
以上这部分通过选择调用自定义业务方法,选择对应的获得sql查询的结果即可。
通过以上方式就已经实现了客户端上查询sql,并且以表格形式展现。

# 五、实现步骤-网页端实现方式
步骤一:Portal端创建业务单元


步骤二:进入编辑页面,设置功能

步骤三:新增页面功能

步骤四:增加后台脚本:

```java
var imp=JavaImporter();
imp.importPackage(Packages.com.kingdee.bos.webframework.json);
imp.importPac