9.10 填报公式以及JavaScript API
在UniEAP Report中提供了一部分公式,作为在填报模块专用的报表公式,例如在填报模块中为了支持单元格校验、控件、自动计算等功能,提供了填报表达式。
使用场景
- 填报相关公式
这些公式主要应用在填报功能中,在非填报报表中较少被用到。 - 填报表达式
填报表达式仅在填报报表定义中使用,表达式遵循javascript语法,并可以在表达式中通过‘{}’标记嵌入报表公式;适用于单元格自动计算、单元格校验、报表平衡校验、控件联动等场合。
公式介绍
跨布局单元格公式
- SheetCell(sheetid,target[,filter[,horizontal_offset[,virtical_offset]]])
当报表为多布局报表,且需要在一个布局中引用另外一个布局的单元格时使用,第一个参数sheetid为布局标识,其它参数同Cell公式,但由于在跨布局单元格引用场景中,没有当前单元格,因此本公式的horizontal_offset(水平偏移量)、virtical_offset(垂直偏移量)仅能使用绝对偏移量,不能使用相对偏移量。返回值为目标单元格(target)的值。
填报单元格定位公式
- Coordinate(target[,filter[,horizontal_offset[,virtical_offset]]])
该公式用于逻辑主格定义中,定义更新表达式,当更新表达式中所引用的单元格不能简单通过A1、B1这样简单的单元格引用表示时,即可使用coordinate公式来完成单元格与数据集字段间的映射,coordinate公式中各参数的用法与cell公式完全相同。
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扩展出的所有单元格的平均值。
JavaScript API
UniEAP Report提供了强大的JavaScript扩展功能,并提供了多个JavaScript API,提供了丰富的扩展空间。
填报API
1.提示信息对话框
- ReportAlert(str)
在填报表中如果使用alert,需要使用该方法,该方法与alert有相同的效果。但其中包含了离线报表中的html反转义字符逻辑。 ReportConfirm(str)
在填报表中如果使用confirm,需要使用该方法,该方法与confirm有相同的效果。但其中包含了离线报表中的html反转义字符逻辑。2.填报类图
- 填报表类
该类是单实例的,需要通过调用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对应追加行
- getInstance()
单元格选中控件
单元格选中控件实际上是一个div,获得该对象后可以直接利用dom的api。- appendChild()
添加节点 - removeChild()
删除节点 - getChildrenCount()
获得孩子数目
3.便利方法
为了更加便利的使用InputReport对象,提供了几个全局方法。- appendChild()
- insertRow()
插入行 - deleteRow()
删除行 - appendRow()
追加行 - audit()
报表审核 submitInputReport()
提交填报表4.自定义控件接口
当需要实现自定义控件时,在设计器中指定的显示方法可接收到config和cell两个参数。如定义自定义控件的方法名为display,则实现display方法时,通过下面的方式可以接受到这两个参数, display(config, cell){ … }- config
普通的Javascript对象,从中可以获得校验规则和格式化类型,可以直接利用InputReport中的方法来进行验证和单元格内容的格式化。 - cell
被编辑的单元格,实际上是一个td对象。 如何自定义控件参见本文档的“最佳实践”章节。
公式与表达式的用法与规则
- 关于填报表达式语法
填报表达式中除了使用{}嵌入的报表公式外,全部符合javascript语法,条件‘或’应使用符号 ‘||’,条件‘与’使用符号‘&&’。
如:{JSCell(‘b1’,null,’a1[-1]’)}>5 && {JSCell(‘c1’,null,’a1[-1]’)}<7 - 关于引号
填报表达式中凡是非报表公式中出现的引号都使用双引号(” ”),而报表公式中的参数仍然和报表中其它公式定义一样使用单引号(’ ’)。
如:{JSCell(‘b1’,null,’a1[-1]’)}==”辽宁”