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+"자로 입력해주세요.");
}
}
};
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;
}
//삭제하기
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");
}
}
}
};
위 코드의 크나큰 문제점 !!!!!
- db한테 일을 2번 시킴. < 성능 하락, 자원 낭비
- 첫번째 함수가 실행되고 실패해도 두번째 함수가 무조건 실행됨.
하나의 트랜잭션으로 처리 되지 않기 때문!
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);
}
};
case DataSet.ROW_TYPE_DELETED :
mapper.A1101010015FDeleteCodeB(data);
mapper.A1101010015FDeleteCodeH(data);
break;
}
<!-- 상세 코드삭제 -->
<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에 적용은 안되도록 수정했다.
// 상세코드 삭제
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);
}
}
};