인프런 커뮤니티 질문&답변

오성철님의 프로필 이미지
오성철

작성한 질문수

실무 환경 그대로 주문게시판 만들기 웹개발 기초 마스터

주문 등록 및 주문 수정 그리드 업데이트 관련 문의드립니다.(3차 문의)

해결된 질문

작성

·

315

·

수정됨

1

안녕하세요.

 

우선 연이어 질문 드려서 정말 죄송합니다.

 

어제 문의드렸던 내용 안내해주신대로 수정 팝업에 대한 함수 만들어서 구현해보았는데 여전히 수정 후, 게시판 메인화면에 조회버튼을 재클릭해야 수정사항이 반영되고 있습니다.

 

해결책이 마땅치 않아 재차 관련 내용 문의드리며,

OB_001.xfdl l코드 블록 참조하여 문의 드립니다.

아직 응용하기에 벅찬 부분이 있어 주문 수정과 함께 주문 등록도 같이 안내해주시면 정말 감사하겠습니다.

재차 문의드려 번거롭게 해드려 죄송합니다. 이왕 시작한 것 꼭 구현해보고자 해서 문의드립니다.

답변 주시면 정말 감사하겠습니다.

감사합니다.
(혹시 몰라 OB_001_01.xfdl과 OB_001_02.xfdl 코드블록도 참조드리겠습니다. 글자 수 제한 때매 다음 게시글에 첨부드리니 참조 해주시면 감사하겠습니다.)


this.OB_001_onload = function(obj:nexacro.Form,e:nexacro.LoadEventInfo)
{
	//alert("onload 함수 실행");
	
	//OB_001.xfml 화면이 로드될 때, 검색 조건의 주문상태 콤보박스를 초기화 시킨다.
	//서버에 요청을 하기전에 서버에 전달해줘야할 인자값은 뭐가 있을지 생각해봐야 한다.
	//주문상태값만을 불러오기 위해선 TB_CD_MST 테이블의 WHERE절에 CD_VAL = '001'이라는 조건을 걸어줘야 한다.
	//따라서 DATASET에 001이라는 값을 넣어 서버로 전달
	
	//ds_searchCombo 데이터셋을 생성하고 서버로 전달할 인자값 추가.
	this.ds_searchCombo.clearData();//데이터셋을 초기화
	this.ds_searchCombo.addRow();//초기화한 데이터셋에 값을 세팅하기 위해 한줄을 추가
	this.ds_searchCombo.setColumn(0,"CD_VAL","001");//추가된 0번째 ROW의 CD_VAL 컬럼에 001이라는 값을 추가
	
	
	//서버로 데이터 전송
	//서버로 데이터를 전송하기 전 필요한 값 세팅
	var strSvcId = "selectCommonCode";         		//넥사크로에서 트랜잭션을 구분하기 위한 id값, 이 id값은 차후 fncallback함수에 쓰인다.
	var strSvcUrl = "selectCommonCode.do";     		//java Controller에서 요청을 처리
	var inData = "ds_search=ds_searchCombo";   		//서버로 전송할 데이터셋을 세팅 = 문자 기준으로 왼쪽이 서버, 오른쪽이 프론트 데이터셋
													//서버측(.java)에도 = 기준 왼쪽 데이터셋명(ds_search)과 반드시 동일하게 명명해야한다.
	var outData = "ds_ordStatCombo=ds_commonCode";	//서버로부터 값을 전달받을 데이터셋을 세팅, inData와는 반대로 = 문자 기준으로 왼쪽이 프론트, 오른쪽이 서버 데이터셋
													//서버측(.java)에서도 = 기준 오른쪽 데이터셋명(ds_commonCode)와 동일한 이름 사용해야함.
	var strAvg  = "";								//데이터셋이 아닌 값을 보낼 때 쓰는 필드지만 데이터셋을 쓰는 것으로 통일
	var callBackFnc = "fnCallback";	//서버로부터 값을 받은 이후 프론트에서 이행해야할 작업 코드를 fnCallback 함수에서 작성
	
	this.gfnTransaction(strSvcId
					    ,strSvcUrl
						,inData
						,outData
						,strAvg
						,callBackFnc);

};

this.fn_search = function(nPageNo) {
	//alert("주문리스트 조회");
	//1. 조회 버튼을 클릭했을 때, 우리는 db에서 데이터를 조회하여 값을 그리드에 뿌려줘야 한다.
	//프론트에서 값들을 데이터셋에 생성해서 서버로 보내줘야 한다.
	//검색조건에 있는 5개 조회 요건들의 맞게 값들을 담아서 서버로 보내줘야 한다.
    //값들을 주문 리스트 조회 시 where절에 넣어줘야 조건에 알맞은 데이터를 가져올 수 있다.
	
	
	//1. 따라서, 검색 조건들을 ds_searchList라는 데이터셋을 만들어서 값을 세팅하는 작업을 수행해야 한다.
	
	//2. 서버에서 가져온 주문리스트를 화면단에 그리드에 보여줘야 한다.
	// 만들어놓은 그리드 뼈대에 서버에서 보내준 결과인 ds_list 데이터셋을 만들어 바인딩한다.
	// 바인딩함으로써 그리드가 서버로부터 가져오는 ds_list값을 보여주도록 만든다.
	
	//3. this.gfnTransaction 함수를 통해 서버로 데이터를 전송하고 받는 작업 수행
	this.ds_searchList.clearData();//ds_searchList 데이터셋 초기화
	this.ds_searchList.addRow();//초기화한 데이터셋에 데이터 세팅할 ROW추가
	
	// column별 데이터 추가
	// 데이터를 추가하기 위해서 set으로 세팅한다.
	this.ds_searchList.setColumn(0,"ORD_NO",this.edt_ordNo.value);
	this.ds_searchList.setColumn(0,"CUST_NM",this.edt_custNm.value);
	this.ds_searchList.setColumn(0,"COMP_YN",this.chk_cmpYn.value);
	this.ds_searchList.setColumn(0,"ORD_STAT_CD",this.cbo_ordStat.value);
	this.ds_searchList.setColumn(0,"CUST_GBCD",this.rdo_custGb.value);
	
	trace("ds_searchList::::::: 조회 버튼 클릭시  로그 확인 :::::::::::::::::::::::::");
	trace("ORD_NO   :" + this.ds_searchList.getColumn(0,"ORD_NO"));
	trace("CUST_NM   :" + this.ds_searchList.getColumn(0,"CUST_NM"));
	trace("COMP_YN   :" + this.ds_searchList.getColumn(0,"COMP_YN"));
	trace("ORD_STAT_CD   :" + this.ds_searchList.getColumn(0,"ORD_STAT_CD"));
	trace("CUST_GBCD   :" + this.ds_searchList.getColumn(0,"CUST_GBCD"));
	
	var strSvcId = "selectOrdList";         		//넥사크로에서 트랜잭션을 구분하기 위한 id값, 이 id값은 차후 fncallback함수에 쓰인다.
	var strSvcUrl = "selectOrdList.do";     		//java Controller에서 요청을 처리
	var inData = "ds_searchList=ds_searchList";   	//서버로 전송할 데이터셋을 세팅 = 문자 기준으로 왼쪽이 서버, 오른쪽이 프론트 데이터셋
													//서버측(.java)에도 = 기준 왼쪽 데이터셋명(ds_search)과 반드시 동일하게 명명해야한다.
	var outData = "ds_list=ds_list";	            //서버로부터 값을 전달받을 데이터셋을 세팅, inData와는 반대로 = 문자 기준으로 왼쪽이 프론트, 오른쪽이 서버 데이터셋
													//서버측(.java)에서도 = 기준 오른쪽 데이터셋명(ds_commonCode)와 동일한 이름 사용해야함.
	var strAvg  = "";								//데이터셋이 아닌 값을 보낼 때 쓰는 필드지만 데이터셋을 쓰는 것으로 통일
	var callBackFnc = "fnCallback";				    //서버로부터 값을 받은 이후 프론트에서 이행해야할 작업 코드를 fnCallback 함수에서 작성
	
	this.gfnTransaction(strSvcId
					    ,strSvcUrl
						,inData
						,outData
						,strAvg
						,callBackFnc);
}


this.btn_selectOrd_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
 {
 	this.fn_search();
 	
 };

this.btn_regOrd_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	
	//alert("주문 등록 팝업 오픈");
	var oArg = {};
	var oOption = {};
	var sPopupCallBack = "fnPopupCallback";
	this.gfnOpenPopup("popup","Board::OB_001_01.xfdl",oArg,sPopupCallBack,oOption);
};


this.btn_updOrd_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	//alert("주문 수정 팝업 오픈");
	var ordNo = this.ds_list.getColumn(this.ds_list.rowposition,"ORD_NO");
	
	var oArg = {ordNo:ordNo};
	var oOption = {};
	var sPopupCallBack = "fnPopupCallback";
	this.gfnOpenPopup("popup","Board::OB_001_02.xfdl",oArg,sPopupCallBack,oOption);
};

this.btn_delOrd_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	//alert("주문 삭제 진행");
	var ordNo = this.ds_list.getColumn(this.ds_list.rowposition,"ORD_NO");
	
	//확인창 띄우기
	var confirmResult = this.confirm("주문을 삭제하시겠습니까?");
	if (confirmResult){
		this.ds_delList.clearData();
		this.ds_delList.addRow();
		this.ds_delList.setColumn(0,"ORD_NO",ordNo);
	
	//서버로 deleteOrdList.do 라는 URL 요청에 ds_delList값을 담아 전송
	
		var strSvcId = "deleteOrdList";         		//넥사크로에서 트랜잭션을 구분하기 위한 id값, 이 id값은 차후 fncallback함수에 쓰인다.
		var strSvcUrl = "deleteOrdList.do";     		//java Controller에서 요청을 처리
		var inData = 	"ds_delList=ds_delList";   		//서버로 전송할 데이터셋을 세팅 = 문자 기준으로 왼쪽이 서버, 오른쪽이 프론트 데이터셋
														//서버측(.java)에도 = 기준 왼쪽 데이터셋명(ds_search)과 반드시 동일하게 명명해야한다.
		var outData = "";	            				//서버로부터 값을 전달받을 데이터셋을 세팅, inData와는 반대로 = 문자 기준으로 왼쪽이 프론트, 오른쪽이 서버 데이터셋
														//서버측(.java)에서도 = 기준 오른쪽 데이터셋명(ds_commonCode)와 동일한 이름 사용해야함.
		var strAvg  = "";								//데이터셋이 아닌 값을 보낼 때 쓰는 필드지만 데이터셋을 쓰는 것으로 통일
		var callBackFnc = "fnCallback";				    //서버로부터 값을 받은 이후 프론트에서 이행해야할 작업 코드를 fnCallback 함수에서 작성
		
		this.gfnTransaction(strSvcId
							,strSvcUrl
							,inData
							,outData
							,strAvg
							,callBackFnc);
		}
	
};


this.grd_ordList_oncelldblclick = function(obj:nexacro.Grid,e:nexacro.GridClickEventInfo)
{
	//그리드 셀 더블 클릭시 실행
};

this.chk_cnpYn_onchanged = function(obj:nexacro.CheckBox,e:nexacro.CheckBoxChangedEventInfo)
{
	//alert("onchanged 함수 실행");
};

this.grd_ordList_onheadclick = function(obj:nexacro.Grid,e:nexacro.GridClickEventInfo)
 {
	//아래 속성에서 0은 그리드에서 0번째 column을 의미하며, text값을 가져오라는 의미
 	var chkVal = obj.getCellProperty("head", 0, "text");
 	// 0이면 체크 안된 상태이고 1이면 체크된 상태
 	if(chkVal == "1"){ // 이미 체크된 상태라면 체크 해지로 변환
 		chkVal = "0";
 		obj.setCellProperty("head", 0, "text", chkVal); // 프론트에 적용(HEAD 부분)
 		for (var i=0; i<this.ds_list.rowcount; i++) {   // 프론트에 적용(ROW 부분)
 				this.ds_list.setColumn(i,"CHK","0");
 		}
 	}else{
 		chkVal = "1"; // 체크 안 된 상태라면 체크 표시
 		obj.setCellProperty("head", 0, "text", chkVal); // 프론트에 적용(HEAD 부분)
 		for(var i=0; i<this.ds_list.rowcount; i++){     // 프론트에 적용(ROW 부분)
 				this.ds_list.setColumn(i,"CHK","1");
 		}
 	}
 };
 



/*******************************************************************************************
* CallbackFunction (서버수신 후 후처리 영역)
********************************************************************************************/

this.fnCallback = function(svcID, errorCode, errorMsg)                                 
{
	if(errorCode < 0){
		alert("작업 실패 코드: " + errorCode + "\n" + errorMsg)
		return 0;
	}
	switch(svcID)
	{
		case "selectCommonCode" :                                       
			this.ds_ordStatCombo.insertRow(0);//0번째 ROW에 라인 삽입
			this.ds_ordStatCombo.setColumn(0,"CD_VAL1","");
			this.ds_ordStatCombo.setColumn(0,"CD_NM1","전체");
			break;
		case "deleteOrdList" :
			alert("주문 삭제 완료 되었습니다.");
			//조회버튼을 누르는 동작
			this.fn_search();
			break;
	}
};

this.fnPopupCallback = function (strId, strVal)
{
	trace("strId :" + strId + "strVal :" + strVal);
	switch(strId)
	{
		case "updatePopup" :
			this.fn_search();
			break;
	}
};




 

답변 1

0

kitdow.on님의 프로필 이미지
kitdow.on
지식공유자

안녕하세요. 킷도우입니다:)

죄송하다뇨 ㅠ 제 강의 관심가져 주셔서 감사드리고, 열정적으로 응용하시는 모습 응원합니다.

 

  1. 주문 수정


    this.btn_updOrd_onclick 이벤트 함수 구현 부분에서 현재 아래와 같이 돼있으신 것 같습니다.


    this.gfnOpenPopup("popup","Board::OB_001_02.xfdl",oArg,sPopupCallBack,oOption);


    여기서 첫 번째 매개변수 "popup" -> "updatePopup" 으로 변경해야 fn_search()함수가 동작합니다!

  2. 주문 등록


    주문 수정과 마찬가지입니다!
    this.btn_regOrd_onclick 이벤트 함수 내 this.gfnOpenPopup("insertPopup" ,...) 으로 수정하시고
    this.fnPopupCallback = function (strId, strVal) {


    trace("strId :" + strId + "strVal :" + strVal);

    switch(strId) {
    case "updatePopup"
    this.fn_search();
    break;


    case "insertPopup"
    this.fn_search();
    break;
    }
    };

    이상입니다.



    이 다음으로 팝업 소스 포함해서 질문 올려주셨는데, 이 코딩은 해당 팝업 소스와는 무관합니다. 따라서 해당 질문 올려주신 것은 삭제해주시면 감사하겠습니다:)

오성철님의 프로필 이미지
오성철
질문자

드디어 해결하였습니다. 도움 주셔서 진심으로 감사합니다!
추가적으로 요청드렸던 팝업 소스 관련 게시글 삭제하였습니다 :)

바쁘실텐데 신경써주셔서 정말 감사드립니다.

오성철님의 프로필 이미지
오성철

작성한 질문수

질문하기