[ Nexacro.Dataset -  숫자 계산처리 ]

 

            [  ◎  Dataset에 존재 하는 값을 찾아서 Dynamic 계산 ]     

/******************************************************************************************
 * 기능 : Dynamic Calcurate
 * 인자 : objDs - 값을 얻을 dataset
 *         psSrcColList - 계산식에 사용될 컬럼 리스트
 *         psFomula     - 계산식
 *         psSetColId   - 계산된 값을 넣을 컬럼
 *         psSetCond    - 계산된 값을 넣을 때 처리방법 (NULL=0,  NULL=NULL, 0=NULL)
 * 리턴 : Grid header에 대한 index
 * 예문 : gfn_DynamicCalcurate(objDs, "컬럼명,row=3:컬럼명,row=3"
 *                                  , "([컬럼명1] + [컬럼명2])/100 - 100"
 *                                  , "컬럼명,row=3"
 *                                  , "NULL=0")
 *
 *        gfn_DynamicCalcurate(objDs, "컬럼명, find=컬럼명1=='3'&&컬럼명2>=30:컬럼명,row=3"
 *                                            , "([컬럼명1] + [컬럼명2])/100 - 100"
 *                                            , "컬럼명,find=컬럼명1=='3'&&컬럼명2>=30"
 *                                            , "NULL=NULL")
 * 개발자 : 김용학 (아직 프로젝트 적용한적 없음.  혹시 이 소스를 사용하시면 개발자 지우지 말아주세요.
 *          나름 아이디어 상품이라서 ^^
 * 참고 : find 조건으로 넘와 왔을 경우 값을 못찾으면 null('')로 set
 *****************************************************************************************/
function gfn_DynamicCalcurate(objDs, psSrcColList, psFomula, psTargetColId, psSetCond){
    var aSrcColList = psSrcColList.split(':');
    var sValue, nRow, sFindExpr;
    var sFomulaCal=psFomula;
    var sLastValue;
    
    //1. 계산식에 적용될 컬럼에 대한 값 찾기 와   계산식에 값 Replace
    for(var idx=0; idx<aSrcColList.length; idx++){
    
        //a. 각 컬럼에 대한 row찾기
        var aSrcCol = aSrcColList[idx].split(',');
        if (aSrcCol[1].indexOf("row=") >= 0){
            nRow   = aSrcCol[1].replace("row=", '');
        }else{
            sFindExpr = aSrcCol[1].replace("find=", '');
            nRow      = objDs.findRowExpr(sFindExpr);
            if (nRow < 0){
                sFomulaCal = '';
                break;
            }
        }
        
        //b. 값 얻기
        sValue = objDs.getColumn(nRow, aSrcCol[0]);
        if (gfn_isNull(sValue)) sValue = 0;
        
        //c. 산술식에서 컬럼명을 값으로 대체하기
        sFomulaCal = sFomulaCal.replace('[' + aSrcCol[0] + ']', sValue);
    }
    
    //3. 값 계산하기  (eval()함수에서 나눗셈에  0 이 존재 하면 오류는 안나고,  NaN 으로 결과가 나옴)

    sLastValue = eval(sFomulaCal);  
    if (sLastValue == "NaN" || sLastValue == "Infinity"){
        if (psSetCond == "NULL=0"   ) sLastValue = 0;
        if (psSetCond == "NULL=NULL") sLastValue = '';
    }else if (sLastValue == "0=NULL"){
        sLastValue = '';
    }
    
    //4. 계산된 값을 Dataset에 set
    var aTargetCol = psTargetColId.split(',');
    
    if (aTargetCol[1].indexOf("row=") >= 0){
        nRow   = aTargetCol[1].replace("row=", '');
    }else{
        sFindExpr = aTargetCol[1].replace("find=", '');
        nRow      = objDs.findRowExpr(sFindExpr);
        if (nRow < 0) return;
    }
    
    objDs.setColumn(nRow, aTargetCol[0], sLastValue);
}

 


 

 
 
 

 

 

'Nexacro-Function > Dataset' 카테고리의 다른 글

Nexacro.Dataset - ds validation2  (0) 2017.01.28
Nexacro.Dataset - ds validation1  (0) 2017.01.28
Nexacro.Dataset - 한줄 추가.삭제  (0) 2017.01.28
Nexacro.Dataset - 복사(copy)  (0) 2017.01.28
Nexacro.Dataset - 검색 관련  (0) 2017.01.28
Posted by 농부지기
,