Smartbi回写填报
一、分组列表式报表补录
1.1、需求说明
分组列表式报表补录回写是指分组报表以列表方式列出报表数据,并对报表数据(可以是多条记录操作)进行修改、增删后回写补录到报表对应的数据表中。
满足需求:
(1)可以修改多条数据回写不同的记录到回写表中;
(2)可以插入/删除行来实现增删数据;
(3)回写表和分组报表对应查询使用的是同一张表,即回写成功后刷新报表即可看见回写效果。
1.2、操作步骤
1.2.1创建回写库和回写表
创建一个"MySQL"类型的名为"writedb"的回写库,在回写库中按照如下规则创建回写表"supplier"。
字段ID |
字段名称 |
类型 |
是否可为空 |
是否主键 |
SupplierID |
供应商ID |
char(50) |
N |
Y |
CompanyName |
公司名称 |
char(255) |
Y |
N |
ContactName |
联系人 |
char(255) |
Y |
N |
Address |
地址 |
char(255) |
Y |
N |
Phone |
电话 |
char(50) |
Y |
N |
1.2.2连接回写库和添加回写表
(1)在浏览端“系统管理界面”资源目录区的“数据源”中连接以上创建好的回写库,以数据源连接的名称为“回写”。
(2)在数据库管理中添加回写表
1.2.3创建电子表格
基于回写表Supplier创建可视化查询,并在输出字段属性中修改字段别名
根据查询创建电子表格,属性设置为默认即可
此时预览清单报表,工具栏上无回写相关按钮
1.2.4设置回写规则
在报表设计器中选择工具栏上回写规则,弹出“回写规则”对话框
1.2.4.1新增回写规则
回写规则--新增规则—填写名称、选择库表
1.2.4.2添加列字段及映射关系
(1)将当前报表中的数据与回写表中的字段做映射关系,设置回写表中各列回写的值。单击 所有列按钮,在值区域,则会出现所有列对应的表达式。
(2)双击SupplierID字段对应主键单元格。双击或是右键设为主键。可以分别选中所有行,修改其"值"输入对应的单元格。如SupplierID字段对应"A3"单元格。
1.2.4.3发布
确认保存后,发布,预览数据,工具栏上出现回写相关按钮,但是双击单元格无法修改,插入/删除也无法应用。
设置单元格填报属性后,才能修改数据,点击回写后写入回写库。
1.2.5设置填报属性
1.2.5.1设置数据可修改
在报表设计器中分别选中B3、C3、D3和E3对单元格,点击工具栏上 填报属性 按钮,则弹出"单元格填报属性"对话框。
在对话框中设置E3单元格为"允许修改",并选择为"单行文本"。
1.2.5.2设置允许插入/删除行
选择A3单元格"供应商编号"对应的单元格,设置其填报属性为"允许修改","数字",勾选"可以插入/删除行"。
1.2.6执行回写
发布报表,浏览器端打开报表,即可补录回写数据。
(1) 数据修改:双击单元格--修改数据—保存,可查看数据库及报表中都为修改后数据。
(2) 插入/删除行:选中单元格--添加/删除—保存,可查看数据库及报表中有新增或减少数据。
二、表单补录
表单报表补录回写是指以表单的方式填写报表数据,存储到数据库中。每次回写只存储一条记录,表单补录一般用于新增数据。
2.1需求说明
填写顾客相关信息为例演示表单补录,在对应的单元格中输入相关顾客信息,则会添加到数据库中。
2.2操作步骤
2.2.1准备回写表
在对应的回写库中新建一个名为"customers"的回写表。并在数据库管理中添加。
字段ID |
字段名称 |
类型 |
是否可为空 |
是否主键 |
CustomerID |
顾客ID |
char(100) |
N |
Y |
CompanyName |
公司名称 |
char(255) |
Y |
N |
ContactName |
联系人 |
char(100) |
Y |
N |
Phone |
电话 |
char(50) |
Y |
N |
Fax |
传真 |
char(50) |
Y |
N |
Address |
地址 |
char(255) |
Y |
N |
2.2.2创建电子表格
表样如图(不关联任何数据集):
2.2.3回写设置
将模板中的字段与回写库中回写表"customers"做映射关系,并设字段"CustomerID"为主键。
(注:回写规则必须设置主键)
2.2.4填报属性
在报表设计器中设置数据项B2、B3、D3、B4、D4、B5的填报属性为"单行文本"。
2.2.5执行回写
在浏览器端打开该报表,输入相关顾客资料(如下图),单击 保存 按钮,弹出"填写内容保存成功"信息。
(注:当录入的顾客编号在回写表中已经存在时,系统将提示“主键或唯一约束冲突”,当前回写无效。)
到回写表中可以看到以上数据已经写入到回写表。
三、单元格绑定参数
电子表格回写时,用户进行单元格输入时,不是用文本框输入,而需要一个下拉框、日期控件、甚至是一个可模糊查找的对话框。可通过对回写单元格绑定参数来实现。
3.1需求说明
以【区域】回写字段为例,在进行回写的操作时可以下拉选择区域名称,并将名称回写到数据库中。
3.2操作步骤
3.2.1新建[区域]参数
资源定制--公共参数—参数定义—新增参数
3.2.2创建数据
创建数据集
3.2.3创建电子表格
(1)绘制静态表格:
(2)在右侧数据集面板中找到步骤2中创建的数据集,将字段拖拽到相应的单元格,并设置扩展属性。
3.2.4设置填报属性
B4、C4设置单元格填报属性分别为允许修改-数字-可插入/删除行;允许修改-单行文本;
D4设置单元格填报属性为:
单元格填报属性—允许修改—参数—绑定参数—选择新建参数—确定
3.2.5设置回写规则
在回写规则中设置回写库及回写表
3.2.6发布预览
3.3单元格绑定参数—回写真实值
3.3.1需求说明
在使用电子表格实现填报的过程中针对于不同的使用场景可能会遇到这样的一个问题:单元格的填报属性为绑定参数,绑定的参数存在真实值和显示值,真实值和显示值是不同的。现需要回写到数据库中的是参数的真实值,但是报表需要显示出显示值。
3.3.2操作步骤
3.3.2.1新建转换规则
资源定制—公共设置—转换规则—新建转换规则(真实值为区域编号,显示值为区域名称)—确认
3.3.2.2创建数据集
select SupplierID as SupplierID,ContactName as ContactName,Region as Region from writetable;
预览数据:
3.3.2.3设置转换规则
在数据集中找到输出字段“区域编号”,在右下角属性设置区中,转换规则一项选择步骤1中的转换规则。将数据集中区域编号字段的数据显示为区域名称。
预览数据:
3.3.2.4创建参数
资源定制—公共参数—参数定义—新建参数(设置参数真实值为区域编号,显示值为区域名称)--确认
3.3.2.5创建电子表格
3.3.2.6设置单元格属性显示值
双击区域编号字段所在的单元格D4,在弹出的单元格属性窗口中切换到“其他”页签下,勾选“使用显示值”。使得报表展示时,查看到的区域数据为区域的名称。
报表预览如下:
3.3.2.7设置填报属性及回写规则
同3.2.4、3.2.5
3.3.2.8设置绑定参数“使用显示值”
3.3.2.9发布预览
3.4单元格绑定参数—回写显示值
3.4.1需求说明
区域单元格绑定了机构参数,机构参数为下拉树参数,存在真实值和显示值,真实值为机构编码,显示值为机构名称。
回写到数据库中,回写数据为机构名称
3.4.2操作步骤
3.4.2.1创建数据集
预览数据:
3.4.2.2创建参数
资源定制—公共设置—参数定义—新建参数(下拉树)--确认
(说明:由于机构名称存在重复,为保证数据唯一性,使用机构编码作为真实值)
3.4.2.3创建电子表格
3.4.2.4设置公式
在E4单元格中输入公式=D4
3.4.2.5设置填报属性及回写规则
B4、C4、D4的填报属性分别为允许修改-数字-可插入/删除行,允许修改-单行文本,允许修改-参数绑定参数(机构)-使用显示值;
回写规则设置回写库和回写表,注意部门列对应的单元格是E4
3.4.2.6设置隐藏列
将E4列隐藏
3.4.2.7发布预览
发布预览,保存电子表格,预览回写操作如下:
3.5单元格绑定平铺参数
3.5.1需求说明
需要对单元格中绑定一个多选框或者单选框控件,并要求给控件设置一个默认选择的值。如以下示例中的基本信息报表中的“性别”控件需要默认选择一个性别(男)。
(注:只有平铺参数才支持在单元格绑定参数时设定默认值)
3.5.2操作步骤
3.5.2.1新建[性别]参数
资源定制—公共设置—参数管理—新建参数(控件类型选择平铺勾选面板)--确认
3.5.2.2在excel中设置报表回写属性
选择需要编辑的电子表格,选择性别单元格,设置填报属性为绑定参数。
3.5.2.3在excel中设置[性别]控件默认值
设置默认选中"男"是指在参数所在的单元格上输入参数默认值“男”
3.5.2.4发布电子表格
3.6接收外部传参显示参数默认值
3.6.1需求说明
在使用电子表格实现填报的过程中针对于不同的使用场景可能会遇到这样的一个问题:回写单元格填报属性为参数时(平铺面板参数),需要实现如下两个场景:
(1)如何接收外部参数实现打开报表的时候默认勾选上平铺面板参数复选框。
(2)在回写时如何实现通过是否勾选复选框回写不同数值,比如说勾选时回写到数据库的是1,不勾选时回写到数据库是0。
3.6.2操作步骤
3.6.2.1新建参数
(1)新建选择参数
需求为三个单元格绑定各自的参数,因此新建三个参数。另外两个参数“是否留联系方式”“是否有推荐人”,和截图显示的“自我介绍全名”参数设置一样。
(2)新建接收传参参数
(说明:因为在这个需求中,都是采取同一个参数去作为字段接收值的参数的,因为这个地方要使用输出不合并,如果合并的话,就只能是显示一个参数框。也可以自行新建3个参数各自对应上报的3个参数。
)
3.6.2.2新建数据集及电子表格
(1)新建数据集,用于拖拽到单元格中,可接收外部传入参数值,并最终用于单元格填报属性绑定参数接收外部传入值显示在报表上。
(2)新建电子表格
3.6.2.3设置填报属性及字段显示
(1)设置填报属性,对应单元格分别绑定“自我介绍全名”、“是否留联系方式”、“是否有推荐人”;
(2)设置“姓名”、“电话”、“推荐人”为单行文本
3.6.2.4设置回写规则
3.6.2.5发布预览
(1)传值为1,1,0,效果如下:
(2)传值为0,1,0,效果如下:
四、电子表格回写时下拉框联动
4.1需求说明
电子表格报表设置回写,用户希望用两个下拉框输入时,可以实现联动的效果,一个下拉框的备选值随着另一个下拉框的选择动态变化。电子表格中是用绑定参数的方式实现输入控件的,因此需要用一个参数中的值去控制另一个参数中的值。可以通过在电子表格中引用联动参数实现。
(1)当【客户所在区域】选择的是"华南",则【客户所在城市】选择项有"深圳、夏门、海口"。
(2)当【客户所在区域】选择的是"西北",则【客户所在城市】选择项有"西安"。
4.2操作步骤
4.2.1新建联动参数
选两个参数,一个父级参数,如案例中的【区域_联动】参数。再建一个子级参数,如案例中的【顾客所在城市】参数,并在子级参数中引用父级参数。
4.2.2单元格绑定参数
选择要绑定的单元格,如案例中的B2、B3两个单元格。
(1)选择B2—填报属性—参数—绑定参数—[区域联动]
(2)选择B3—填报属性—参数—绑定参数—[顾客所在区域]
(3)B3单元格的【左父格】设置为B2单元格。
五、默认填写填报人
5.1需求说明
对电子表格报表回写时,当新增一条记录时,希望新增的记录中自动填入当前用户名称作为记录的填报人,不需要用户进行手动填入。并且该电子表格数据来源于数据集,能够查询出数据库中的记录。
5.2操作步骤
5.2.1新建数据集
5.2.2新建电子表格
5.2.3添加公式
填报人数据F4单元格内容为公式:=IF(G4<>"",G4,SSR_GetCurrentUserName())。该公式是判断c_recorder字段是否为空,若为空,则设置F4单元格的内容为当前用户名。若c_recorder字段不为空,则显示对应的c_recorder字段的内容
(1)若F4单元格内容直接设置为c_recorder字段,则插入新行时,不会自动填入填报人
(2)若F4单元格内容直接设置为=SSR_GetCurrentUserName即当前用户名,则进行报表查看时,所有记录的填报人均变成当前用户名
5.2.4设置回写规则
C_recorder字段回写单元格为F4
六、电子表格回写图片到数据库
6.1需求说明
有时在使用电子表格填报的过程中不仅需要将字段回写进数据库,也需要将图片回写进数据库,并在界面上显示该图形。
6.2操作步骤
6.2.1新建电子表格
6.2.2新建回写规则
6.2.3设置填报属性
设置填报属性,其中类别id、类别名称、描述都为单行文本,图片为文件。
6.2.4显示图形
选中要显示为图形的字段,该例中是产品图形,在【格式】中将其设置为【图片】,如图,设置好后发布即可。
6.2.5注意事项
(1)若数据库为Mysql数据库,在回写的数据源连接字符串中需要添加“&useServerPrepStmts=true”,例如上面例子中将数据回写进northwind数据库中,则需要在northwind的连接字符串中添加“&useServerPrepStmts=true”,如下图:
(2)若回写库为sqlserver数据库,存储图片的字段类型应设置为image。
(3)ORACLE的字段类型:BLOB
七、主键自增
7.1需求说明
在电子表格中回写,可以实现主键不需要输入,当保存数据时,主键字段会自行+1保存。
7.2操作步骤
7.2.1创建回写表
在对应的回写库中新建一个表,名为“testwrite”,并且c_code为Auto Incr,自增
7.2.2创建电子表格
创建电子表格,不关联任何数据集
7.2.3回写设置
设置该电子表格回写到步骤1中的testwrite表中。并且c_code绑定一个没有内容的单元格,如A1。其他字段绑定对应的单元格
7.2.4设置自增
设置c_code为主键,右键,选择“设置主键(自增)”。
(注:设置为"主键(自增)”的字段,表示该字段的数据回写时不进行操作,而是由数据库自行处理。
)
7.2.5填报属性
设置C5、C7、F7的填报属性为单行文本,F5单元格的填报属性为数字。A1单元格不需要设置填报属性
7.2.6执行回写
在浏览器端打开该报表,输入相关内容,点击保存,即会向数据库中插入一条新的数据,并且c_code字段+1
八、验证邮箱格式
8.1需求说明
在电子表格中进行数据填写补录时,可以通过正则表达式设置项对补录的数据进行校验。在该回写报表中,通过正则表达式,对邮箱地址进行了校验。当输入的邮箱地址不符合时,弹出相应的提示。
8.2操作步骤
8.2.1创建回写表
在数据库中创建表,用于存储回写补录的数据。表名为“contacts2”。
8.2.2创建电子表格
创建电子表格,不关联任何数据集。
8.2.3回写设置
设置该电子表格回写到步骤1中的contacts2表中。
8.2.4填报属性
8.2.4.1设置其他单元格属性
C5设置为数字,F5和C7设置为单行文本,C9设置为多行文本。
8.2.4.2设置邮箱单元格属性
(1)设置F7单元格的填报属性为“单行文本”;
(2) 在格式(正则表达式)中输入:^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$,该正则表达式为JAVA类型的表达式,使用该表达式验证输入的内容是否符合邮箱地址的格式;
(3) 在“格式不匹配时提示信息”中输入:邮箱格式不正确,请输入正确的邮箱地址,则当邮箱地址输入的内容不符合邮箱格式时,会弹出此提示信息.
8.2.5执行回写
在浏览器端打开该报表,输入相关内容,在输入邮箱地址时,只有格式正确才可以填入;若输入的格式不符合邮箱格式,则会弹出提示。
8.3其他正则表达式参考
(1)身份证正则表达式:
^(^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$)|(^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[Xx])$)$
(2)手机号正则表达式: ^1[3,5,8]\d{9}$
(3)电话号正则表达式:
^(^0\d{2}-?\d{8}$)|(^0\d{3}-?\d{7}$)|(^0\d2 -?\d{8}$)|(^0\d3 -?\d{7}$)$
(4)QQ号正则表达式:^\d{5,10}$
九、上传下载文件
9.1需求说明
在电子表格中,可以插入数据。并且通过点击“点击上传文件”上传文件,也可以点击“点击下载文件”下载上传的文件。
9.2注意事项
9.2.1支持的字段类型
(1)数据库类型
MySQL数据库:MySQL(数据源的连接字符串要加上"useServerPrepStmts=true");
Mysql中的4种BLOB类型
TinyBlob最大为255byte
Blob最大为65K
MediumBlob最大为16M
LongBlob最大为4G
ORACLE
其他数据库类型根据数据库实际情况主持。
(2)字段类型:BLOB
9.2.2文件限制
(1)文件大小:不考虑
(2)文件格式:二进制文件
(3)文件名称:不能选择BLOB字段,否则下载时会无法访问
(4)文件名称:如果不包含后缀名,下载下来是未知文件
9.2.3环境限制
(1)不支持移动端的上传下载
(2)IE11以下不能够直接预览,预览会报错
9.2.4MySQL数据库注意事项
若数据库为Mysql,则上传文件有可能有错误,需要在数据源连接字符串中增加&useServerPrepStmts=true
9.3操作步骤
9.3.1数据库表准备
(注:文件上传下载功能只支持直接拖数据源下的表字段)
(1)在数据库中建立表,包含三个字段:id(int,自增)、filename(varchar(255))、file(BLOB)。其中file字段为BLOB类型,用于储存上传的文件,filename字段为字符串类型,用于储存上传的文件名,填写此项的时候一定要带上文件格式,不然下载下来的文件是没有格式的。
(2)在数据源下添加该表,并且注意设置file字段的数据类型为BINARY
9.3.2创建电子表格
绘制静态表,将数据源中字段添加到表样中
9.3.3设置填报属性
B3、C3填报属性分别为数字,当行文本;D3设置为文件
9.3.4设置回写规则
此时已可上传文件,“文件名”列中的文件名需要用户手工填写。
9.3.5设置下载文件
(注:文件下载功能只支持直接拖数据源下的表的字段)
(1)将数据集中“编号”字段拖拽到E3单元格中
(2)选中E3单元格,点击格式—文件—设置信息—确认
(说明:
(1)显示内容为“点击下载文件”,是指在浏览电子表格时单元格内容
(2)文件名称是指点击下载时文件的名称
)
9.3.6发布预览
十、主子表
10.1需求说明
在填报补录的功能中,通常会有一种主子表的填报需求。比如如下的报销表单,绿色是填报的部分。其中上半部分是报销主表,填写报销事宜和总金额;下半部分是报销的明细,记录相关的项目和金额。数据存储在不同数据表中。
(注意:主子表回写的关键是子表中要包含主表的主键字段。)
10.2操作步骤
10.2.1准备回写表
在对应的数据库中新建两张表,命名为“reimburse_main”, “reimburse_sub”,该表为回写数据的子表。该表为回写数据的主表。
10.2.2创建数据集
(1)由于主子表的下半部分项目明细,是需要插入行的。所以需要构造一个数据集,在创建电子表格时,将字段拖拽到单元格中,并设置填报属性“可以插入/删除行”,即可实现行的增删。
(2)创建数据集,查询出子表的字段,并且数据为空数据
10.2.3创建电子表格
在报表设计器中创建一个电子表格,如下设计,不关联任何数据集。注意此示例中报销事宜、项目和金额是需要填写的,因此将填充颜色设置为绿色。
10.2.4设置单元格内容
(1)获取填报用户名
在C4中输入公式“=ssr_getcurrentusername()”,使报销人自动设置为当前登录用户的用户名
(2)获取当前系统时间
在单元格E4中,输入公式“=now()”,并设置单元格格式为“yyyy-mm-dd hh:mm:ss”。使报销时间自动设置为当前时间。
(3)计算金额
在C6单元格中,输入公式“=sum(D10)”,报销总金额由明细计算得到
(4) 将步骤2查询中的“项目”字段拖拽到B10单元格中
(5) 将步骤2查询中的“金额”字段拖拽到单元格D10中,并设置为“不扩展-汇总-求和”
10.2.5设置主表填报回写
(1) 点击C5单元格,设置其填报属性为“多行文本”
(2) 点击工具栏上“回写规则”按钮,新增回写规则,设置回写规则名称为“主表回写”,并选择回写的数据库表为“报销主表”,即步骤1中的“reimburse_main”。
回写规则设置如下,其中报销人和报销时间是主键:
10.2.6设置子表填报回写
(1)选择“B10”单元格,设置其填报属性为“单行文本”,并且勾选“可以插入/删除行”
(2)选择“D10”单元格,设置其填报属性为数字
(3)设置回写规则。点击工具栏上的“回写规则”按钮,再增加一个回写规则,命名为“子表回写”,选择回写的数据库表为“报销子表”,即步骤1中的“reimburse_sub”。
回写规则设置如下,报销人、报销时间是主键,绑定的是主表中的相关单元格,项目字段也作为主键,则一个主表可对应子表多条数据: