넥사크로 12 - 함수

송용준·2023년 9월 21일
0

기능 처리를 위한 Script함수

콤보 일떄 첫 위치 정하기 : .setindex(1);
엔터키 입력 : (e.keycode == 13) { };
자동 포커스, 그리드에서 원하는 위치로 보내기 : .setCellPos(3);
팝업 호출 : .gfn_PR0600Pop(sPopupId, oArg);
팝업에서 값 내보내기 : .saveXML();
사진등록 : .set_image(sUrl
sImageUrl);
첨부파일 : .fn_SetCommFileScrnAuth(oScrnAuth);
값 지정 : .setColumn(this.ds_Master10.rowposition, "DRAF_AM", "0");
특정 벨리데이션 추가 : .fn_VaildMasterSave =
선택한Row 줄 긋기 : .gfn_SetGridSelectRowColor(obj, e.row);
엑셀 저장 : .gfn_ExcelExport(this, objGridList, sFileName);
사용여부에 따라 값 노출 : this.ds_Master10_oncolumnchanged = function(obj:nexacro.NormalDataset,e:nexacro.DSColChangeEventInfo)
{ if (e.columnid == "OD_DT") (e.columnid == "USED_YN") { };
숫자 format 해주기 : .set_format("@@@-@@@@@@");

** 팝업 찾기
src->main->nxui->nexacrolib->component->extProtype->Popup.js

** 날짜 포맷해서 가지고 오기
gfn_GetCommDate(" ") // "" 안에는 nextMonth, toDayFull 등등 으로 포맷 가능
ex) this.ds_Master10.setColumn(this.ds_Master10.rowposition,"DL_DT",this.gfn_GetCommDate("toDayFull"));

** 사용자정보(세션) 가지고 오기
gfn_GetSessionValue(""); // "" 안에는 USEM_NM, DEPM_NM 등등 유저정보 가져올 수 있음
ex) this.ds_Master10.setColumn(this.ds_Master10.rowposition,"DL_NM", this.gfn_GetSessionValue("USEM_NM"));

** 중복 데이터 벨리데이션체크
ex) if (!this.gfn_VaildDupDataset(this.ds_Detail10, "EQ_CD, GONG_CD")) {return false;}

** tab 보내기
ex) this.div_DetailInput.form.tab_Detail.set_tabindex(0);

** 특정값이 포함된 조회값 가지고 오기
ex)

	<if test=" SEAECH_TEXT != null and SEAECH_TEXT != '' ">
     AND ( SY20.MT_NM LIKE CONCAT('%', #{SEAECH_TEXT}, '%')   /* 공통그룹명 */
	     OR SY20.MT_CD LIKE CONCAT('%', #{SEAECH_TEXT}, '%')   /* 공통그룹코드 */ )
    </if>

** 콤보로 값을 선택했을 때 그 값에 따라 나오는 콤보 값 필터링
.filter

ex)

this.div_MasterInput_tab_Master_tpg_01_cbo_FiCd_onitemchanged = function(obj:nexacro.Combo,e:nexacro.ItemChangeEventInfo)
{
	if (!this.gfn_IsNull(e.postvalue)) {
		this.ds_Master10.setColumn(this.ds_Master10.rowposition,"JAL_CD","");
		this.ds_Co3010.filter ("");
		this.ds_Co3010.filter("FI_CD == '"+e.postvalue+ "'");
		this.ds_Co3020.filter("");
		this.ds_Co3020.filter("GDL_CD=='" + this.div_MasterInput.form.tab_Master.tpg_01.form.cbo_JalCd.value + "'");
		this.ds_Co3030.filter("");
		this.ds_Co3030.filter("GDL_CD=='" + this.div_MasterInput.form.tab_Master.tpg_01.form.cbo_JalCd.value + "' && GDM_CD == '" + this.div_MasterInput.form.tab_Master.tpg_01.form.cbo_JamCd.value + "'");		
	}
};
// Co3010 : 대분류
// Co3020 : 중분류
// Co3030 : 소분류
// e.postvalue : 새로 변경된 값

** 체크박스 체크된 ROW는 하나만 가능하게 만들기

this.fn_VaildDetailSave = function()
  if( this.ds_Detail10.getCaseCount("DEFAULT_YN=='Y'") > "1" ){
      alert("DEFAULT_YN 값은 한건만 가능")  
      return false
  }
}

** 날짜의 - 값을 제거해서 크기 비교하기

시작일자가 종료일자보다 크지 않게 만들기 위해서 데이터셋에 oncolumnchanged 에 밸리데이션 로직을 만드는데
문제는 입력 할때는 20231101 이런식으로 들어가지만 실제 DB안에 2023-11-10 이런식으로 들어가 있어서 값을 비교할 수가 없다. 하여 sEndDt = sEndDt.replace("-",""); 이런식의 replace를 비용하여 -값을 제거 후 값을 비교하는 밸리데이션 기능을 만든다.
추가로 .replace(/-/gi,"") 이런식으로 쓰면 replace()를 여러번 쓰지 않아도 일괄 처리된다. javascript는 다른 언어와 달리 replaceAll() 함수를 지원하지 않는다. (최신버전(2021)은 지원)

this.ds_Detail10_oncolumnchanged = function(obj:nexacro.NormalDataset,e:nexacro.DSColChangeEventInfo)
{
	this.gfn_GridUpdateProcess(this, obj, e);//crudType 변경-수정(U)
  
	if(e.columnid == "F_DT" || e.columnid == "T_DT"){	
		var sStartDt = this.ds_Detail10.getColumn(this.ds_Detail10.rowposition, "F_DT");		//시작일자
			sStartDt = sStartDt.replace("-","");
			sStartDt = sStartDt.replace("-","");
      		//sStartDt = sStartDt.replace(/-/gi,"");	// - 일괄 제거
		var sEndDt = this.ds_Detail10.getColumn(this.ds_Detail10.rowposition, "T_DT");		//종료일자
			sEndDt = sEndDt.replace("-","");	
			sEndDt = sEndDt.replace("-","");
      		//sEndDt = sEndDt.replace(/-/gi,"");	// - 일괄 제거

		if ( sStartDt > sEndDt ) {		
			var arrMsgArg = ["시작일자","종료일자"];
			this.gfn_Alert("SM056", arrMsgArg);//시작일자는 종료일자를 초과할 수 없습니다.

            if (e.columnid == "F_DT")  { 
              this.ds_Detail10.setColumn(this.ds_Detail10.rowposition,"F_DT","");
              this.div_MasterInput.form.tab_Detail.tpg_01.form.grd_Detail10.setCellPos(12);
            } else if (e.columnid == "T_DT") {
              this.ds_Detail10.setColumn(this.ds_Detail10.rowposition,"T_DT","");
              this.div_MasterInput.form.tab_Detail.tpg_01.form.grd_Detail10.setCellPos(13);
            }	
		}
	}
};

gfn 같은 경우에는 공통함수로 특별히 커스텀한 함수이기 때문에 회사마다 다름

profile
용용

0개의 댓글