5步搞定!超实用的EAS通用报表开发教程
# 一、需求背景
在实际工作中经常会遇到用户需要一些报表的场景,这时,可以考虑采用金蝶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客户端进入企业建模,从模板复制一个新的方案通用查询报表。
![image.webp](/download/010048103ea165434367855cc7881f07ff4f.webp)
![image.webp](/download/0100706ae292cb96403db9804455bed65ac4.webp)
![image.webp](/download/010091d50218246c4640930bce1613af4907.webp)
**步骤二:**实体新创建业务方法、事件。
![image.webp](/download/010070f324bc837647408a1d4c7d773f33fa.webp)
![image.webp](/download/0100529f8f5f4a3440ba85281327c9573ebe.webp)
步骤三:实现扩展定义中的脚本。
![image.webp](/download/01002a34ad9c53ec4d0d9c478fc7b0ac0f4b.webp)
```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);
}
```
步骤四:新加功能和工具栏。
![image.webp](/download/010072f92908be184682910bb8d51b763625.webp)
![image.webp](/download/01005ff4f7e51c3546a1af7272bc0d50390c.webp)
步骤五:实现工具栏功能。
![image.webp](/download/0100ad5d958707f142e78827bfa5f6996a75.webp)
```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,并且以表格形式展现。
![image.webp](/download/01006f3d7717b0304f7389ee3574c99f77ff.webp)
# 五、实现步骤-网页端实现方式
步骤一:Portal端创建业务单元
![image.webp](/download/0100bc19f045307b411fadb04e7710c7bc74.webp)
![image.webp](/download/01006022ad9e0bca4ccba84f352004b768aa.webp)
步骤二:进入编辑页面,设置功能
![image.webp](/download/0100f4dac9d93732460a98a1ead63e8e2853.webp)
步骤三:新增页面功能
![image.webp](/download/0100247b530f3ac24be8a75a3b2e21e19b71.webp)
步骤四:增加后台脚本:
![image.webp](/download/01000bbc97ca8ddb4e909f17e320109eff2c.webp)
```java
var imp=JavaImporter();
imp.importPackage(Packages.com.kingdee.bos.webframework.json);
imp.importPackage(Packages.javax.servlet.http);
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);
JSONUtils.SUCCESS(dataCollection);
}
```
步骤五:增加按钮和功能绑定
![image.webp](/download/0100e9de906677e542b093fccf9183797dda.webp)
步骤六:增加前端脚本
![image.webp](/download/0100b1b69ae5d85d469388c49ac448020c8e.webp)
```java
waf.extend(_private,{
getQueryData:function(e){
waf.doPost({
action:"getQueryDataService",
data:{},
success:function(data){
var colIndex = 0;
for(var p=0;p<data.rowSetMD.colCount;p++){
colIndex = "col" + p ;
waf("#editgrid").wafGrid("addColumn",{index:colIndex,width:30,label:data.rowSetMD.colInfo[p+1].columnName,align:"center",name:colIndex},p+1,true);
}
var rowData = "";
for(var j = 0;j<data.cachedRows.length;j++){
//列循环
rowData = "";
for(var k = 0; k<data.rowSetMD.colCount;k++){
rowData = String(rowData + "col" + k + ":'" +
data.cachedRows[j].vals[k] + "',");
}
rowData = eval("(" + "{" + rowData + "}" + ")");
waf("#editgrid").wafGrid('addRow',{data:rowData});
}
}
});
}
});//@endPrivate
```
步骤七:将查询功能发布到菜单中(菜单一定要发布到末级菜单下,不然不会展示菜单
![image.webp](/download/01000ef38ef5858847f9bb502c13a2d29096.webp)
步骤八:效果展示
![image.webp](/download/010011db2b49e99340cfb31cdbfa63f40c3f.webp)
![image.webp](/download/0100bad60b93a55a4da1a7f1f2252eaef43c.webp)
# 方案总结
本方案成本低,后期扩展性好,灵活性高。而且由于全部使用dep实现,也无需考虑后期更新补丁的兼容性等问题。
后续如需展示其他报表,则将sql语句的内容进行修改即可。
# 其他知识
- 超级推荐:dep扩展开发知识和示例脚本非常多:金蝶EAS Cloud 帮助中心:https://wenku.my7c.com/knowledge/atlas?productLineId=8
- 在EAS Portal扩展的方案在客户端查看方式https://wenku.my7c.com/article/185535809829831424?productLineId=8
- DEP中判断以后返回值-可用于工作流和其他判断https://wenku.my7c.com/article/296775531112869120?productLineId=8
- DEP开发规范-1https://wenku.my7c.com/school/43439147433132032?productLineId=8
- DEP开发基础介绍-1https://wenku.my7c.com/school/43439147064033280?topicId=134352673994254848&stageId=10352420000229260&productLineId=8
- 脚本案例-为F7字段设置默认值https://wenku.my7c.com/school/43439149073104896?topicId=134352673994254848&stageId=10352420000229260&productLineId=8
玩转金蝶云社区:https://vip.kingdee.com/link/s/lORXK
看到的伙伴帮忙点点,谢谢了。
网页端建议使用这个类:
com.kingdee.bos.framework.BOProxy.getProxy(ctx,metaPK).callCmethod(methodSignature,args);
不要用:
com.kingdee.bos.framework.BOClientTool.callCmethod(metaPK,methodSignature,args); 这个类
66666
6666
大写的666
赞
5步搞定!超实用的EAS通用报表开发教程
# 一、需求背景在实际工作中经常会遇到用户需要一些报表的场景,这时,可以考虑采用金蝶EAS标准模块扩展报表进行开发,也可以使用金蝶BOS...
点击下载文档
本文2024-09-16 22:00:05发表“eas cloud知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-eas-45290.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章