nexacro 에서 변수와 함수 사용시 Scope에 대한 정의
nexacro의 스크립트는 JavaScript 스펙을 표준으로 사용하게 됨에 따라, 다양한 사용자 및 사용자 소스의 수용 등을 위해 JavaScript를 이용하여 구현 할 수 있다.
변수 Scope 란 현재 위치에서 접근이 가능한 변수를 결정하는 방법이다. 자신의 Scope 안에 있다면 접근이 가능하여 변수를 읽거나 쓸 수 있는 것이고, Scope 밖이라면 해당하는 변수는 접근이 불가능하게 된다. 변수의 종류는 크게 두가지로 구분 할 수 있다.
전역변수(Global Variable) : Function밖에서 선언한 변수로 현재 화면의 어디에서나 접근가능 지역변후(Local Variable) : Function안에서 선언한 변수, Function안에서만 접근가능
폼에서 this.getName = function(){…}형태로 함수를 정의할 때 해당 함수 블록 내에서 var를 이용해 변수를 선언하면 이 변수는 this.getName함수 내에서만 참조가 가능한 로컬 스코프를 갖는 변수가 된다. 이 변수는 해당 함수가 실행, 즉 실행 컨텍스트 내에 들어왔을 때에만 유효하고 해당 함수가 종료되면 가비지 컬렉션 처리가 된다. nexacro의 폼에서는 모든 변수와 함수가 해당 폼의 인스턴스에 속하도록 “this”키워드를 사용하기 때문에 함수나 블록({과})내에서 변수 선언시 오히려 실수할 가능성이 적다. nexacro에서는 현재 실행 폼 내에서만 참조할 수 있도록 하기 위해서는 “this”키워드를 이용해서 해당 변수나 함수의 컨텍스트를 지정해야 한다. 전 역변수는 프로그램 전역에서 사용하는 변수이므로 메모리에 항상 로드가 되어 있고, 지역변수는 해당 지역에서만 사용되기 때문에 사용이 끝나면 소멸하게 된다. 자바스크립트는 함수형 언어 이므로 , 대부분의 지역변수는 함수 내부에서만 사용되고, 함수가 종료되면 해당 지역변수는 자동으로 소멸 된다. 이러한 이유로 Scope 미지정시 생성된 전역변수(최상위 Global에 생성)는 메모리상에 계속 누적이 되게 되어 많아 질 경우 성능에 영향을 주게 된다.
Scope미지정시 Global로 처리가 되므로 Variant사용시 반드시 Scope를 명시하여야 한다.
HTML5의 Scope와 동일한 구성을 사용하게 됨에 따라, ADL/FDL/XJS Script내에서 Scope를
명시하지 않는 Variant에 대해서 모두 최상위 Global의 member로 처리된다.
Scope를 반드시 명시하여 사용한다. (this/this.parent/application) Property/Function/Variant등은 this나 parent나 application을 명시하여 사용한다.
사용 예)
Function외에서 Scope, Var를 모두 명시하지 않을 때에는 global의 member로 처리되나 사용하지 않는 것을 권장한다. Function외에서 Scope없이 Var만 명시할 때에는 form의 member가 아닌 형태로 처리됨으로 사용하지 않는 것을 권장한다. (폼 스크립트 상의 변수)
Method도 this나 parent나 application을 명시하여 사용 (명시하지 않을 때에는 기존 Form의 method가 아닌 global member method가 실행됨)
FDL의 Global Variant도 this나 parent나 application을 명시하여 사용 (명시하지 않을 때에는 기존 Form의 member가 아닌 script상의 variant로 처리됨)
Scope를 명시하기 어려운 상황을 위해 LookUp Method가 제공이 되나 성능저하의 원인이 된다. (Object LookUp지원, Method LookUp지원)
실제로 각 변수 스코프에 따라 처리 성능이 얼마나 달라지는지 측정한 결과입니다.
조건 | 로컬변수 j를 증가 | this.j 증가 | application.j증가 |
---|---|---|---|
5회 평균치(ms) | 33.75 | 100.75 | 220 |
물론 이 수치는 아주 비정상적이고 과도한 방법
(실제로 3천만번을 돌려야 이런 결과를 얻을 수 있음)으로 테스트 한 것이기 때문에
이런 결과가 시스템 개발을 할 때 동일하게 적용이 될 수 있다고 말하기는 어렵다.
eval
eval 함수를 사용하게 되면 스크립트 원본코드를 동적으로 실행할 수 있습니다.
var dataset = eval("this." + obj.binddataset);
스크립트를 동적으로 실행할 수 있나요?
줄바꿈문자(개행문자) 처리
Script를 통한 개행문자 처리방법
개행문자는 \n을 사용하여 표현할 수 있습니다.
버튼>> 를 누르면 스크립트 실행결과를 볼 수 있습니다.
this.Button00_onclick = function(obj:Button, e:nexacro.ClickEventInfo) { this.stNewLine.set_text('aple' + String.fromCharCode(10) + 'Strawberries'); } this.Button01_onclick = function(obj:Button, e:nexacro.ClickEventInfo) { this.taNewLine.set_value('aple' + String.fromCharCode(10) + 'Strawberries'); } this.Button02_onclick = function(obj:Button, e:nexacro.ClickEventInfo) { this.ds_data.setColumn(0,"Column0",'aple' + String.fromCharCode(10) + 'Strawberries'); }
String.fromCharCode(10) : 개행문자를 의미합니다.
개행문자 처리방법을 알고 싶습니다.
- 소스 위치
Sample_Script\np_Script_Newline.xfdl
Number & Math
스크립트를 이용하여 숫자의 변환 및 연산관련 기능을 구현하는 방법을 제시합니다.
아스키 코드를 HEX값으로 변경하기
charCodeAt , fromCharCode 메소드를 이용하여 아스키 코드를 HEX값으로, HEX값을 아스키 코드로 변경하는 스크립트를 작성한다.
참고사항
- charCodeAt
지정한 인덱스에 해당하는 문자의 유니코드 인코딩 값에 해당하는 정수를 반환하는 메소드
- fromCharCode
유니코드 문자 값을 문자열로 반환하는 메소드
주요 소스 코드
this.fn_doAsciiHex = function(sValue, sType) { var sHex = "0123456789ABCDEF"; var sAscii = ' !"#$%&'+"'"+'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ['+'\\'+']^_`abcdefghijklmnopqrstuvwxyz{|}'; var sRtn = ""; if (sType == "A2H") { var sLet, nPos, h16, h1; for (var i = 0; i < sValue.length; i++) { sLet = sValue.charAt(i); nPos = sAscii.indexOf(sLet) + 32; h16 = Math.floor(nPos / 16); h1 = nPos % 16; sRtn += sHex.charAt(h16) + sHex.charAt(h1); } } if (sType == "H2A") { for (var i = 0; i < sValue.length; i++) { var sLet1 = sValue.charAt(2 * i); var sLet2 = sValue.charAt(2 * i + 1); var sVal = sHex.indexOf(sLet1) * 16 + sHex.indexOf(sLet2); sRtn += sAscii.charAt(sVal - 32); } } return sRtn; }
Ascill, HEX
- 소스 위치
Sample\Sample_Script\np_Script_Number_AsciiToHex.xfdl
숫자형식 여부 체크하기
charAt 메소드를 이용하여 입력한 문자열이 숫자 형식이 맞는지 여부를 체크 합니다.
참고사항
- charAt
지정한 인덱스에 해당하는 문자를 반환하는 메소드
숫자형식, charAt
- 소스 위치
Sample\Sample_Script\np_Script_Number_CheckNumber.xfdl
RGB 색상 코드 변경하기
parseInt 메소드를 이용하여 색상 RGB 값을 HEX코드로 HEX코드를 RGB 값으로 변경하는 스크립트입니다.
참고사항
- parseInt
문자열에서 변환된 정수를 반환하는 메소드
- charAt
지정한 인덱스에 해당하는 문자를 반환하는 메소드
execute버튼 클릭시 화면의 background색상이 변경됩니다.
RGB, HEX
- 소스 위치
Sample\Sample_Script\np_Script_Number_HexToRGB.xfdl
진수 변환하기
toString 메소드를 이용하여 10진수, 16진수, 2진수를 변환하는 스크립트를 작성합니다.
참고사항
- toString
문자열을 반환하는 메소드이며, 문자열로 변환할 진수 값을 인자로 사용할 수 있다.
진수, toString
- 소스 위치
Sample\Sample_Script\np_Script_Number_NumberFormat.xfdl
숫자 범위 체크하기
toNumber 메소드를 이용하여 입력한 숫자가 지정한 범위 사이에 있으면 true, 없으면 false를 반환하는 스크립트입니다.
input0의 입력 값이 inpup1과 input2 사이에 존재하는지를 체크합니다.
참고사항
- toNumber
입력된 값을 숫자로 변환하는 메소드
범위 체크, toNumber
- 소스 위치
Sample\Sample_Script\np_Script_Number_NumberRange.xfdl
백분율 구하기
Math 객체를 이용하여 입력된 값 기준으로 백분율을 구합니다.
참고사항
- Math
수학 함수와 관련 상수가 정의된 오브젝트
- round
주어진 수식을 반올림하여 정수 값을 반환한다.
백분율, percentage, round
- 소스 위치
Sample\Sample_Script\np_Script_Number_Percentage.xfdl
숫자 값에 반올림 처리하기
참고자료
- round
주어진 수식을 반올림하여 정수 값을 반환한다.
round, 반올림
- 소스 위치
Sample\Sample_Script\np_Script_Number_Round.xfdl
문자열로 입력된 숫자를 정수형 타입으로 변환하기
parseInt 메소드를 이용하여 숫자 형의 문자열을 정수로 변환하는 스크립트를 작성합니다.
parseInt ,정수
- 소스 위치
Sample\Sample_Script\np_Script_Number_StringToInteger.xfdl
String
텍스트 문자열을 조작하고 서식을 지정하거나 문자열 안에서 부분 문자열을 결정하고 위치를 지정하는 Method 입니다.
문자열 내에서 원하는 만큼의 문자열 얻기
substr 메소드를 이용하여 입력된 문자열에서 위치를 정하고 해당 위치로 부터 주어진 길이만큼 원하는 문자열을 얻을 수 있습니다.
참고사항
- substr
문자열의 특정 부분을 지정된 길이만큼 반환하는 메소드입니다.
mid, substr
- 소스 위치
Sample\Sample_Script\np_Script_String_CharIndex.xfdl
문자열의 길이 반환하기
length 메소드를 이용하여 문자열의 길이를 반환합니다.
주요 소스 내용
function fn_charLength(sString) { var sString = sString.toString(); var nCnt = 0; for (var i = 0; i < sString.length; i++) { if (sString.charCodeAt(i) > 127) { nCnt += 2; } else { nCnt += 1; } } return nCnt; }
2바이트 문자인 한글을 처리하기 위해서 유니코드로 판단합니다.
참고사항
- charCodeAt
지정한 인덱스에 해당하는 문자의 유니코드 인코딩 값에 해당하는 정수를 반환하는 메소드
Length
- 소스 위치
Sample\Sample_Script\np_Script_String_CharLength.xfdl
영문과 숫자 체크하기
charCodeAt 메소드를 이용하여 영문과 숫자 여부를 확인합니다.
참고사항
- charCodeAt
지정한 인덱스에 해당하는 문자의 유니코드 인코딩 값에 해당하는 정수를 반환하는 메소드
charCodeAt
- 소스 위치
Sample\Sample_Script\np_Script_String_CheckAlpaNum.xfdl
한글과 특수문자 체크하기
charAt 메소드를 이용하여 한글과 특수문자 여부를 확인합니다.
참고사항
- indexOf
첫번째로 일치하는 부분 문자열의 위치를 반환하는 메소드이다. lastIndexOf()의 경우 문자 오른쪽에서 왼쪽 방향으로 검색합니다.
- charCodeAt
지정한 인덱스에 해당하는 문자의 유니코드 인코딩 값에 해당하는 정수를 반환하는 메소드
- charAt
지정한 인덱스에 해당하는 문자를 반환하는 메소드
indexOf, charCodeAt
- 소스 위치
Sample\Sample_Script\np_Script_String_CheckChar.xfdl
배열 내에 중복되는 데이터 제거하기
split 메소드를 이용하여 배열 내에 중복되는 데이터를 제거하는 스크립트를 구현합니다.
참고사항
- split
구분자로 분리되어있는 문자열 데이터를 배열로 반환하는 메소드
배열, 중복제거
- 소스 위치
Sample\Sample_Script\np_Script_String_Distinct.xfdl
전각문자를 반각문자로 변환하기
charCodeAt 메소드를 이용하여 전각문자를 반각문자로 변경합니다.
참고사항
- unescape
strChar의 내용을 포함한 새 문자열 값을 변환한다.
주요 소스 내용
function fn_fullToHalf(sFull) { …중략 for (var i = 0; i < sFull.length; i++) { sChar = sFull.charCodeAt(i); if (sChar == 12288) { sHalf += unescape("%20"); } else if ((sChar >= 65281) && (sChar <= 65374)) { sHalf += unescape("%" + (sChar-65248).toString(16)); } else { sHalf += sFull.charAt(i); } return sHalf; }
charCodeAt, unescape
- 소스 위치
Sample\Sample_Script\np_Script_String_FullToHalf.xfdl
반각문자를 전각문자로 변환하기
charCodeAt 메소드를 이용하여 반각문자를 전각문자로 변경합니다.
참고사항
- fromCharCode
fromCharCode(유니코드 문자 값)은 유니코드 문자 값 중에서 문자열을 반환합니다.
주요 소스 내용
function fn_halfToFull(sHalf) { …중략 for (var i = 0; i < sHalf.length; i++) { if ((sHalf.charCodeAt(i) >= 32) && (sHalf.charCodeAt(i) <= 126)) { … 중략 { sChar = sHalf.charCodeAt(i) + 65248; } } … 중략 sFull = sFull + String.fromCharCode(sChar); } return sFull; }
charCodeAt, unescape
- 소스 위치
Sample\Sample_Script\np_Script_String_HalfToFull.xfdl
한글 ↔ 유니코드 변환기 만들기
자바스크립트 정규식을 이용하여 한글을 유니코드로, 유니코드를 한글로 변환하는 변환기를 만들 수 있습니다.
참고사항
- escape
유니코드로 변환하는 메소드
- unescape
escape로 변환된 문자열을 디코딩하는 메소드
주요 소스 내용
… 중략 … function fn_hanUni(sHan) { var sUni = escape(sHan); return sUni; } … 중략 … function fn_uniHan(sUni) { var sHan = unescape(sUni); return sHan; } … 중략 …
escape, unescape
- 소스 위치
Sample\Sample_Script\np_Script_String_HanGulToUnicode.xfdl
문자열이 지정된 길이로 되도록 다른 문자로 채우기
padLeft, padRight 메소드를 이용하여 문자열을 지정된 길이가 되도록 채워줍니다.
주요 소스 내용
this.fn_lpad = function(sString, nSize, sPadChar) { var sRtn = ""; if (sPadChar != null) { sRtn = sString.padLeft(nSize, sPadChar); } else if (sPadChar == null) { sRtn = sString.padLeft(nSize, " "); } return sRtn; } this.fn_rpad = function(sString, nSize, sPadChar) { var sRtn = ""; if (sPadChar != null) { sRtn = sString.padRight(nSize, sPadChar); } else if (sPadChar == null) { sRtn = sString.padRight(nSize, " "); } return sRtn; }
padLeft, padRight
- 소스 위치
Sample\Sample_Script\np_Script_String_LpadRpad.xfdl
널 값을 체크하여 공백으로 반환하기
입력 데이터가 널이거나 undefined를 체크하여 공백으로 반환하는 스크립트
참고사항
- isNaN
어떤 값이 NaN인지 여부를 나타내는 메소드
null, undefined, NaN
- 소스 위치
Sample\Sample_Script\np_Script_String_NullToEmpty.xfdl
숫자를 한글로 변환하기
charAt 메소드를 이용하여 정수를 한글이나 한자로 표현합니다.
charAt
- 소스 위치
Sample\Sample_Script\np_Script_String_NumberToString.xfdl
문자열에 홀따옴(‘)표 붙이기
substr 메소드를 이용하여 문자열에 홀따옴(‘)표를 좌우에 붙일 수 있습니다.
Single quotation, 홀따옴표
- 소스 위치
Sample\Sample_Script\np_Script_String_Quote.xfdl
문자열에 있는 하이픈(-) 제거하기
replace 메소드를 이용하여 문자열에 하이픈(-)을 제거할 수 있습니다.
참고사항
- replace
정규식 또는 검색 문자열을 사용하여 텍스트를 바꾸고 해당 문자열을 반환하는 메소드
하이픈, hyphen, replace
- 소스 위치
Sample\Sample_Script\np_Script_String_RemoveHyphen.xfdl
문자열을 분리하여 배열로 만들기
- 소스 위치
Sample\Sample_Script\np_Script_String_StringToAarray.xfdl
공백 제거한 값을 리턴하는 함수
공백을 제거한 값을 리턴 한다.
- 소스 위치
Sample\Sample_Script\np_Script_String_Trim.xfdl
Date
스크립트를 이용하여 Date 관련한 처리방법을 제시합니다.
날짜 차이계산
Date 객체를 이용하여 날짜 차이를 계산합니다.
두 날짜의 차이를 확인할 수 있나요?
Date
- 소스 위치
Sample\Sample_Script\np_Script_Date_CalculateDate.xfdl
시간 차이 계산
Date 객체를 이용하여 날짜와 시간 차이를 계산합니다.
주요 소스 내용
this.fn_calculateDate = function(sDateS, sDateE, sGbn) { var nMonth = 0; //계산된 개월수 var nYear = 0; //계산된 년도 var nRtn = 0; //반환할 개월수 if (sGbn == "M") { if (parseInt(sDateS) <= parseInt(sDateE)) { nYear = parseInt(sDateE.substr(0,4))- parseInt(sDateS.substr(0,4)) ; nMonth = parseInt(sDateE.substr(4,2))- parseInt(sDateS.substr(4,2)); nRtn = (12 * nYear) + nMonth; } } else { var dFrom = new Date(sDateE.substring(0,4), sDateE.substring(4,6)-1, sDateE.substring(6,8) ,sDateE.substring(8,10), sDateE.substring(10,12), sDateE.substring(12,14)); var dTo = new Date(sDateS.substring(0,4), sDateS.substring(4,6)-1, sDateS.substring(6,8) ,sDateS.substring(8,10), sDateS.substring(10,12), sDateS.substring(12,14)); nRtn = parseInt((dFrom - dTo)/(1000*60*60*24)); } return nRtn; }
Date, getTime
- 소스 위치
Sample\Sample_Script\np_Script_Date_CalculateTime.xfdl
입력된 날짜에 대한 유효성 체크
toNumber 메소드를 이용하여 날짜의 정합성을 체크합니다.
주요 소스 내용
function fn_checkDate(sDate) { var nYear = toNumber(sDate.toString().substr(0,4)); var nMonth = toNumber(sDate.toString().substr(4,2)); var nDate = toNumber(sDate.toString().substr(6,2)); if ( nMonth > 12 || nMonth < 1) { return false; } switch (nMonth) { case 1: …중략… break; } return true; }
toNumber, 윤년
- 소스 위치
Sample\Sample_Script\np_Script_Date_CheckDate.xfdl
윤년 여부 확인하기
윤년계산법을 이용하여 2월 29일이 있는 윤년 여부를 확인합니다.
주요 소스 내용
this.fn_checkLeapYear = function(sDate) { var bRtn = false; var nY = parseInt(sDate.substring(0,4)); if ((nY % 4) == 0) { if ((nY % 100) != 0 || (nY % 400) == 0) { bRtn = true; } } return bRtn; }
윤년
- 소스 위치
Sample\Sample_Script\np_Script_Date_CheckLeapYear.xfdl
시간 유효성 체크
Number 메소드를 이용하여 시간의 적합성을 체크합니다.
주요 소스 내용
this.fn_checkTime = function(sTime) { var nHH = Number(sTime.toString().substr(0,2)); var nMM = Number(sTime.toString().substr(2,2)); var nSS = Number(sTime.toString().substr(4,2)); if (nHH > 24 || nHH < 0) { return false; } if (nMM > 59 || nMM < 0) { return false; } if (nSS > 59 || nSS < 0) { return false; } return true; }
Number
- 소스 위치
Sample\Sample_Script\np_Script_Date_CheckTime.xfdl
날짜를 문자로 변환하기
Date 객체를 이용하여 날짜를 문자로 변경합니다.
주요 소스 내용
this.fn_dateToString = function(dDate) { var sRtn = (new Date(dDate)).getFullYear() + ((new Date(dDate)).getMonth()+1).toString().padLeft(2, "0") + ((new Date(dDate)).getDate()).toString().padLeft(2, "0"); return sRtn; }
Date
- 소스 위치
Sample\Sample_Script\np_Script_Date_DateToString.xfdl
년월 유효성 체크
Number 메소드를 이용하여 날짜 년 월의 적합성을 체크합니다.
주요 소스 내용
this.fn_checkYearMonth = function(sDate) { var nYear = Number(sDate.toString().substr(0,4)); var nMonth = Number(sDate.toString().substr(4,2)); if ( nMonth > 12 || nMonth < 1) { return false; } return true; }
Number
- 소스 위치
Sample\Sample_Script\np_Script_Date_CheckYearMonth.xfdl
오늘 날짜와 현재 시간 구하기
Date 객체를 이용하여 오늘 날짜와 시간을 구합니다.
주요 소스 내용
this.fn_dateTime = function() { var dDate = new Date(); var sRtn = dDate.getFullYear() + (dDate.getMonth()+1).toString().padLeft(2, "0") + dDate.getDate().toString().padLeft(2, "0") + dDate.getHours().toString().padLeft(2, "0") + dDate.getMinutes().toString().padLeft(2, "0") + dDate.getSeconds().toString().padLeft(2, "0"); return sRtn; }
Date
- 소스 위치
Sample\Sample_Script\np_Script_Date_DateTime.xfdl
입력된 날짜의 요일 구하기
Date 객체를 이용하여 날짜의 요일을 구합니다.
주요 소스 내용
this.fn_hanGulWeek = function(sDate) { var dDate = new Date(parseInt(sDate.substr(0,4)) , parseInt(sDate.substr(4,2))-1 , parseInt(sDate.substr(6,2))); var sDay = dDate.getDay(); var arrweek = new Array("일", "월", "화", "수", "목", "금", "토"); var sRtn = arrweek[sDay]; return sRtn; }
Date
- 소스 위치
Sample\Sample_Script\np_Script_Date_HanGulWeek.xfdl
입력한 날짜의 마지막 날짜 구하기
Date 객체를 이용하여 입력 받은 날짜나 이번 달 마지막 일자를 반환합니다.
주요 소스 내용
this.fn_lastDay = function(sDate) { var dDate = ""; sDate = sDate.trim(); if (sDate == null || sDate == "" || sDate == "undefined") { //오늘 날짜의 한달후 값을 가져와서 오늘 일 만큼 빼줌 dDate = (new Date()).addMonth(1); dDate = (new Date(dDate)).addDate((new Date(dDate)).getDate()*-1); } else { //입력받은 날짜의 다음달 1일은 가져옴 dDate = new Date(parseInt(sDate.substr(0,4)), parseInt(sDate.substr(4,2)), 1); dDate = dDate.addDate(-1); } var sRtn = (new Date(dDate)).getFullYear() + ((new Date(dDate)).getMonth()+1).toString().padLeft(2, "0") + ((new Date(dDate)).getDate()).toString().padLeft(2, "0"); return sRtn; }
Date
- 소스 위치
Sample\Sample_Script\np_Script_Date_LastDay.xfdl
음력을 양력으로 변환하기
입력 받은 음력을 양력으로 변경합니다.
입력한 날짜에 대해 양력으로 변환할 수 있습니다.
- 소스 위치
Sample\Sample_Script\np_Script_Date_LunarToSolar.xfdl
양력을 음력으로 변환하기
입력 받은 양력을 음력으로 변경합니다.
parseInt
- 소스 위치
Sample\Sample_Script\np_Script_Date_SolarToLunar.xfdl
날짜의 주에 해당하는 날짜 구하기
Date 객체를 이용하여 주를 계산합니다.
주요 소스 내용
/* * File Name : Script_Date_WeekOfYear * Description : Finding the date interval corresponding to input week */ /* Button Click */ this.btn_execute_onclick = function(obj:Button, e:nexacro.ClickEventInfo) { var sRtn = this.fn_weekOfYear(this.edt_input0.value, this.edt_input1.value); this.edt_output.set_value(sRtn); } /* * Function Name : fn_weekOfYear * Description : Finding the date interval corresponding to input week * Parameter : Year, Week * Return : Applying(from ~ to) * Example : fn_weekOfYear(2012, 52); */ this.fn_weekOfYear = function(sYYYY, sWeek) { var dDate = new Date(parseInt(sYYYY), 0, 1); var nDay = dDate.getDay(); //0 = Sunday ~ 6 = Saturday if (nDay != 0) { dDate = new Date(dDate.addDate(-nDay)); } var nWeekS = dDate.addDate(7 * (sWeek-1)); var nWeekE = dDate.addDate(6); var sRtn = (new Date(nWeekS)).getFullYear() + ((new Date(nWeekS)).getMonth()+1).toString().padLeft(2, "0") + ((new Date(nWeekS)).getDate()).toString().padLeft(2, "0") + " ~ " + (new Date(nWeekE)).getFullYear() + ((new Date(nWeekE)).getMonth()+1).toString().padLeft(2, "0") + ((new Date(nWeekE)).getDate()).toString().padLeft(2, "0"); return sRtn; }
Date
- 소스 위치
Sample\Sample_Script\np_Script_Date_WeekOfYear.xfdl
Date 객체 사용시 주의사항
Date 객체를 사용하여 날짜를 생성할때, 월과 일을 설정하려면 아래와 같이 처리해주시기 바랍니다.
방법1. Date를 먼저 설정하고 Month를 설정한다.
예) var date = new Date(); date.setYear(2016); date.setDate(1); date.setMonth(3);
방법2. setMonth 메소드에서 date와 month를 한번에 설정한다.
예) var date = new Date(); date.setYear(2016); date.setMonth(3, 1);
방법3. Date 객체에 바로 설정하여 생성한다.
예) var date = new Date(2016, 3, 1);
위의 방법대로 설정하지 않으면, 날짜 오류가 발생합니다.
예를 들어, 금일 날짜가 3월 31일 경우, 아래의 순서대로 스크립트를 처리하면 생성되는 날짜는 2016년 5월 1일이 됩니다.
var date = new Date();
date.setYear(2016);
date.setMonth(3);
이러한 문제를 없애기 위해서는 항상 변수를 선언할 땐 초기화를 해주시기 바랍니다.
System
화면의 함수 유무 확인하기
typeof 함수를 이용하여 화면에 특정 함수가 있는지를 확인할 수 있습니다.
주요 소스 내용
/* * File Name : Script_System_ExistFunction * Discription : Verifying the function on the screen */ this.btn_execute_onclick = function(obj:Button, e:nexacro.ClickEventInfo) { var sRtn = this.fn_existFunction(this.edt_input.value); this.edt_output.set_value(sRtn); } /* * Function Name : fn_checkTelNo * Discription : Verifying the function on the screen * Parameter : Function * Return : true, false * Example : fn_existFunction("fn_test"); */ this.fn_existFunction = function(sValue) { //Check the function if input value is undefined if (this[sValue] == undefined) { return false; } else { // "fn_test" Checking the type of function this.alert("function checking is "+typeof(this[sValue])); if (typeof(this[sValue]) == "function") { return true; } else { return false; } } } /* * Function Name : fn_test * Discription : Checking function if it exists on screen or not */ this.fn_test1 = function() { }
typeof, 함수
- 소스 위치
Sample\Sample_Script\np_Script_System_ExistFunction.xfdl
Form의 컴포넌트 목록 구하기
Form의 components속성과 배열을 이용하여 화면이 가지고 있는 컴포넌트 목록을 구할 수 있습니다.
참고사항
- components
Form 객체에 있는 컴포넌트 리스트에 접근하는 속성이다.
주요 소스 내용
this.fn_getFormComponentList = function() { var arrCompList = this.components; for(var i=0; i<arrCompList.length;i++) { this.ds_data.addRow(); this.ds_data.setColumn(i, "DATA" ,arrCompList[i].name); } }
components, 컴포넌트리스트
- 소스 위치
Sample\Sample_Script\np_Script_System_FormComponentList.xfdl
현재 화면 아이디 값을 확인
formurl 속성을 이용하여 현재 화면의 파일명을 구합니다.
주요 소스 내용
/* * File Name : Script_System_FormID * Description : Finding current screen file name */ /* Button Click */ this.btn_execute_onclick = function(obj:Button, e:nexacro.ClickEventInfo) { var sRtn = this.fn_formID(); this.edt_output.set_value(sRtn); } /* * Function Name : fn_formID * Description : Finding current screen file name * Parameter : * Return : Form ID * Example : fn_formID(); */ this.fn_formID = function() { var sUrl = this.getOwnerFrame().formurl; var nStart = 0; var nIndex = sUrl.indexOf("::"); if ( nIndex > - 1) { nStart = nIndex + 2; } var nEnd = sUrl.indexOf(".xfdl"); var sFromId = sUrl.substring(nStart, nEnd); //In case if you have sub folder if (sFromId.indexOf("\\") > -1) { var arPath = sFromId.split("\\"); sFromId = arPath[arPath.length - 1]; } return sFromId; }
formurl, getOwnerFrame
- 소스 위치
Sample\Sample_Script\np_Script_System_FormID.xfdl
User Function
특정 API를 사용하기 보다는 스크립트의 기능을 주로 하여 기능을 구현하는 샘플을 제공합니다.
User Function은 고객사의 상황에 따라 값이 달라질 수 있으므로 반드시 체크 후
사용을 하시기 바랍니다.
배열 정렬하기
sort 메소드를 이용하여 배열을 정렬한다.
Sort
- 소스 위치
Sample\Sample_Script\np_Script_User_ArraySort.xfdl
2차원 배열 사용하기
- 소스 위치
Sample\Sample_Script\np_Script_User_TwoDemensionArray.xfdl
사업자번호 체크하기
- 소스 위치
Sample\Sample_Script\np_Script_User_CheckBRN.xfdl
법인등록번호 체크하기
- 소스 위치
Sample\Sample_Script\np_Script_User_CheckCRN.xfdl
전자메일(e-mail) 유효성 체크하기
- 소스 위치
Sample\Sample_Script\np_Script_User_CheckEmail.xfdl
입력값 널 판단하기
- 소스 위치
Sample\Sample_Script\np_Script_User_CheckNull.xfdl
주민번호 체크하기
- 소스 위치
Sample\Sample_Script\np_Script_User_CheckSSN.xfdl
주민등록번호로 성별 가져오기
- 소스 위치
Sample\Sample_Script\np_Script_User_SSNToGender.xfdl
decode 함수 구현하기
- 소스 위치
Sample\Sample_Script\np_Script_User_Decode.xfdl
삼항연산자 구현하기
- 소스 위치
Sample\Sample_Script\np_Script_User_Iif.xfdl
공통 스크립트 include하기
- 소스 위치
Sample\Sample_Script\np_Script_User_IncludeScript.xfdl
undefined을 ""로 반환하기
- 소스 위치
Sample\Sample_Script\np_Script_User_UndefineToNull.xfdl
만(서양 나이)으로 나이(연령)구하기
- 소스 위치
Sample\Sample_Script\np_Script_User_WestenAge.xfdl