填报报表定义与使用

本章描述在web设计器中如何定义一张完整的填报报表,以及如何在Web页面上填写并提交一张填报报表。

1 设置填报逻辑

填报报表的定义方法与普通报表完全相同,仅是增加了填报功能的附加属性设置。先定义一个简单的列表。

5

首先确定需要有回填逻辑的布局是主布局,在子布局中是无法设置填报属性的。点击需要设置填报属性的布局,然后在上方选择填报标签页,点击工具栏中填报按钮设置填报逻辑。

1.1 新建提交

点击提交标签页左下方的加号按钮,来新建提交逻辑。提交分为自定义提交和SQL提交。自定义提交是使用自己实现的提交类来提交回填数据,SQL提交就是选择数据源中的一张表,向表中回写数据,这里我们选择SQL提交。

1

新建提交后,选择相应的数据源和需要回填数据的表。

2

点击右侧的选择字段,选择表中需要回填数据的字段。

3

点击确定,下面表格中就会出现选择的字段,表格每列的含义如下:

  • 主键 表中的主键字段需要勾选,便于回填数据,可以选择多个,如果主键字段是有相同的数据,更新相同主键数据会将相同主键一起更新。
  • 字段名
    需要更新的数据集字段名。
  • 更新表达式
    字段对应的单元格,如:A3单元格对应数据集中PRODUCT_ID字段,则定义更新表达式为‘=A3’,如果引用的单元格需要指定偏移量,则可以使用coordinate公式,如“=coordinate(‘d3’,null,’a3[-1]b3[+1]’)”。Coordinate公式使用方法参见《UniEAP Report公式查询手册》。
  • 是否为空
    字段是否允许为空,如果允许为空则需要指定<空值处理>。
  • 空值处理
    当字段为空时采用何种填写策略,可以选择空值作为null处理,或者空值时使用默认值。
  • 默认值
    提供回写入数据库的默认值。
  • 更新不成功则插入
    当记录更新不成功时,一般情况为这条记录不存在,如果选择‘更新不成功则插入’,则当更新记录为0时,将该记录做为新记录插入到数据库中。
  • 更新未修改行
    当不选中该选项时,将只更新被修改的记录,未被修改的记录将不被更新;当选中此选项时,无论数据是否被修改,所有的记录都会被提交至数据库。
  • 生效条件
    可以选择“是”或“否”,也可以在此填写公式,例如=$uid=’1’ 表示当前用户登录有提交权限,其他用户没有。
  • 类型
    有智能提交、更新提交、插入提交、删除提交,根据不同需求进行选择。其中智能提交会根据用户当前操作来判断。

修改完相应的属性后如下:

4

SQL提交可以创建多个,自定义提交只能创建一个。新建右侧的按钮分别代表删除和复制。

1.2 数据平衡校验

  • 平衡验证表达式
    是页面级的校验逻辑,也是报表的全局校验,在该项设置中,引用单元格仅能使用JSSheetCell公式,如需要Sheet1布局的c3单元格小于d3单元格,则定义的表达式如下:

    {JSSheetCell('Sheet1','c3')}<{JSSheetCell('Sheet1','d3')}
    

    由于在全局属性中引用单元格时,不存在‘当前单元格’,因此在JSSheetCell公式中仅允许使用绝对偏移量,不能够使用相对偏移量。如在表达式中使用{JSSheetCell(‘D1’,null,’A1[1]’)}是允许的,但是{JSSheetCell(‘D1’,null,’A1[+1]’)}为相对偏移,是不允许的。

6

2 设置控件

页面填报时需要使用控件来修改单元格的值,选择需要定义控件的单元格,点击填报标签页的控件按钮,就可以设置每个单元格修改时所用的控件了:

7

2.1 控件属性设置

各类控件的定义方法如下:

  • 文本输入框
    文本输入框中可以启用‘字符长度限制’的功能,如果启用了此功能,则可以进行长度限制。如下图所示:

8

  • 多行文本输入框
    在文本输入框控件中选择‘允许多行文本输入’,即为多行文本输入框,输入框可根据输入文字的长度自动换行,并可以启用字符长度限制。

  • 下拉列表

    • 数据定义
      通过选择报表中已经存在的数据集或者新建数据集来定义下拉列表内的数据,然后在指定的数据集中选择显示列、数据列。
    • 自定义
      通过二次开发,实现接口来获取数据。接口说明请参见“下拉列表自定义数据”一节。
    • 允许多选
      设置下拉列表是否允许多选。
    • 多选间隔符
      设置当多选时多值之间的间隔符号。
    • 惰性初始化
      设置下拉列表是否通过异步的方式按需取数据(通常又叫做懒加载)。
    • 允许手动填写数据
      在一些特殊的场合下,当下拉列表中没有想要的数据时,可以手动填写。
    • 启用每次输入时,动态数据过滤
      通过输入的数据,发出异步请求,获取通过当前输入数据过滤后的数据。

      【注意】该选项仅在‘惰性初始化’以及‘允许手动填写数据’选中时可用。详细使用方法参见“如何设置下拉列表的动态过滤”一节

    • 在下拉选项中提供空选项
      允许在下拉列表中提供一个空选项。如何使用空选项请参见“何时需要设置下拉列表的空选项”一节。

    Web页面联动条件设置:当多个下拉列表互相关联时,或者下拉列表的数据是通过某个单元格的值过滤得到时,可以通过此设置实现联动。例如在下图定义的下拉列表中,需要显示A1单元格指定类型的商品列表。则定义联动条件为“TYPE=={A1}”,其中TYPE为数据集ds1中的一个字段名称。

9

10

【注意】如果下拉列表设置为惰性初始化,那么下拉列表中使用的数据集必须是SQL数据集。

  • 日历
    • 允许设置时分秒
      设置日历控件是否允许录入时分秒。
    • 时钟格式
      设置日历上的时钟是24小时制还是12小时制。
    • 自定义控件默认时间
      当日历控件显示时,可以显示设置的默认时间。

11

【注意】上图中关于日历的设置全部是控制日历控件显示的,而填入的日期格式则通过设置单元格为日期格式来指定,如果不指定单元格为日期格式则在Web页面填写的单元格会显示成一个长整型数字。设置方式如下图:

8

  • 下拉树

    • 控件宽度
      设置页面显示的下拉树宽度
    • 控件高度
      设置页面显示的下拉树的高度
    • 背景颜色
      设置页面显示的背景颜色
    • 节点设置
      通过右键单击指定的节点,即可在节点下新增节点,或者删除当前节点。这里的节点是指定义节点,一个定义节点在生成树时可能会生成多个同级节点。选中某个节点,可以定义节点的数据集。
    • 过滤条件
      在一般情况下,至少需要定义2级节点,才能完整定义出一个下拉树,在第一层节点过滤条件中输入树的首层节点条件,例如下图中定义的树控件,第一层节点定义过滤条件为:
    parentid==“1”
    

    parentid==“1”的含义是树的首层节点为数据集中满足parentid为“1”的数据。 第二层节点定义为:

    parentid==#1
    

    ‘#1’的含义是代表当前节点的上一层节点,同理‘#2’代表上两层的节点,parentid==#1的含义是parentid等于上层节点的数据。

    13

    14

    • 页节点条件
      下拉树一般在默认情况下,没有下一级节点的节点即认为是叶子节点。但是在特殊情况下,没有下一级节点的节点并不是叶子节点。比如在一些组织机构树中,叶子节点代表人员,非叶子节点代表机构,这种情况下当某一个机构下没有人员时,也不是叶子节点,这种情况下就需要定义叶节点条件。
    • 显示根结点
      设置当树控件展示时是否显示根结点。
    • 根结点名称
      设置根节点的名称。
    • 允许多选
      树的节点是否允许多选。
    • 多选分隔符
      多选时多个值之间的分隔符号。
    • 惰性初始化
      设置树控件是否通过异步方式获取数据。
    • 仅选择叶子节点
      是否仅叶子节点可选。
    • 按末层循环
      当树控件某一层节点下所有节点定义都相同,并且层数未知时使用该选项。

      【注意】树控件仅可以使用SQL数据集。

  • 按钮
    在填报报表中可以定义按钮控件,功能如下:

    • 按钮文字
      按钮上显示的文字。
    • 事件类型
      一些UniEAP Report内置的事件可供选择,如填报提交。
    • 按钮关联js方法
      当内置事件不能满足需求时,可以使用javascript自定义按钮事件。

    16
    控件类型选择按钮,按钮文字可以自定义,目前提供的事件类型有“数据录入提交”、“增加行”、“删除行”。

    17
    选择“增加行”,关联单元格“A3”。

    18
    点击增加一行,新增出的一行单元格内容标红。

    19
    一般我们会将填报报表里一些标签隐藏掉,可以在页面标签里勾选。

  • 自定义控件
    当提供的控件不满足要求时,您可以通过自定义控件方式来自己实现控件,只需要定义一个控件显示的JavaScript方法即可。如何自定义一个控件的详细说明请参见本文档的“最佳实践”章节。控件定义方式如下图所示:

    20

2.2 其他属性设置

2.2.1 自动计算

当报表中的一些单元格中的数据是通过自动计算其他一些单元格中录入的值得到时,可以通过定义自动计算属性来实现。

一般情况下,如果自动计算定义较简单,则可以通过点击自动计算属性右侧的按钮,通过单元格内的公式自动生成,当公式复杂无法生成时则可以手动输入。

例如:下图中的F3单元格的值为‘数量’、‘单价’、‘折扣’三个单元格的乘积,F4单元格的值为所有产品的总和。 F3单元格的自动计算公式为:

{C4}*{D4}*{E4}

F4单元格的自动计算公式定义为:

{JSSum(JSCell(‘F3’))}

自动计算中不能直接填写报表公式,而应该使用填报表达式,填报表达式的详细使用方式请查看“填报表达式介绍”章节。

21

【注意】因为在Web页面中不会输出隐藏行、列,所以隐藏行、列中的数据不能参与自动计算。

2.2.2 数据验证

数据验证是通过正则表达式的方式对单元格中填写的数据进行校验,在报表设计器中内置了Email、电话号码、整数等常用的校验表达式,如果不满足您的需求,还可以自定义正则表达式校验。这里的正则表达式采用JavaScript定义格式,正则表达式的前后使用‘/’标记符,例如整数的正则表达式如下:

/^-?\d+$/

22

2.2.3 校验逻辑表达式

  • 校验逻辑表达式
    填写当前单元格的校验逻辑
  • 验证提示:验证不通过给出的提示
  • 即时验证:选择填写后立即验证还是填报数据提交时验证

    校验逻辑表达式使用关键字value作为当前单元格的当前值,在表达式中不能使用报表公式,例如折扣单元格输入数字要在0和1的范围内,则表达式如下:

value<1 && value>0

19

【注意】value关键字全部为小写。

3 填报报表的Web操作

填报报表发布之后,在Web端就可以对页面展现的报表执行填报操作。填报报表的页面操作包括:在线填报操作;报表暂存。

3.1 在线填报操作

对在Web页面展现的报表执行填报操作为在线填报。在线填报操作包括:页面操作;填报报表的导出、打印;填报提交。

3.1.1 页面操作

填报报表的页面操作分为:控件的页面操作、快捷键操作、自动计算、行的智能操作、数据验证。

3.1.1.1 控件的页面操作

在页面操作时,单击某一可写格时,单元格被选中;再次双击某个可修改格时,可修改格内的控件将被激活;对控件做填写操作后,单元格失去焦点时,控件消失,单元格内的显示值被更新。在不选中单元格的情况下,直接双击单元格,也会激活控件。

填报报表提供了多种基本控件类型来实现页面数据的输入,方便用户使用。

  • 文本输入框
    在设计器中定义文本输入框后,在页面上双击该可写格,文本输入框出现,可以直接输入数据,如下图所示:

24

在输入完成后,点击页面上其他地方,单元格失去焦点时,单元格内数据更新为填写后的数据,如下图所示:

25

【提示】单元格内的值发生变化后,单元格内的文字会采用红色斜体的样式标出,以记录修改状态,如果需要修改该样式,可自行修改Web应用根目录下的report/unieap/pages/report/css/datainput/datainput.css文件即可。

  • 日历
    在设计器中定义日历控件后,在页面上双击该可写格,即可激活日历控件,如下图所示:

26

在选择日期后,点击页面上其他地方,单元格失去焦点后,日历控件消失,输入的日期以相应的格式显示在单元格中,如下图所示:

27

日历控件中年月日时分秒可以通过键盘上下左右键来选择。

  • 下拉列表
    在设计器中定义下拉列表控件后,在页面上,双击该可写格,下拉列表控件将显示出来,如下图所示

28

选择下拉列表中的某一值,点击页面上其他地方,下拉列表消失,选中的值出现在单元格中,如下图所示:

29

下拉列表还可以实现联动的效果,如下图所示,当国家选择某一值后,地区的下拉列表中的内容随之发生变化:

30

  • 下拉树
    在设计器中定义下拉树控件后,在页面上,双击该可写格,下拉树控件将显示出来,如下图所示:

31

选中树上某一节点后,点击页面上其他地方,下拉树控件消失,选中的树节点将显示在单元格中,如下图所示:

32

  • 按钮
    按钮控件提供四种事件类型如下:
    • 自定义JS
      在页面上,点击该可写格中按钮控件,调用定义的Javascript方法。
    • 数据录入提交
      在页面上,点击该可写格中按钮控件,将数据回填入数据库。
    • 参数页面提交
      用户定义复杂参数页面时的提交事件。
    • 参数页面重置
      用户定义复杂参数页面时的重置事件。
  • 自定义
    如果以上控件类型依然无法满足需求,填报报表提供了自定义控件类型,支持用户自定义的控件类型。如何实现自定义控件,参考本文档“最佳实践”章节。
3.1.1.2 快捷键操作

UniEAP Report提供了方便的页面快捷键,让填报报表的编辑快捷方便。快捷键操作涉及到的键盘按键以及功能如下表所示:

按键 选中状态功能 编辑状态功能
左方向键 当前单元格左侧的可编辑单元格变为选中态 当前单元格左侧的可编辑单元格进入编辑状态
右方向键 当前单元格右侧的可编辑单元格变为选中态 当前单元格右侧的可编辑单元格进入编辑状态
上方向键 当前单元格上侧的可编辑单元格变为选中态 当前单元格上侧的可编辑单元格进入编辑状态
下方向键 当前单元格下侧的可编辑单元格变为选中态 当前单元格下侧的可编辑单元格进入编辑状态
Enter键 当前单元格进入编辑状态 当前单元格退出为选中状态
Tab键 当前单元格的下一个可编辑单元格变为选中装态 当前单元格的下一个可编辑单元格进入编辑状态
Shift+Enter 多行文本输入框换行
3.1.1.3 自动计算

填报中自动计算功能,是在修改某一单元格值后,相关联的需要自动计算的单元格中的数据就会自动被修改,以符合自动计算表达式,如下图所示,修改折扣的值后,总价以及合计的值将自动发生变化:

33

自动计算也适用于不同布局间的数据计算,如上图中合计值发生改变后,另一布局中的总额值也自动发生改变,如下图所示:

34

3.1.1.4 行的智能操作

行的智能操作分为:增加行,删除行,追加行。

对于可扩展单元格,在填报常规属性页中,设置“页面智能操作”属性,勾选“增加行”,“删除行”后,在Web端报表展现时,右键点击该单元格,会出现插入行,删除行,追加行选项。如下图所示:

35

点击“插入行”,在所选单元格上方增加一行数据;点击“删除行”,当前行数据被删除;点击“追加行”,在该单元格扩展出来的数据的末尾增加一行数据。

【注意】在删除行时,数据并未提交数据库删除,而是将删除的数据记录在内存中,在填报表提交时,删除的行会同其它的修改数据同时提交至数据库中。删除行是一个不可逆操作,请慎重操作。

3.1.1.5 数据校验

在填报过程中,难免会出现数据输入值不符合输入要求、以及格式不合法的情况。这种情况,可以通过数据验证功能来控制填报数据的合法性。验证分为以下三部分:

  • 平衡校验表达式
    平衡验证表达式是针对整张报表的,在点击填报按钮后,对报表进行平衡验证,当不符合平衡校验表达式时,页面上会提示相应的错误信息,如下图所示:

36

  • 单元格数据验证
    数据验证是针对单元格的,当输入的数据不符合数据验证表达式时,页面上会提示相应的错误信息,如下图所示:

37

  • 单元格校验逻辑表达式
    校验逻辑表达式也是针对单元格的,当输入的数据不符合校验逻辑表达式时,页面上会提示相应的错误信息,如下图所示:

38

【注意】

1.页面的格式化
页面上的值均以单元格格式属性页中定义的格式来显示。在页面上修改后的值也是如此。如:日历控件选择日期为:2012-12-12 12:00:00,该单元格定义的格式为:yyyy年MM月dd日,则修改后页面上显示日期为:2012年12月12日,而在回填入数据库时,回填的值依然是2012-12-12 12:00:00。如下图所示:

39

2.当在单元格中输入的数据不符合验证表达式时,可以通过放弃修改来返回到未修改的数据。

3.1.2 填报报表的导出、打印

在某种特殊情况下,用户希望能够修改页面数据,但并不提交给数据库,而是将修改后的数据导出或打印出来。填报报表的导出,打印支持了这种需求。

填报报表在修改完成后,点击页面上的导出或打印按钮,会将修改后的报表进行导出或打印,以保持页面展现与导出、打印的一致。

3.1.3 填报提交

报表修改完成后,点击<填报>按钮下“填报”选项(也可直接点击绿色软盘图标),如下图所示:

40

点击确定后,出现填报成功或失败提示框,如下图所示:

41

若填报成功,对话框会提示更新记录数,这样数据就更新入数据库中。

【注意】如果定义了自定义更新类,则在数据修改完毕点击填报按钮时,后台通过调用用户自定义的更新类来操作数据,报表内置的数据集更新方式则不起作用,同样,如果定义了数据集更新方式,自定义更新类则不起作用。如果定义了更新辅助类,在数据提交前会调用更新辅助类中beforeSave方法,在提交后会调用更新辅助类中afterSave方法。

3.2 报表的暂存

填报报表未修改完成时,可以将其暂存在数据库中,需要时再提取暂存的报表继续填写、提交。该功能分为:暂存、提取暂存两部分。

3.2.1 报表暂存操作

点击<填报>按钮下“暂存”选项,如下图所示:

42

输入暂存报表名称,点击确定,暂存成功。如下图所示:

43

3.2.2 加载报表暂存

点击<填报>按钮下“提取暂存”选项,如下图所示:

44

在弹出的对话框中,选择某一时间点暂存的报表,如下图所示:

45

点击<确定>按钮后,暂存的报表自动导入到当前页面中。

3.2.3 暂存自动清理的配置

在Web应用的\WEB-INF\conf\unieap\report\report-engine-config.properties文件中设置暂存自动清理信息。如下表所示:

#填报暂存自动清理配置
start_tempmemp_clean=true
tempmemp_clean_period=30

start_tempmemp_clean的值为true时,代表采用暂存自动清理,当值为false时,代表不采用暂存自动清理。

tempmemp_clean_period代表当start_tempmemp_clean值为true时,在该值设置的天数之后自动清理过期的暂存。如:tempmemp_clean_period=30,代表暂存生成30天后自动清理掉。

在默认情况下,不采用暂存自动清理功能。在提交填报时会提示是否清除当前报表的暂存,如果选择清除暂存,则填报操作成功执行后,当前用户当前报表的所有暂存记录被清空。

results matching ""

    No results matching ""

    results matching ""

      No results matching ""