单元格表单(lczExcel)允许数据填报,其集成方式与智能报表(lczReport)基本相同,在其基础上增加了部分用于控制数据回写及校验的请求参数。
1 集成说明
请参考智能报表集成说明。
2 访问规范
请参考智能报表访问规范说明。
3 请求参数
基本参数请参考智能报表请求参数说明,电子表格表单增加了填报时特有的参数。
填报参数
参数名 |
类型 |
默认值 |
说明 |
---|---|---|---|
reportWriteable | boolean | true | 执行模式。true:填报模式执行,false:普通报表方式执行。 |
reportReadOnly | boolean | false | 填报模式执行时,控件(链接按钮除外)都已只读方式呈现,也不允许提交数据。 |
DN_SubmitType | int | 0 | 数据回写时的提交方式: 0-智能模式, 1-新增模式, 2-修改模式。 |
DN_SubmitVerify | boolean | false | 提交前完整校校验。 |
DN_AutoRefresh | boolean | false | 提交成功后自动刷新。 |
externalAlterMode | boolean | false | 采用外部提示模式,当集成到任务系统时,希望由业务系统统一进行信息提示(如“保存成功”、“提交失败”等),通过设置此参数为true,则系统内部在提示相关信息。 |
4 前端事件
同理智能报表的前端事件在电子表格中也适用,并且还增加了填报表单特有的事件。
事件名 |
说明 |
---|---|
saveReportBefore | 表单提交前事件。 |
saveReportAfter | 表单提交后事件。 |
reportModified | 表单变脏后事件。 |
注意:V6.62版本开始可以在报表模板文件的对应事件中编写JS代码。
5 方法
二次开发程序可以调用相应的方法触发表单的功能。
功能 |
方法名 |
说明 |
---|---|---|
保存 | ER.save() | 本方法是异步调用,无返回值,需要监听saveReportAfter事件 |
导入Excel | ER.importExcel() | 本方法是异步调用,无返回值 |
检测表单是否变脏了(修改后,未保存) | ER.isModified() | 变脏了:返回true,否则返回false |
6 整合示例
监听保存后事件示例:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<title>二次示例</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<script type="text/javascript" src="js/jquery.min.js" ></script>
<script type="text/javascript" src="所属目录路径/ER_toolkit.js" ></script>
</head>
<body style="-webkit-touch-callout:none;width:100%;height:100%;padding:0;overflow:hidden;margin:0;border:0 none;" >
<iframe id="myRpt" style="width:1024px;height:650px;" ></iframe>
<script type="text/javascript">
ER_load_jquery_js(); //注意:标识整合页面已经加载过jQuery了
var rptUrl='http://127.0.0.1:8081/lczServer/hrServlet?fileName=hte_151010113821360&targetVolume=app_20160809143122&authId=anonymous_admin';
var rptframe = $('#myRpt');
if (rptframe && rptframe.length > 0) {
rptframe.attr('src', rptUrl);
rptframe.bind('load', function() {
if (this.contentWindow.ER) { //注意:整合时,如果存在跨域情况,ER对象将访问不到。
var rptER = this.contentWindow.ER;
var rptFn = rptER.fn;
var rptEvents = rptER.events;
if (rptEvents && rptFn) {
rptEvents.reportModified(function() {
//表单变脏了
});
rptEvents.saveReportAfter(function() {
//绑定表单提交后事件
var saveResult = rptFn.getSaveStatus();
if ('success' === saveResult) {
//保存成功
var saveDetail = rptFn.getSaveDetails(); //保存详情信息
//单工作表
var cellValue = rptER.getCellValueByAlias('单元格名称');
//多工作表
var cellValue = rptER.getCellValueByAlias('单元格名称', null, '工作表名称');
} else if ('none' === saveResult) {
//无修改内容
} else {
//保存失败了
var errInfo = rptFn.getErrorMsg(); //错误信息
var errDetail = rptFn.getSaveDetails(); //错误详情
}
});
}
}
});
}
</script>
</body>
</html>
以二次开发程序主动检查表单是否变脏了示例:
<script type="text/javascript">
var rptframe = $('#myRpt');
if (rptframe && rptframe.length > 0) {
if (rptframe[0].contentWindow.ER) {
var rptER = rptframe[0].contentWindow.ER;
if (rptER) {
if(rptER.isModified()) {
//表单变脏了
}
}
}
}
</script>
7 个性化定制
请参智能报表中个性化定制相关内容。
8 常见问题
问题1、跨域访问乐创者报表时有什么注意事项?
答:跨域访问时,以下功能将会受限:
(1) 乐创者报表中的超链接弹窗将无法显示到Window.top中;
(2) 第三方页面将无法调用iframe中报表对象及方法。
建议通过以下解决方案解决跨域问题:
(1) 业务系统和乐创者服务部署到一个Web服务器中;
(2) 通过nginx代理将业务系统和乐创者服务代理成同源。
问题2、移动端如何访问报表?
答:与PC端URL请求地址一致,乐创者服务会自动识别客户端类型;当某些特定的设备无法识别为移动设备时,可追加&mobileClient=true,强制按照移动模式渲染。
作者:柳杨 创建时间:2023-08-02 19:07
最后编辑:柳杨 更新时间:2025-04-22 15:31
最后编辑:柳杨 更新时间:2025-04-22 15:31
