728x90

넥사크로 스튜디오에서 작성하는 기본 코드를 공유한다.

 

 

/**
 * @file XXXXXXXXF00.xfdl
 * @author XXX
 * @since 2022.11.04
 * @description XXXXXXXXXXXXXXXXX
 ************** 소스 수정 이력 ***********************************************
 *  date            Modifier                Description
 *******************************************************************************
 *  2022.11.04      XXX                     최초 생성
 *
 *******************************************************************************
**/

/************************************************************************************************
 * include 영역(업무화면에서 꼭 필요한 경우에만 사용, 미사용 시 include 영역 제거)
************************************************************************************************/

/************************************************************************************************
 * FORM 변수 선언 영역
************************************************************************************************/
this.XXXXXX = 0;

/************************************************************************************************
 * FORM EVENT 영역(onload, onbeforeclose 등)
************************************************************************************************/
/**
 * @description 화면 onload시 처리내역(필수)
**/
this.form_onload = function(obj:nexacro.Form,e:nexacro.LoadEventInfo)
{
    // 폼 공통기능 초기화
    this.gfnInitForm();
    
    // 공통코드 바인딩
    // 폼초기화
};

/**
 * @description 폼 초기화
**/
this.fnInitForm = function ()
{
    // 조회조건 영역 기본설정
    this.dsSearch.setColumn(0, "USE_YN", "Y");
    
    // dataset validation ruleset
    this.gfnSetValidRule(this.dsForm, "CONTENTS" , "내용"       , "required, maxlengthbyte:4000");
    this.gfnSetValidRule(this.dsForm, "FILE_SIZE", "파일사이즈" , "required");
    
    // 조회
    this.fnTransaction('조회(search)');

};

/************************************************************************************************
 * CRUD 및 TRANSACTION 서비스 호출 처리
************************************************************************************************/
/**
 * @description 트랜잭션
**/
this.fnTransaction = function (svcId)
{
    let sSvcId    = svcId;
    let sSvcUrl   = "app/service/" + svcId;
    let sInDS     = "";
    let sOutDS    = "";
    let sArg      = "";
    let sCallback = "fnCallbackTransaction";
    
    switch (sSvcId) {            
        case "상세조회(search)" : 
            sInDS     = "dsSearch";
            sOutDS    = "dsList";
            break;
            
        case "조회(search)" : 
            
            // 업로드 가능파일 초기화
            this.fnExtGridInit();
            this.dsOrg.clearData();
            this.dsUser.clearData();
            
            sInDS     = "dsSearch";
            sOutDS    = "dsForm dsUpldExtn dsOrgUser";
            break;
            
        case "저장(save)" : 
            sInDS     = "dsForm dsUpldExtn dsOrgUser dsOrg dsUser ";
            sOutDS    = "";
            break;
            
        default :
            break;
    }
    
    // 서비스 트랜잭션 호출
    this.gfnTransaction(sSvcId, sSvcUrl, sInDS, sOutDS, sArg, sCallback, true);
    
};

/************************************************************************************************
 * CALLBACK 처리부분 (C/R/U/D Transaction, Common Code, Popup, Message, Excel Export/Import)
************************************************************************************************/
/**
 * @description gfnTransaction CallBack 함수
**/
this.fnCallbackTransaction = function(serviceId, responseCode, responseMessage)
{
    // 에러 시 화면 처리 내역
    if (responseCode != 0) {
        this.gfnAlert(responseMessage);
        return;
    }

    switch (serviceId)     {
        case "상세조회(search)" : 
            // TODO
            break;
        
        case "조회(search)" : 
            // TODO
            break;
            
        case "저장(save)" : 
            this.gfnAlert('save.success');
            // TODO
            break;
    
        default :
            break;
    }
};

/**
 * @description Message CallBack 함수
**/
this.fnCallbackMessage = function(messageId, resultValue)
{
    switch (messageId) {
        case "btnSearch" : 
            if (resultValue) {
                // TODO
            }
            break;
            
        case "btnNew" : 
            if (resultValue) {
                // TODO
            }
            break;
            
        case "btnDel" : 
            if (resultValue) {
                // TODO
            }
            break;
            
        case "btnSave" : 
            if (resultValue) {
                // TODO
            }
            break;

        case "XXXXXXX" : 
            if (resultValue) {}
            break;
            
        default :
            break;
    }
};

/**
 * @description fnOpenPopup CallBack 함수
**/
this.fnCallbackPopup = function(popupId, resultValue)
{
    switch (popupId) {
    
        case "부서팝업" : 
            if ( !this.gfnIsEmpty(resultValue) ) {
            
                let aResultLength  = resultValue.cuscOrgNo.length;
                
                for(let i=0 ; i<aResultLength; i++){
                    let sOrgNo = resultValue.orgNo[i];
                    let sOrgNm = resultValue.orgNm[i];

                    if(this.dsOrgUser.getCaseCount("ORG_NO == '"+sOrgNo+"'") < 1){
                        let nAddRow = this.dsOrgUser.addRow();
                        this.dsOrgUser.setColumn(nAddRow,"ORG_NO",sOrgNo);
                        this.dsOrgUser.setColumn(nAddRow,"ORG_NM",sOrgNm);
                    }
                } // end for
            }
            break;
            
        case "사용자팝업" : 
            
            if ( !this.gfnIsEmpty(resultValue) ) {
                let nAddRow = this.dsOrgUser.addRow();
                this.dsOrgUser.setColumn(nAddRow,"USER_ID",resultValue.userId);
                this.dsOrgUser.setColumn(nAddRow,"USER_NM",resultValue.userNm);
            }
            break;
            
        case "XXXXXXXXX" :    // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
            break;
            
        default :
            break;
    }
};



/************************************************************************************************
 * 사용자 FUNCTION 영역
************************************************************************************************/
/**
 * @description 입력폼 초기화
**/ 
this.fnFormInit = function(){
};

/**
 * @description 업로드 가능파일 그리드 초기화
**/ 
this.fnExtGridInit = function(){
};

/**
 * @description 입력폼 생성.
**/ 
this.fnNewForm = function(){
};

/**
 * @description 총건수
**/

/**
 * @description 팝업호출
**/
this.fnOpenPopup = function (popupId, param)
{
    let sPopupId  = popupId;
    let sUrl      = "business::sys/" + sPopupId + ".xfdl";
    let oArgument = param;
    let sCallback = "fnCallbackPopup";
    let oOption   = {};
    
    switch (sPopupId) {
        case "부서" : 
            oOption = {title : "조직팝업", width : 710, height : 550};
            break;
        case "사용자" :
            oOption = {title : "상담사조회팝업", width : 800, height : 550};
            break;

        default :
            break;
    }
    
    this.gfnOpenPopup(sPopupId, sUrl, oArgument, sCallback, oOption);
};

/************************************************************************************************
 * 각 COMPONENT 별 EVENT 영역
************************************************************************************************/
/**
 * @description DATASET CANROWPOSITION 변경 이벤트
**/
this.dsList_canrowposchange = function(obj:nexacro.NormalDataset,e:nexacro.DSRowPosChangeEventInfo)
{
    let boardNo = this.dsList.getColumn(e.newrow, "BOARD_NO");  //템플릿번호

    if ( !this.gfnIsEmpty(boardNo) ) {
        this.dsSearch.setColumn(0, "BOARD_NO", boardNo);        
    }
    
    if ( this.gfnIsUpdated(this.dsForm) || this.gfnIsUpdated(this.dsOrgUser) ) {

            return this.gfnEventConfirm(e, "process.nosave", ["폼(FORM)"]
                                         , function(id,response) {
                                                if(response){
                                                    this.fnTransaction('조회(search)');
                                                }
                                           }
                                         , "dummyArgv");
            
    }else{
        this.fnTransaction('조회(search)');
    }

};

/**
 * @description DATASET ROWPOSITION 변경 이벤트
**/
this.dsList_onrowposchanged = function(obj:nexacro.NormalDataset,e:nexacro.DSRowPosChangeEventInfo)
{
    console.log('######################## dsList_onrowposchanged e.newrow/oldrow :: ' + e.newrow + '/' + e.oldrow);
    if( e.newrow == 0 && e.oldrow == -1 ){
        
        let boardNo = this.dsList.getColumn(e.newrow, "BOARD_NO"); 
        
        if ( !this.gfnIsEmpty(boardNo) ) {
            this.dsSearch.setColumn(0, "BOARD_NO", boardNo);
            this.fnTransaction('조회(search)');
        }        
    }
};

/**
 * @description 그리드 Row Click 이벤트
**/

/**
 * @description 신규버튼 클릭 이벤트
**/

/**
 * @description 저장버튼 클릭 이벤트
**/

/**
 * @description [검색영역] 조회 이벤트
**/

/**
 * @description [검색영역] 초기화 이벤트
**/

/**
 * @description [알림대상] 사용자추가 이벤트
**/

/**
 * @description [알림대상] 부서추가 이벤트
**/

/**
 * @description [알림대상] 삭제 이벤트
**/
728x90
반응형

+ Recent posts