Hyperion Planning 表单数据验证功能实现
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ArsenalerCode/article/details/9404649
用户需求
在进行年度预算编制时,用户提出将预算数据进行分解时,加入表单数据验证的需求,即在预算数据分解时,分解后数据之和要满足与预算总数指定的逻辑关系,数据才能写入essbase数据库,否则,在该表单弹出提示信息,数据不进行保存。
需求分析
用户需求在指定的表单,在数据录入完成后,点击保存按钮时,进行数据的逻辑校验,符合逻辑,数据写入essbase,同时触发EAS业务规则;不符合逻辑,弹出提示框,数据不写入essbase,不触发EAS业务规则。
需求实现
修改EPM的服务器安装目录下自定义的ValidateData.js文件。可参考ValidateDataHelper.js和SampleValidateData.js。修改完ValidateData.js后,重启所有planning服务。
功能实现的环境信息如下:
EPM版本 | Enterprise Performance Management System 11.1.1.3 |
---|---|
服务器OS | Microsoft Windows Server 2003 R2 Enterprise Edition Service Pack 2 |
文件路径 | EPM安装盘符:\Hyperion\deployments\WebLogic9\servers\HyperionPlanning\webapps\HyperionPlanning\custom\ValidateData.js |
红色背景单元格数据为承接数据,绿色背景数据为用户录入数据。
以上图为例:FY13年品牌合计-预算销售数量为100万;用户录入分解后到品牌-型号的数据之和为44万,低于预算总值100万,当用户点击保存按钮时,会弹出提示框,告知用户预算数据不符合指定的偏差度,需要重新进行分解,该数据不会写入essbase。
实现代码:
///////////////////////////////
// 函数类型:系统已定义
// 创建者:
// 创建日期:
// 功能:在用户点击保存按钮时触发,根据返回bool值判定是否将数据写入essbase
// 参数:无
///////////////////////////////
function validateForm()
{
var valid = true;
if (equalsIgnoreCase(applicationName,"年度预算"))
{
if (equalsIgnoreCase(formName,"0101-07品牌销量预算"))
{
var val1=sumAreaVal(5,currentDataGrid.endRow,6,8);
var val2=getCellVal(3,5);
valid=compareVal(val1,val2,"FY13");
}
}
return valid;
}
//////////////////////////////////////////
// 函数类型:用户自定义函数
// 创建者:shin
// 创建时间:2013-1-5
// 功能:对指定区域的连续单元格数据进行求和
// 参数:startRow区域开始行;endRow 区域结束行;startCol区域开始列;endCol 区域//结束列
//////////////////////////////////////////
function sumAreaVal(startRow,endRow,startCol,endCol)
{
var sumAllVal=0;
var row;
var col;
for(row=startRow;row<=endRow;row++)
{
for(col=startCol;col<=endCol;col++)
{
var nowval=getCellVal(row,col);
if(isNaN(nowval)==false)
{
sumAllVal=sumAllVal+getCellVal(row,col);
//alert("now sumAllVal is "+"("+row+","+col+")"+getCellVal(row,col));
}
}
}
//alert("sumALLVal的值为"+sumAllVal);
return sumAllVal;
}
////////////////////////////
// 函数类型:用户自定义函数
// 创建者:shin
// 创建时间:2013-1-5
// 功能:比对2个数值的大小
// 参数:val1分解后数据之和;val2 预算总值;year提示用户存在问题的年份
////////////////////////////
function compareVal(val1,val2,year)
{
var valid=true
if(isNaN(val1)==true || isNaN(val2)==true)
{
alert("请确保预算总值和分解后数值同时存在数据");
valid=false;
}
else
{
if(Math.abs(val1-val2)>=1)
{
alert("分解数总和与预算合计数不相等,请修改数据,该数据不会被写进数据库"+"\n"+"存在问题的年份为:"+year);
valid=false;
}
}
return valid;
}
————————————————
作者:韩小乐
-------------------------------------------
个性签名:❤祝祖国70岁生日快乐❤
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“Like”哦,博主在此感谢!