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安装盘符:HyperiondeploymentsWebLogic9serversHyperionPlanningwebappsHyperionPlanningcustomValidateData.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("分解数总和与预算合计数不相等,请修改数据,该数据不会被写进数据库"+"
"+"存在问题的年份为:"+year);
 
                            valid=false;
 
                   }
 
         }
 
         return valid;
 
}

————————————————

原文地址:https://www.cnblogs.com/Codebee-club/p/11651464.html