用戶需求
在進行年度預算編制時,用戶提出將預算數據進行分解時,加入表單數據驗證的需求,即在預算數據分解時,分解後數據之和要滿足與預算總數指定的邏輯關係,數據才能寫入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;
}