0622

Dev.Shinny·2023년 6월 22일
0
  1. 상세코드의 코드ID의 길이는 그룹코드의 자릿수 보다 작거나 같도록 제한한다.
  2. 그룹코드의 자릿수 크기를 수정 할 경우 상세코드의 가장 큰 자릿수보다 작게 수정하지 못하도록 제한한다.
  3. 공통버튼의 "삭제" 버튼을 클릭하면 선택되어있는 그룹코드를 삭제한다.
    단, 해당 그룹코드에 상세코드가 존재하면
    "상세코드가 존재합니다. 함께 삭제하시겠습니까?" 라는 확인창을 출력한다.
    • "예" 를 클릭 하면 상세코드와 함께 그룹코드를 삭제한다.
    • "아니요"를 클릭하면 데이터를 삭제하지 않는다.
  4. 상세코드에 "삭제" 버튼을 추가한다.
    상세코드의 "삭제" 버튼을 클릭하면 선택 된 상세코드가 삭제된다.

7번

this.ds_ListBottom_oncolumnchanged = function(obj:nexacro.Edit,e:nexacro.ChangeEventInfo)
{
	// 코드ITEM 변경시에만 일어나는 이벤트 
	if(e.columnid == "CODE_ITEM"){
	
		var length =  this.ds_ListTop.getColumn(this.ds_ListTop.rowposition, "LENGTH");
		var code_id = this.edt_00.getLength();
		var newValue = this.ds_ListBottom.getColumn(this.ds_ListBottom.rowposition, "CODE_ITEM");
		
		trace("length = "+length+" code_id = "+code_id+" newValuse = "+newValue );
			
		if( length < code_id)
		{
			// Edit 컴포넌트 값 초기화 
			this.edt_00.set_value(""); 
			this.alert(length+"자로 입력해주세요.");
		}
	}
		
};

8번

this.ds_ListTop_cancolumnchange = function(obj:nexacro.NormalDataset,e:nexacro.DSColChangeEventInfo)
{
	//그룹코드의 자릿수보다 큰 상세코드가 있는제 체크
	if(this.fn_existBiggerLength(e.newvalue)) {
		alert("변경하려는 값보다 큰 값이 존재합니다.");
		return false;	
	} else {
		//없으면 수정
		return true;
	}
};

this.fn_existBiggerLength = function(newValue) {
	for(var i = 0; i < this.ds_ListBottom.rowcount; i++) {
		trace(i);
		if(this.ds_ListBottom.getColumn(i, "CODE_ITEM").length > newValue) {
			return true;
		}
	}
	return false;	
}

9번

//삭제하기
this.fn_DeleteRowCommon = function ()
{
	var nRow = this.ds_ListTop.rowposition;
	// 추가된 행은 그냥 삭제 
	if(this.ds_ListTop.getRowType(nRow)==Dataset.ROWTYPE_INSERT){
		this.ds_ListTop.deleteRow(nRow);
	}
	else 
	{
		if( this.ds_ListBottom.rowcount > 0 ){		
			if( this.confirm("상세코드가 존재합니다. 함께 삭제하시겠습니까?")){
				this.ds_ListBottom.deleteAll();
				//상세코드 저장 
				this.fn_Run("A1101010015FSaveCodeB");
				this.ds_ListTop.deleteRow(nRow);
				//그룹코드 저장 
				this.fn_Run("A1101010015FSaveCodeH");
			}	
		}else{
			if( this.confirm("삭제하시겠습니까?"))
			{
				this.ds_ListTop.deleteRow(nRow);
				this.fn_Run("A1101010015FSaveCodeH");
			}
		}
	}	
};

위 코드의 크나큰 문제점 !!!!!

  1. db한테 일을 2번 시킴. < 성능 하락, 자원 낭비
  2. 첫번째 함수가 실행되고 실패해도 두번째 함수가 무조건 실행됨.
    하나의 트랜잭션으로 처리 되지 않기 때문!

수정된 코드(1)_넥사크로

this.fn_DeleteRowCommon = function ()
{
	var nRow = this.ds_ListTop.rowposition;
	// 추가된 행은 그냥 삭제 
	if(this.ds_ListTop.getRowType(nRow)==Dataset.ROWTYPE_INSERT){
		this.ds_ListTop.deleteRow(nRow);
	}
	else 
	{
		if( this.ds_ListBottom.rowcount > 0 ){		
			if( this.confirm("상세코드가 존재합니다. 함께 삭제하시겠습니까?")){
				this.ds_ListBottom.deleteAll();
				this.ds_ListTop.deleteRow(nRow);
				/*this.fn_Run("A1101010015FDeleteCodeH");*/
				this.fn_Run("A1101010015FSaveCodeH");
			}	
		}else this.ds_ListTop.deleteRow(nRow);	
	}	
};

수정된 코드(2)_Service

	case DataSet.ROW_TYPE_DELETED :
		mapper.A1101010015FDeleteCodeB(data);
		mapper.A1101010015FDeleteCodeH(data);
	break;			
	}

수정된 코드(3)_mapper

        <!-- 상세 코드삭제 -->
    <delete id="A1101010015FDeleteCodeB" parameterType="Map">    		  	
	<![CDATA[
		DELETE FROM A11.A1AT_CODE_B
	     WHERE 1=1     
	]]>		
		<if test="CODE_ID != null and CODE_ID != ''">
			 AND CODE_ID LIKE #{CODE_ID} || '%'
		</if>
		<if test="CODE_ITEM != null and CODE_ITEM != ''">
			 AND CODE_ITEM = #{CODE_ITEM}
		</if>		
	</delete>
    
        <!-- 그룹 코드삭제 -->
    <delete id="A1101010015FDeleteCodeH" parameterType="Map">    		  	
	<![CDATA[
		DELETE FROM A11.A1AT_CODE_H
	    WHERE CODE_ID = #{CODE_ID}
	]]>
	</delete>

추가로 기존에는 삭제 버튼이 삭제+저장까지 함께 되도록 했는데, 그 역할을 분리하여 저장 버튼을 누르지 않으면 클라이언트에서 그리드에서 삭제할 뿐 db에 적용은 안되도록 수정했다.

10번

// 상세코드 삭제
this.btn_15_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	var bRow = this.ds_ListBottom.rowposition;
	if(this.ds_ListBottom.getRowType(bRow)==Dataset.ROWTYPE_INSERT){
		this.ds_ListBottom.deleteRow(bRow);
	}
	else 
	{
		if( this.confirm("삭제 하시겠습니까?")){
			this.ds_ListBottom.deleteRow(bRow);
		}
	}
};
profile
Hello I'm Shinny. A developer who try to enjoy the challenge.

0개의 댓글