填报公式、填报表达式以及JavaScript API

在UniEAP Report中提供了一部分公式,作为在填报模块专用的报表公式,例如在填报模块中为了支持单元格校验、控件、自动计算等功能,提供了填报表达式。

1 使用场景

  • 填报相关公式
    这些公式主要应用在填报功能中,在非填报报表中较少被用到。
  • 填报表达式
    填报表达式仅在填报报表定义中使用,表达式遵循javascript语法,并可以在表达式中通过‘{}’标记嵌入报表公式;适用于单元格自动计算、单元格校验、报表平衡校验、控件联动等场合。

2 公式介绍

2.1 跨布局单元格公式

  • SheetCell(sheetid,target[,filter[,horizontal_offset[,virtical_offset]]])
    当报表为多布局报表,且需要在一个布局中引用另外一个布局的单元格时使用,第一个参数sheetid为布局标识,其它参数同Cell公式,但由于在跨布局单元格引用场景中,没有当前单元格,因此本公式的horizontal_offset(水平偏移量)、virtical_offset(垂直偏移量)仅能使用绝对偏移量,不能使用相对偏移量。返回值为目标单元格(target)的值。

2.2 填报单元格定位公式

  • Coordinate(target[,filter[,horizontal_offset[,virtical_offset]]])
    该公式用于逻辑主格定义中,定义更新表达式,当更新表达式中所引用的单元格不能简单通过A1、B1这样简单的单元格引用表示时,即可使用coordinate公式来完成单元格与数据集字段间的映射,coordinate公式中各参数的用法与cell公式完全相同。

2.3 JavaScript类公式

在报表公式中的JavaScript类公式通常用法是在填报表达式中,通过{}方式嵌入到填报表达式中,这些公式的返回值事实上是JavaScript代码,但是您不需要了解这些公式具体的返回值。仅需要了解其公式的含义和应用场景即可。

  • JSCell(target[,filter[,horizontal_offset[,virtical_offset]]])
    在填报表达式中引用一个单元格的值,在自动计算场景中应用较多。公式参数含义与Cell公式完全相同。
    如:{JSCell(‘a2’,null,’’)}+{ JSCell(‘b2’,null,’’)}的含义是当前单元格的值为A2单元格与B2单元格之和,如果A2、B2单元格被修改,那么当前单元格将会自动计算出相应结果。该公式也可写成{A2}+{B2}
  • JSSheetCell(sheetid,target[,filter[,horizontal_offset[,virtical_offset]]])
    在填报表达式中引用另外一个sheet单元格的值,在平衡校验表达式中应用较多。公式参数的含义和限制与SheetCell公式完全相同。
    如:{JSSheetCell(‘sheet_1’,’a1’)}+{JSSheetCell(‘sheet_1’,’a2’)}> {JSSheetCell(‘sheet_2’,’c5’)}的含义是标识为sheet_1布局中的A1单元格与A2单元格之和要大于标识为sheet_2布局中的C5单元格。
  • JSSum(collection_value)
    在填报表达式中的求和公式,公式的参数含义同Sum公式,在自动计算场景中较多。
    如:{JSSum(JSCell(‘a1’))}的含义是求由A1扩展出的所有单元格的和。
  • JSAvg(collection_value)
    在填报表达式中的求平均值公式,公式参数含义同Avg公式,在自动计算场景中较多。
    如:{JSAvg (JSCell(‘a1’))}的含义是求由A1扩展出的所有单元格的平均值。

    公式的详细使用方法请参考《UniEAP Report公式查询手册》

3 填报表达式介绍

填报表达式是符合JavaScript语法并且可以嵌入报表公式的一类表达式,一般在自动计算、单元格校验、报表平衡校验以及一些控件中的属性的设置中使用。嵌入报表公式是指在表达式中使用‘{}’将报表公式包围的方式来嵌入JS类报表公式。

3.1 自动计算

‘自动计算’用于在Web页面上修改单元格后自动计算并修改该单元格影响的单元格,一般情况下,返回值为数值类型。如:有一张商品价格的报表,当某一个商品价格改变后,商品的总价会被自动更新成新值。

例:商品价格=商品单价商品数量商品折扣,则自动计算表达式定义如下:

{a1}*{b1}*{c1}

如果需要指定横向、纵向偏移量,则可以使用JSCell公式,如下:

{JSCell(‘a1’,null,’’)}*{JSCell(‘b1’,null,’’)}*{JSCell(‘c1’,null,’’)}

3.2 单元格校验

value作为单元格校验的一个关键字,代表当前单元格的值。单元格校验表达式返回一个布尔值。如定义一个单元格的值必须大于0并且小于等于1,则定义如下:

value>0 && value<=1

【注意】单元格校验公式中不能通过使用{}符号嵌入报表公式。

3.3 报表平衡校验

报表平衡校验是定义在报表上的全局属性,通过JSSheetCell公式来引用报表中的单元格,返回一个布尔值。因为公式并不是定义在单元格中,因此公式中不能使用相对偏移量,仅允许使用绝对偏移量。如下:

{JSSheetCell(‘Sheet_1’,’a5’)}+{JSSheetCell(‘Sheet_2’,’c7’)}>0

3.4 控件数据过滤条件

部分控件的属性也需要使用嵌入报表公式的填报表达式来定义: 包含:

  • 下拉列表的联动过滤条件
    如:下拉列表数据集中PROVINCE为关联列,则联动过滤条件定义为:
PROVINCE={A1}

其中A1是联动中的主动格。

  • 下拉树的节点过滤条件
  • 下拉树的叶节点条件
    如果条件中存在‘逻辑与’‘逻辑或’则分别使用‘&&’ ‘||’ 符号。

4 JavaScript API

UniEAP Report提供了强大的JavaScript扩展功能,并提供了多个JavaScript API,提供了丰富的扩展空间。

4.2 填报API

1.提示信息对话框

  • ReportAlert(str)
    在填报表中如果使用alert,需要使用该方法,该方法与alert有相同的效果。但其中包含了离线报表中的html反转义字符逻辑。
  • ReportConfirm(str)
    在填报表中如果使用confirm,需要使用该方法,该方法与confirm有相同的效果。但其中包含了离线报表中的html反转义字符逻辑。

    2.填报类图

1

  • 填报表类
    该类是单实例的,需要通过调用getInstance()方法获得该类的对象。
    • getInstance()
      获得填报表对象
    • getCurrentCell()
      获得当前编辑单元格
    • setCurrentCell(cell)
      设置当前单元格
    • checkInputType (config, value)
      单元格数据验证。从Config中可以获得校验规则,value为单元格的值
    • checkCellRule (checkFunc, value)
      单元格校验表达式验证。checkFunc为验证函数,value为单元格值
    • autoCalculate (sheetId, cellId)
      单元格自动计算。sheetId为被修改单元格所在的布局的id,cellId为单元格id
    • balanceValid()
      报表平衡验证
    • formatContent (cell, obj)
      单元格内容格式化。Cell为要格式化单元格,obj为单元格的值对象,包含value和caption,如obj = {value:’a’,caption:’bb’}
    • setValue (cell, obj)
      设置单元格的值。参数同formatContent
    • cellValue (sheetId, cellId)
      根据布局标识和单元格id获得单元格的值
    • getCell (sheetId, cellId)
      根据布局标识和单元格id获得单元格对象
    • clearCell (cell)
      清除单元格内容
    • submitReport()
      提交填报表
    • modifyRowCol(action)
      增加,插入,删除行。action标识要进行的操作,1对应插入行,2对应删除行,17对应追加行
  • 单元格选中控件
    单元格选中控件实际上是一个div,获得该对象后可以直接利用dom的api。

    • appendChild()
      添加节点
    • removeChild()
      删除节点
    • getChildrenCount()
      获得孩子数目

    3.便利方法
    为了更加便利的使用InputReport对象,提供了几个全局方法。

  • insertRow()
    插入行
  • deleteRow()
    删除行
  • appendRow()
    追加行
  • audit()
    报表审核
  • submitInputReport()
    提交填报表

    4.自定义控件接口
    当需要实现自定义控件时,在设计器中指定的显示方法可接收到config和cell两个参数。如定义自定义控件的方法名为display,则实现display方法时,通过下面的方式可以接受到这两个参数, display(config, cell){ … }

  • config
    普通的Javascript对象,从中可以获得校验规则和格式化类型,可以直接利用InputReport中的方法来进行验证和单元格内容的格式化。
  • cell
    被编辑的单元格,实际上是一个td对象。 如何自定义控件参见本文档的“最佳实践”章节。

5 公式与表达式的用法与规则

  • 关于填报表达式语法
    填报表达式中除了使用{}嵌入的报表公式外,全部符合javascript语法,条件‘或’应使用符号 ‘||’,条件‘与’使用符号‘&&’。
    如:{JSCell(‘b1’,null,’a1[-1]’)}>5 && {JSCell(‘c1’,null,’a1[-1]’)}<7
  • 关于引号
    填报表达式中凡是非报表公式中出现的引号都使用双引号(” ”),而报表公式中的参数仍然和报表中其它公式定义一样使用单引号(’ ’)。
    如:{JSCell(‘b1’,null,’a1[-1]’)}==”辽宁”

results matching ""

    No results matching ""

    results matching ""

      No results matching ""