this.fnDatasetEsbCall = function (dsData, dsEsbCall)
{
	dsEsbCall.copyData(dsData);
	dsEsbCall.clearData();
	for(var i = 0; i<dsData.rowcount;++i)
	{	
		if(true) {
			
			if(dsData.getColumn(i, "BF_ROWTYPE") == "BF")//"BF" 기존 DB에 존재하던 값을 의미
			{
				if(dsData.getRowType(i) == 4)//값이 변경된 경우. U(업데이트) 처리
				{
					dsEsbCall.addRow();
					dsEsbCall.copyRow(dsEsbCall.rowcount-1, dsData, i);
					dsEsbCall.setColumn(dsEsbCall.rowcount-1, "NOW_ROWTYPE", "U");
					dsEsbCall.setColumn(dsEsbCall.rowcount-1, "BF_ROWTYPE", dsData.getColumn(i, "BF_ROWTYPE"));
				}
				else//기존 값
				{
					dsEsbCall.addRow();
					dsEsbCall.copyRow(dsEsbCall.rowcount-1, dsData, i);
					dsEsbCall.setColumn(dsEsbCall.rowcount-1, "NOW_ROWTYPE", "N");
					dsEsbCall.setColumn(dsEsbCall.rowcount-1, "BF_ROWTYPE", dsData.getColumn(i, "BF_ROWTYPE"));
				}
			}
			else//신규 입력값
			{
				dsEsbCall.addRow();
				dsEsbCall.copyRow(dsEsbCall.rowcount-1, dsData, i);
				dsEsbCall.setColumn(dsEsbCall.rowcount-1, "NOW_ROWTYPE", "I");		
				dsEsbCall.setColumn(dsEsbCall.rowcount-1, "BF_ROWTYPE", dsData.getColumn(i, "BF_ROWTYPE"));
			}
		}
	}
	var delArr = dsData.getDeletedRowset();
	
	//삭제된 행 확인 후,  EsbCall에 추가.
	for(var i = 0; i<dsData.getDeletedRowset().length;++i)
	{
		var delRow = delArr[i];

		if(delRow.includes("BF"))
		{
			dsEsbCall.addRow();
			for(var j = 0; j<dsData.colcount;++j)
			{
				dsEsbCall.setColumn(dsEsbCall.rowcount-1, j, delRow[j]);
			}
			dsEsbCall.setColumn(dsEsbCall.rowcount-1, "NOW_ROWTYPE", "D");
		}
	}
	if(this.dsObjList==dsData) {

		var colArray = new Array("SPOP_1_VAL","SPOP_2_VAL","SPOP_3_VAL","SPOP_4_VAL","SPOP_5_VAL");

		for(var i = 0; i<dsEsbCall.rowcount; ++i) {
			
			var tFront = "BUILD_SN == '"+dsEsbCall.getColumn(i, "BUILD_SN")+"' && PURPS_SN == '"+dsEsbCall.getColumn(i, "PURPS_SN")+"'";
			
			//dsClauseList dataset의 복수의 값을 dsObjList에 넣기위한 조치
			var txt = new Array(tFront + " && SPOP_CD == 'T191'", "BGITDTARIFCAT1" 
							  , tFront + " && SPOP_CD =='T117'", "VGITDTARIFCAT3,GITDTARIFCAT5,GITDTARIFCAT4,GITDTARIFCAT6"
						      , tFront + " && (SPOP_CD == 'T750' || SPOP_CD =='T722')", "GITDTARIF7,GITDTARIF6,BGITDTARIFCAT6"
				         	  , tFront + " && (SPOP_CD == 'T855' || SPOP_CD =='T856')", "GITDTARIFCAT3"
					          , tFront + " && SPOP_CD == 'T559'", "ELAGDDCTAMT"
					          , tFront + " && SPOP_CD == 'T490'", "GITDTARIFCAT16,GITDTARIFCAT17,GITDTARIFCAT18,GITDTARIFCAT19,GITDTARIFCAT15"
					          , tFront + " && SPOP_CD == 'T406'", "RGITDTARIFCAT1"
					          , tFront + " && SPOP_CD == 'T594'", "GITDTARIFCAT10"
					          , tFront + " && SPOP_CD == 'T655'", "GITDTARIFCAT26,GITDTARIFCAT27,GITDTARIFCAT28,GITDTARIFCAT29"
					          );
			for(var j = 0; j<txt.length;j+=2) {
				var t = this.dsClauseList.findRowExpr(txt[j]);
	
				if(t != -1) {
					var insertArr = txt[j+1].split(","); 
					for(k = 0;k<insertArr.length;++k) {
						dsEsbCall.setColumn(i, insertArr[k], this.dsClauseList.getColumn(t2, colArray[k]));
					}
				}			
			}
		}
	}
}

Nexacro에서는 getRowType(n)을 통해 특정 row의 CRUD 상태를 알 수 있다.

그런데 어쩌다보니 이런걸 만들어야 할 필요가 생겼다. 기존 dataset에 deletedRowset을 추가하는 것도 방법이었지만 원본 dataset을 보존해야 할 필요가 있었기에 간략하게 만들었다. 실제 업무와 관련된 부분을 다 지웠더니 좀 너무 이상하게 보일 수 있다. BF가 없어도 되는데 왜 있어야 하느니..

특정 dataset에서 타 dataset의 column에 값을 넣어야 하는데 column명이 서로 다르고 임의로 맞춰넣어야 하기에 

Array로 조건을 묶어서 수정하기 쉽게 진행을 해보았다. 변경이 필요할 경우 한줄씩 바꾸면 되기 때문에 효율적이라 생각했다.

'Web' 카테고리의 다른 글

Nexacro Components 제어 Function  (0) 2020.06.18
Nexacro Div 정렬 Function  (0) 2020.06.18
this.fnCompsEnable = function(oForm, bEnable, sExcept)
{
	var oComps = oForm.components;
	//if(bEnable) return;
	
	for (var i = 0; i < oComps.length; i++) {	
		if (oComps[i].readonly || sExcept.indexOf(oComps[i].name) > -1) {
			continue;
		}
		
		if (oComps[i] instanceof nexacro.Edit ||
			oComps[i] instanceof nexacro.MaskEdit ||
		    oComps[i] instanceof nexacro.Combo ||
			oComps[i] instanceof nexacro.Calendar) 
		{
			oComps[i].set_readonly(!bEnable);
			
			if (bEnable) continue;
			
			oComps[i].set_border("1px solid #9c9c9c");
			oComps[i].set_autoselect(true);
		}
		
		if (oComps[i] instanceof nexacro.CheckBox ||
		    oComps[i] instanceof nexacro.Radio) 
		{
			oComps[i].set_readonly(!bEnable);
		}
		
		if (oComps[i] instanceof nexacro.Button) 
		{
			oComps[i].set_enable(bEnable);
		}		
		
		if (oComps[i] instanceof nexacro.Div) 
		{
			this.fnCompsEnable(oComps[i].form, bEnable, sExcept);
		}
	}
}

var sExcept = "btnNext_01, btnDetail"; 
this.fnCompsEnable(this, false, sExcept); sExcept에 적힌 component name과 동일한 경우에는 bEnable의 반대값을 적용해주는 형태이다. 

무수히 많은 component enable을 여러 줄을 쓰지 않고 sExcept에 string 형태로 전달만 하면된다는 것이 장점이다.

 

 

 

'Web' 카테고리의 다른 글

Nexacro Dataset CRUD 정리  (0) 2020.06.18
Nexacro Div 정렬 Function  (0) 2020.06.18
this.fnDivAlign = function() 
{	
	var oComp = this.components;
	var compLength = this.components.length;
	var div_list = [];
	var div_idx = 0; 
	var interval = 20; 
	var top = 0;

	for (var i=0; i<compLength; i++) {
		if (oComp[i] instanceof nexacro.Div) {
			if (div_idx == 0) top = oComp[i].top;
			div_idx++;

			if (oComp[i].visible) {
				div_list.push(oComp[i].id);

				if (div_list.length != 1) {
					top = nexacro.toNumber(top) + 
					nexacro.toNumber(oComp[div_list[div_list.length-2]].height) +
					nexacro.toNumber(interval);
				}

				oComp[div_list[div_list.length-1]].set_top(top);
			}
		}
	}
	
	this.resetScroll();
}

Nexacro로 동적 페이지를 만들어야 할 때, div를 보통 많이 이용한다.

 

전체 components를 가지고 반복문을 돌려서 div가 확인될 때마다 해당 div를 이전 div에서 interval 간격만큼 이동시키는 function이다. 처음 div 동적 페이지를 만들때는 [this.div09.set_top("div03:20px");]와 같이 개별 설정을 해주었는데 공통 function을 만드는 능력은 확실히 중요한 것 같다..

 

근데 Nexacro가 너무 자기 맘대로라 문제가 너무 많은데 이거 언제까지 써야하나 싶다.

회사에서 무언갈 했는데 이걸 어떻게 기록으로 남겨야할진 모르겠고...하여 다음과 같이 블로그에 작성을 한다.

너무 많이 쓸 순 없으니 그건 그거대로 또 문제라서 걱정이다..

'Web' 카테고리의 다른 글

Nexacro Dataset CRUD 정리  (0) 2020.06.18
Nexacro Components 제어 Function  (0) 2020.06.18

+ Recent posts