反馈已提交
网络繁忙
在做填报报表时,希望点击提交按钮后,获取到填报页面的数据做一些自定义的处理,要如何实现呢?
在「报表填报属性」章节中介绍了报表填报属性有 2 种设置方式,一个是内置 SQL 直接绑定字段,往数据库中填报数据,另外一种是添加自定义事件。如果需要获取数据后对数据进行自定义处理,则可选择使用自定义提交。
1)自定义提交的本质是获取页面数据后做自定义的处理,所以获取值后的代码部分需要用户自己根据业务需求编写和维护。
2)暂不支持回调,即将数据处理的结果返回给页面展示。
3)自定义提交支持移动端使用。
新建数据集 ds1,从FRDemo取数,SQL 语句为:SELECT * FROM S产品 limit 3
设计填报表格,将数据集相应字段拖到单元格中,A2 单元格添加「数字控件」,B2 单元格添加「文本控件」,表格样式如下图所示:
参考以下代码可获取相应的模板数据,之后就可以按自定义的需求对数据做处理。
package com.fr.data;import com.fr.log.FineLoggerFactory;import com.fr.script.Calculator;public class SubmitDemo extends DefinedSubmitJob { public String getJobType() { return " "; } /** * 当模板填报属性增加的参数名与下面变量名一致时,则会自动赋值于此对应变量 * JobValue代表绑定的值为单元格,其他类型数据需按照各自类型去定义类,例如字符串为String * 不支持单元格组 */ private JobValue ID; private JobValue Name; private String Type; private Integer Count; /** * 每一条记录执行一次此方法 */ public void doJob(Calculator calculator) throws Exception { FineLoggerFactory.getLogger().error("---------ID:" + ID.getValue() + ",Name:" + Name.getValue() + ",Type:" + Type + ",Count:" + Count + "------------"); //在fanruan.log以error级别输出获取到的参数值 if (ID.getState().checkChanged()) { //FineLoggerFactory.getLogger().error("---------修改:"+ID.getValue()+"------------"); // 在fanruan.log以error级别输出被标记为"修改"的数据 } else if (ID.getState().checkInsert()) { //FineLoggerFactory.getLogger().error("---------新增:"+ID.getValue()+"------------"); // 在fanruan.log以error级别输出被标记为"新增"的数据 } else if (ID.getState().checkDeleted()) { //FineLoggerFactory.getLogger().error("---------删除:"+ID.getValue()+"------------"); // 在fanruan.log以error级别输出被标记为"删除"的数据 } else if (ID.getState().checkDefault()) { //FineLoggerFactory.getLogger().error("---------默认:"+ID.getValue()+"------------"); // 在fanruan.log以error级别输出被标记为"默认"的数据 } }}
1)需要在 2.3.1 节代码的基础上导入以下包:
import com.fr.general.FArray;import com.fr.cache.Attachment;import com.fr.stable.xml.FRFile;
2)文件控件上传的文件,需要在使用JobValue.getValue()后做进一步的处理,才能获取到文件名和文件流。
假设文件单元格对应的参数名为FName,在使用private JobValue FName定义好对象之后,参考下方代码处理:
if (FName.getValue() instanceof FArray) { FArray farray = (FArray) (FName.getValue()); for (int i = 0; i < farray.length(); i++) { Attachment cache = (Attachment) (farray.elementAt(i)); FineLoggerFactory.getLogger().error("------filename:" + cache.getFilename() + "--------"); //getFilename()获取文件名 FineLoggerFactory.getLogger().error("------file:" + cache.getBytes() + "--------"); //getBytes()获取文件流 } }else if (FName.getValue() instanceof FRFile){ FRFile cache = (FRFile) FName.getValue(); FineLoggerFactory.getLogger().error("------filename:" + cache.getFileName() + "--------"); //getFilename()获取文件名 FineLoggerFactory.getLogger().error("------file:" + cache.getBytes() + "--------"); //getBytes()获取文件流 }
1)点击「模板>报表填报属性」,新增一个自定义提交,点击编辑按钮,如下图所示:
2)将上面的Java 代码复制到自定义函数编辑界面,点击「编译」按钮,显示编译成功后,点击「保存」按钮,如下图所示:
注:除了上述编译方式外,也可以将外部编译好的 class 文件放到 %FR_HOME%\webapps\webroot\WEB-INF\classes 文件夹下和代码中定义的 package 路径一致的位置,然后点击「选择按钮」引用 class 文件。若修改替换了 class 文件,则需要重启设计器或帆软服务,修改的代码才会生效。
点击可下载 class 文件:SubmitDemo.rar
3)点击增加属性按钮,给提交事件添加 4 个属性,注意值的类型需要和代码中定义的类型一致,如下图所示:
使用填报预览,点击提交按钮,查看日志。
注:支持移动端预览。
点击下载模板:自定义提交.cpt
售前咨询电话
400-811-8890转1
在线技术支持
请前往「服务平台」,选择「在线支持」
热线电话:400-811-8890转2
总裁办24H投诉
热线电话:173-1278-1526
文 档反 馈
鼠标选中内容,快速反馈问题
鼠标选中存在疑惑的内容,即可快速反馈问题,我们将会跟进处理。
不再提示
10s后关闭