• 고객센터
  • 교육
  • 매뉴얼
  • 데모
  • 제품소개
기술지원31
조회 수 : 1050
2009.10.19 (09:59:27)
OnColumnChanged 이벤트는 컬럼이 변경될 때마다 발생하는데
이벤트 발생 중에 다른 스크립트 함수에서 또 컬럼을 변경해서
동일한 이벤트 함수를 계속 호출해서 문제가 생기는 겁니다.

해결 방법은 이벤트 작동시에 복사 DataSet을 만들어 놓고
복사 DataSet을 변경한 다음에 변경된 내용을 그리드에 옮기던가
아니면 다른 방법을 연구해서 사용하셔야 할 것 같습니다.

가우스 컴포넌트 구조상 이런 형태의 코딩은 불가능합니다.


>게시판을 이용해 주셔서 감사합니다.
>다음양식에 맞게 입력해주세요.
>
>* 고객시스템명 :
>* GAUCE 버전 : 4013
>* WAS 종류(WebLogic 등등) : weblogic
>* DB 종류 : oracle
>* 문의 유형(질문/요청/참조) : Stack OverFlow 에러
>* 내용 :
>
>                                10월   31주   32주  33주
>가전(Total)                 150     70       30     50
>     컴퓨터(Total)         150     70       30     50
>                Tx-4000      100     20       30     50
>                 Sx-1000      50     50        0      0
>
>
>Dataset 은 위처럼 저장되고
>Tx-4000제품의 월 수량을 입력하면 주로 배분되고 제품 주 수량을 수정하면 가전(Total), 컴퓨터(Total)의 수량도 변경되는 로직입니다. 즉  Tx-4000제품의 월 수량을 200으로 수정하면
>
>가전(Total)                 250     90       60     100
>     컴퓨터(Total)         250     90       60     100
>                Tx-4000      200     40       60     100
>                 Sx-1000      50     50        0       0
>
>처럼 변경되는 로직입니다.
>
>아래 소스처럼 입력했을때 datatset의 OnExit(row,colid,olddata) 이벤트를 타고
>월분배=> jsResetMonthDiv 와 월총합계산 => jsResetMonthSum 함수를 타고
>
>상단 Total 합계는 datatset의 OnColumnChanged 이벤트를 타고
>상위 Level 총계를 변경 => jsResetTotalSum 함수를 타도록 개발했습니다.
>
>근데 로직은 다 타고  "Stack Overflow at line:0" 에러가 발생합니다.
>
>아래는 JSP 소스내용입니다.
>
><SCRIPT LANGUAGE="JAVASCRIPT" FOR="das_grid_sales_plan" EVENT="OnColumnChanged(row,colid)" >
><!--
>    var intAddCnt = 0;
>    var arrChgFlagId = new Array();
>    var intChgFlag = 0;
>    var boolFlag = true;
>  
>    if( !colid.substring(0,3) == "CS_" || !colid.substring(0,3) == "CD_"){
>        return;
>    }
>    if( das_grid_sales_plan.NameValue(row,"add_yn" ) == "N"){
>            
>                   for(var j=0; j<=arrChgFlagId.length; j++){
>                           if(arrChgFlagId[j] == colid){
>                                   boolFlag = false;        
>                           }
>                   }                   
>                   if(boolFlag){
>                           if(colid.substring(0,3) == "CD_"){
>                                   if(iCnt%2 != 0){
>                                           jsResetTotalSum( row, colid, intAddCnt, das_grid_sales_plan, grid_sales_plan, "VIEW_SEQ", "01", "FILTER_COLUMN" );
>                                   } else {
>                                           jsResetTotalSum2( row, colid, intAddCnt, das_grid_sales_plan, grid_sales_plan, "VIEW_SEQ", "01", "FILTER_COLUMN" );
>                                   }
>                                   iCnt++;        
>                           }
>                           if(colid.substring(0,3) == "CS_"){
>                                   jsResetTotalSum3( row, colid, intAddCnt, das_grid_sales_plan, grid_sales_plan, "VIEW_SEQ", "01", "FILTER_COLUMN" );
>                           }
>                           
>                           arrChgFlagId[intChgFlag] = colid;
>                           intChgFlag++;
>                   }
>    }
>    
>    das_grid_sales_plan.ResetStatus();
>-->
></SCRIPT>
><SCRIPT LANGUAGE="JAVASCRIPT" FOR="grid_sales_plan" EVENT="OnExit(row,colid,olddata)" >
><!--
>    var intAddCnt = 0;
>    var arrChgFlagId = new Array();
>    var intChgFlag = 0;
>    var boolFlag = true;
>    if( !colid.substring(0,3) == "CS_" || !colid.substring(0,3) == "CD_" || das_grid_sales_plan.NameValue(row,"TFLAG" ) != "D"){
>        return;
>    }
>           if( das_grid_sales_plan.NameValue(row,"add_yn" ) == "N"){
>                   for(var j=0; j<=arrChgFlagId.length; j++){
>                           if(arrChgFlagId[j] == colid){
>                                   boolFlag = false;        
>                           }
>                   }                   
>                   if(boolFlag){
>                        if(colid.substring(0,3) == "CS_"){    
>                                jsResetMonthDiv( row, colid, das_empty_calendar, das_grid_sales_plan, grid_sales_plan);                                
>                        }else if(colid.substring(0,3) == "CD_"){                                 
>                                jsResetMonthSum( row, colid, das_empty_calendar, das_grid_sales_plan, grid_sales_plan);                                
>                        }
>                        arrChgFlagId[intChgFlag] = colid;
>                           intChgFlag++;
>                }
>        }        
>        
>    das_grid_sales_plan.ResetStatus();
>-->
></SCRIPT>
>
>
>그리고 각 실행 함수는 다음과 같습니다.
>=> 상위 총합계를 변경하는 함수
>function jsResetTotalSum( row, colid, intAddCnt, dsObjName, gridObj, strColName, strColValue, strNaviColName ){
>    gridObj.ReDraw = false;
>    
>    var arrNaviColValue = new Array();
>    var strNaviValue    = dsObjName.NameValue(row, strNaviColName);
>    var intOrgValue     = parseInt(dsObjName.OrgNameValue(row,colid));
>    var intAmdValue     = parseInt(dsObjName.NameValue(row,colid));
>    var intCurLevel     = Number(dsObjName.NameValue(row,"T_LEVEL"));
>    
>    for(var i = 1; i <= row; i++ ){
>        var intTotRow = i + intAddCnt;
>        
>        if(dsObjName.NameValue(intTotRow,strColName) == strColValue){
>                var intTotSum       = parseInt(dsObjName.NameValue(intTotRow,colid)) - intOrgValue + intAmdValue;
>                var strCurNaviValue = dsObjName.NameValue(intTotRow, strNaviColName);
>                
>                if(strNaviValue.indexOf(strCurNaviValue) != -1&& intCurLevel == Number(dsObjName.NameValue(i, "T_LEVEL"))+1){                        
>                        dsObjName.NameValue(intTotRow, colid ) =  Math.round(intTotSum);                        
>                        break;
>                }
>               }        
>        }        
>    gridObj.ReDraw = true;
>}
>
>
>
>=> 월합계를 변경하는 함수
>
>function jsResetMonthSum( row, colid, dsCarlenName, dsObjName, gridObj){
>          gridObj.ReDraw = false;
>          var intOrgValue     = parseInt(dsObjName.OrgNameValue(row,colid));
>    var intAmdValue     = parseInt(dsObjName.NameValue(row,colid));
>    var strColid        = colid.substr(3,colid.length);
>    
>    for(var i = 1; i <= dsCarlenName.CountRow; i++ ){
>        var strMonthAscRank  = das_empty_calendar.NameValue(i,"month_asc_rank"  );
>        var strMonCode       = das_empty_calendar.NameValue(i,"m_code");
>        var strWeekCode      = das_empty_calendar.NameValue(i,"h_code");
>        
>        if(strWeekCode == strColid){
>                   var intTotSumM = parseInt(dsObjName.NameValue(row,"CS_"+strMonCode)) - intOrgValue + intAmdValue;
>                  dsObjName.NameValue(row, "CS_"+strMonCode ) =  Math.round(intTotSumM);
>            break;
>        }
>    }
>    gridObj.ReDraw = true;
>}
>
>=> 월을 주로 배분하는 함수
>function jsResetMonthDiv( row, colid, dsCarlenName, dsObjName, gridObj){
>        gridObj.ReDraw = false;
>    
>    var intAmdChgValue  = dsObjName.NameValue(row,colid) - dsObjName.OrgNameValue(row,colid);
>    var strColid        = colid.substr(3,colid.length);
>          var arrChgSum       = new Array();
>          var arrColName      = new Array();
>          var intChgIndex     = 0;
>        
>    for(var i = 1; i <= dsCarlenName.CountRow; i++ ){
>        var strMonthAscRank  = das_empty_calendar.NameValue(i,"month_asc_rank"  );
>        var strMonCode       = das_empty_calendar.NameValue(i,"m_code"          );
>        var strWeekCode      = das_empty_calendar.NameValue(i,"h_code"          );
>        
>        if(strMonCode == strColid){            
>                var intWeek = parseInt(dsObjName.NameValue(row,"CD_"+strWeekCode));
>                var intMonth = parseInt(dsObjName.OrgNameValue(row,"CS_"+strMonCode));
>                var intChgSum = intWeek + (intWeek/intMonth*intAmdChgValue);
>                            
>                            dsObjName.NameValue(row, "CD_"+strWeekCode ) =  Math.round(intChgSum);
>                                        arrChgSum[intChgIndex] = intChgSum;
>                                        arrColName[intChgIndex] = strWeekCode;
>                            
>                            intChgIndex++;                        
>        }
>    }
>    
>    var intRemainSum = 0;
>    for(var j = 0; j < intChgIndex-1; j++){
>            intRemainSum += parseInt(arrChgSum[j]);            
>    }
>    
>    dsObjName.NameValue(row, "CD_"+ arrColName[intChgIndex-1]) =  parseInt(dsObjName.NameValue(row,colid)) - intRemainSum;
>          gridObj.ReDraw = true;
>}
>
>
>
번호 제목 닉네임 조회 등록일
7449 호환성 보기 설정 이후에도 메뉴 깨짐 현상
kiarakim
8807 2017-02-15
7448 Shift DEMO 사이트 에서 IE11 다운됨
정성호
9031 2017-02-10
7447 엑셀 업로드 속도 문의
jokerrain
9050 2016-12-15
7446 차트 질문 파일
신현철
8972 2016-10-04
7445 java.io.IOException/java.lang.NullPointerException 발생
윤재국
9786 2016-07-13
7444 호환성 보기
kiarakim
8582 2016-07-11
7443 가우스 그리드에 문자입력시 한글/영문 우선순위 변경
hthink
8561 2016-04-21
7442 레포트 DFooter영역 이미지 태그
FKSS
9116 2016-04-20
7441 좌/우측으로 데이터 이동
헐랭이
7711 2016-04-15
7440 가우스 리포트를 PDF로 저장 가능한가요?
안순주
9947 2016-04-12
7439 중간소계 필드 제외 문의
김은영2
7608 2016-04-08
7438 가우스 그리드 범위지정 선택 가능여부 문의 [1]
hthink
9837 2016-03-29
7437 그리드에 이미지표현 파일 [1]
홍혜련
8918 2016-03-23
7436 Internet Explorer의 작동이 중지되었습니다. 파일 [1]
김태성2
8604 2016-03-18
7435 특정 index (row) 삭제 [1]
c1138
8870 2016-03-17
7434 was교체시 업그레이드 재설치 문의 [1]
박서영
7760 2016-03-15
7433 파일 업로드 문의(핸들이 잘못 되었습니다)
임종훈
8674 2016-03-15
7432 개발서버 라이센스 갱신 문의 [1]
정민75
9798 2016-03-07
7431 문의합니다 파일 [1]
c1138
9111 2016-03-07
7430 EnterpriseMode 적용이 되지 않습니다. 파일 [1]
동긔나긔
10274 2016-03-03
Tag List
XE Login