JavaScript 코드의 ExternalType
- Rich UI 애플리케이션에 사용 가능한 JavaScript 로직을 작성하는 EGL 외부 유형을 개발합니다. JavaScript는 외부 유형의 구현입니다.
- 외부 유형이 Math 또는 Number과 같은 내장 JavaScript 클래스를 참조하지 않는 경우 비생성 JavaScript 클래스를 작성합니다.
- 외부 유형을 정의할 때 relativePath 특성을 설정하십시오. 이 특성은 WebContent 폴더에 상대적인 JavaScript 소스 파일의 위치를 표시합니다.
- JavaScript 코드를 작성할 때 다음과 같이 수행하십시오.
- EGL 특정 함수(일반 로직을 위한 경우 egl.defineClass 또는 위젯 정의를 위한 경우 egl.defineWidget)를 호출하십시오. 각각의 경우에 JavaScript는 EGL에서 사용하기 위한 것이며 사용 가능한 다른 JavaScript를 호출할 가능성이 높습니다.
- JavaScript 소스 파일의 이름이 JavaScript 클래스 이름과 같고 소스 파일 확장자가 .js인지 확인하십시오.
내장 JavaScript 클래스에서 외부 유형을 구현하는 경우 외부 유형의 relativePath 특성을 설정하지 마십시오.
외부 유형을 구현하는 방식에 상관 없이 JavaScript 클래스 이름이 외부 유형의 이름과 다른 경우 javaScriptName 특성을 클래스 이름으로 설정해야 합니다.
런타임 시 오류를 방지하려면 주어진 Rich UI 애플리케이션에서 여러 버전의 동일한 런타임 라이브러리를 사용하지 마십시오.
이 주제에서는 egl.defineClass 사용에 대해 설명합니다. 새 위젯 정의에 대한 세부사항은 “Rich UI 위젯 세트 확장”을 참조하십시오.
일반 사용 JavaScript 코드의 구조
egl.defineClass(
'packageName', 'className',
'superclassPackageName', superclassName,
{
"constructor": function()
{ },
"otherFunction": function(parameterList)
{ }
}
);
- packageName
- 사용자 정의 JavaScript가 있는 패키지 이름입니다. 이 패키지 이름은 필수이며, 대소문자를 구분하고, WebContent 서브폴더를 식별합니다. 첫 번째 폴더 아래에 있는 모든 서브폴더에 대해 슬래시 대신 마침표를 포함시키십시오. 예를 들어 JavaScript가 WebContent/myPkg/test 폴더에 있는 경우 packageName 값은 myPkg.test입니다.
- className
- JavaScript 클래스 이름으로 지정하는 ID입니다. 클래스는 사전 정의된 함수 콜렉션입니다. 이 이름은 외부 유형의 이름을 기본값으로 사용하는 EGL 외부 유형 JavaScriptName 특성의 이름이어야 합니다. 클래스 이름은 대소문자를 구분하며 필수입니다.
- superclassPackageName
- 선택사항입니다. 수퍼 클래스의 EGL 외부 유형이 있는 패키지 이름입니다. 패키지 이름은 대소문자를 구분합니다. 이 값을 지정하면 superclassName 값도 지정해야 합니다.
- superclassName
- 선택사항입니다. 수퍼 클래스의 이름이며, 이는 수퍼 클래스를 EGL 소스 코드에 사용할 수 있도록 하는 EGL 외부 유형의 이름입니다. 수퍼 클래스 이름은 대소문자를 구분합니다. 이 값을 지정하면 superclassPackageName 값도 지정해야 합니다.
- otherFunction
- 나중에 설명되는 "constructor" 항목에 추가되는 함수입니다. 추가 함수 수를 지정할 수 있습니다.
- parameterList
- 함수 매개변수의 목록입니다.
"constructor" 함수는 선택적이며, 이 함수가 있는 경우 외부 유형의 EGL 변수가 선언되는 즉시 실행됩니다. 해당 함수는 매개변수를 가질 수 없고 함수 목록의 임의의 위치에 있을 수 있습니다.
egl.defineClass(
'randomNumber', 'RandomNumberGenerator',
{
"constructor" : function()
{
this.upperLimit = 100;
},
"setUpperLimit" : function(limit)
{
this.upperLimit = limit;
},
"getUpperLimit" : function()
{
return this.upperLimit;
},
"generateRandomNumber" : function()
{
return Math.floor(Math.random()*this.upperLimit);
}
}
);
외부 유형 스테레오타입
package randomNumber;
import com.ibm.egl.rui.JavaScriptObject;
import com.ibm.egl.rui.JavaScriptProperty;
ExternalType RandomNumberGenerator type JavaScriptObject
{
relativePath = "randomnumber",
javaScriptName = "RandomNumberGenerator"
}
upperLimit int {@JavaScriptProperty{getMethod = "getUpperLimit",
setMethod = "setUpperLimit"}};
function generateRandomNumber() returns(int);
end
ExternalType MyType extends OtherType type JavaScriptObject
end
- relativePath
- WebContent 폴더에 상대적인 JavaScript 파일의 위치입니다.
이 특성 설정은 선택적입니다.
JavaScript 파일이 서브폴더가 아닌 WebContent 폴더에 직접 저장되는 경우
relativePath 특성을 비어 있는 문자열로 설정하십시오.
어떤 경우에도 특성 값에 파일 이름을 포함시키지 마십시오.
JavaScript 파일에서 외부 유형을 구현하는 경우 relativePath 특성을 설정해야 합니다. 내장 클래스에서 외부 유형을 구현하는 경우 이 특성을 설정하지 마십시오.
- javaScriptName
- JavaScript 클래스 이름을 지정합니다.
추정되는 파일 확장자 .js를 지정하지 마십시오.
이 특성 설정은 선택적입니다. 값을 지정하지 않으면 JavaScript 클래스의 이름이 외부 유형의 이름으로 추정됩니다.
javaScriptName 특성을 사용하여 이름이 EGL 예약어인 JavaScript 클래스에 액세스할 수 있습니다. 예를 들어 다음 외부 유형을 통해 이름이 add인 JavaScript 클래스에 액세스할 수 있습니다. 이 클래스는 WebContent/part1/part2/add.js 파일에 있습니다.ExternalType SumType type JavaScriptObject {relativePath = "part1/part2", javaScriptName = "add" } ; end - includeFile
- HTML 파일이나 기타 CSS 또는 JavaScript 파일(런타임 시 사용 가능해짐)을 식별합니다.
includeFile에 지정된 경로는
WebContent 디렉토리의 상대 경로입니다. 예를 들어 "JS/myFile.js"입니다. 외부 유형을 사용하여 Dojo 위젯을 참조하는 경우 다음 파일을 사용할 수 있습니다. :
<script type="text/javascript" src="http://o.aolcdn.com/dojo/1.0.0/dojo/dojo.xd.js"> </script> <style type="text/css"> @import "http://o.aolcdn.com/dojo/1.0.0/dijit/themes/dijit.css"; @import "http://o.aolcdn.com/dojo/1.0.0/dijit/themes/tundra/tundra.css"; @import "http://o.aolcdn.com/dojo/1.0.0/dojo/resources/dojo.css" </style> <script> dojo.require("dijit.form.Button"); dojo.require("dijit.form.Slider"); </script>해당 파일은 Dojo 위젯 라이브러리 및 Dojo CSS 파일을 로드하고 Dojo 런타임을 시작합니다.
- @JavaScriptProperty
- EGL 코드에서 JavaScript 글로벌 필드(this.myField 양식의 필드)에 액세스할 경우 이 복합 특성이 필수입니다. EGL 코드에서 값을 지정할 경우
JavaScript가
"constructor" 함수에 이 필드를 정의해야 합니다. 그러나 필드가 JavaScript의 어느 위치에 정의되었는지에 상관 없이
JavaScript 필드에서 값을 검색할 수 있습니다.
일반적으로 @JavaScriptProperty는 JavaScript 필드 값을 가져오고 설정하는 JavaScript 함수를 식별합니다. get 또는 set 단어 뒤에 변수 이름이 있는 함수 이름이 빌드된 경우 함수 이름을 지정하지 않고 이 특성을 사용할 수 있습니다. 예를 들어 변수가 UpperLimit이고 JavaScript 클래스에 getUpperLimit() 및 setUpperLimit() 함수가 포함된 경우 다음 예에서와 같이 복합 특성만 추가해야 합니다.
UpperLimit INT { @JavaProperty{} };@JavaScriptProperty의 특성 필드는 다음과 같습니다.- getMethod
- 지정된 변수에 대한 get 메소드 이름(소괄호 없음)이 포함된 문자열(따옴표로 둘러쌈)입니다. 메소드에 매개변수가 없고 해당 리턴값에 필드와 동일한 유형이 있습니다.
- setMethod
- 지정된 변수에 대한 set 메소드 이름(소괄호 없음)이 포함된 문자열(따옴표로 둘러쌈)입니다. 메소드에는 필드와 동일한 유형을 가진 하나의 매개변수가 있습니다. setMethod에 리턴값이 없다는 규칙이 있지만 메소드에서 값을 리턴하는 경우 오류 조건이 발생하지 않습니다.
두 특성 필드 중 하나만 지정하면 EGL은 지정되지 않은 함수를 사용 불가능하다고 추정합니다. 누락되었다고 추정되는 함수를 표현식에서 호출하지 않으면 오류가 발생하지 않습니다.
외부 유형의 필드 이름과 같이 JavaScript 필드 이름은 대소문자를 구분합니다.
EGL과 JavaScript 데이터 유형의 관계
| EGL 유형 | JavaScript 유형(대소문자 구분) |
|---|---|
| STRING | 문자열 |
| BOOLEAN | 부울 |
| SMALLINT, INT, FLOAT, SMALLFLOAT | 숫자 |
| BIGINT, DECIMAL, MONEY, NUM | egl.javascript.BigDecimal(이후의 절에서 설명됨) |
| DATE, TIME, TIMESTAMP | 날짜 |
EGL 배열이 JavaScript 배열로 JavaScript에 전달됩니다. EGL 유형(예: 배열)이 널로 설정되면 JavaScript 코드에서 JavaScript 널을 검색합니다.
egl.javascript.BigDecimal
제공된 JavaScript 클래스 egl.javascript.BigDecimal은 매우 큰 자리 수의 숫자를 정밀하게 표시할 수 있습니다. 이 클래스에는 BigDecimals를 사용하여 수학적 조작을 수행하기 위한 메소드도 있습니다.
JavaScript의 원시 숫자 유형은 부동 소수점 숫자를 표시하는 Number 클래스입니다. 이 클래스는 부정확하며 많은 값을 나타낼 수는 없습니다. Number 클래스의 값을 사용하여 계산할 때 반올림 오류가 발생할 수 있습니다.
var result = bigDecimal1.add( bigDecimal2 );
bigDecimal1.add( bigDecimal2 );
- "0"
- "12"
- "-76"
- "12.70"
- "+0.003"
- "17."
- ".5"
- "4E+9"
- "0.73e-7"
- abs()는 BigDecimal의 절대값을 리턴합니다.
- add(bd)는 현재 오브젝트와 인수의 합계를 리턴합니다.
- compareTo(bd)는 현재 오브젝트가 인수보다 작은 경우 -1을 리턴하고, 현재 오브젝트가 인수보다 큰 경우 1을 리턴하고, 같은 경우 0을 리턴합니다.
- divide(bd)는 현재 오브젝트를 인수로 나눈 결과를 리턴합니다.
- divideInteger(bd)는 현재 오브젝트를 인수로 나눈 결과의 정수 부분을 리턴합니다.
- equals(obj)는 오브젝트일 수 있는 인수가 현재 오브젝트와 동일한 값과 스케일(10진수 자리 수)을 가진 BigDecimal인 경우 true를 리턴합니다. 이 메소드는 인수가 BigDecimal이 아니거나 다른 값 또는 배율을 가진 BigDecimal인 경우 false를 리턴합니다. obj 매개변수는 오브젝트입니다.
- max(bd)는 현재 오브젝트 또는 인수 중 큰 것을 리턴합니다.
- min(bd)은 현재 오브젝트 또는 인수 중 작은 것을 리턴합니다.
- movePointLeft(n)는 현재 오브젝트(숫자)와 동일한 BigDecimal을 리턴합니다. 그러나 소수점이 지정된 위치만큼 왼쪽으로 이동합니다.
- movePointRight(n)는 현재 오브젝트(숫자)와 동일한 BigDecimal을 리턴합니다. 그러나 소수점이 지정된 위치만큼 오른쪽으로 이동합니다.
- multiply(bd)는 현재 오브젝트를 인수로 곱한 결과를 리턴합니다.
- negate() 는 현재 오브젝트의 부정을 리턴합니다.
- pow(bd)는 현재 오브젝트의 특정한 거듭제곱만큼 곱한 결과를 리턴합니다. 거듭제곱은 -999999999에서 999999999의 범위에 있어야 하며 소수 부분이 0이어야 합니다.
- remainder(bd)는 현재 오브젝트를 인수로 나눈 나머지를 리턴합니다.
- setScale(n, mode)은 주어진 스케일(10진수 자리 수)을 가진 BigDecimal을 리턴합니다. 인수 n은 숫자이며
선택적 인수 mode(나중에 설명됨)는 상수입니다.
n이 현재 스케일보다 큰 경우 이 메소드는 숫자의 소수 부분 뒤에 0을 추가합니다. n이 현재 스케일보다 작은 경우 이 메소드는 숫자의 소수 부분에서 후행 숫자를 제거하고 mode는 나머지 자리를 반올림하는 방법을 표시합니다. 다음은 mode에 사용 가능한 값입니다.
- 기본값(egl.javascript.BigDecimal.prototype.ROUND_UNNECESSARY)은 반올림이 필요하지 않음을 나타냅니다.
- egl.javascript.BigDecimal.prototype.ROUND_CEILING을 지정하면 양수 쪽으로 반올림합니다.
- egl.javascript.BigDecimal.prototype.ROUND_DOWN을 지정하면 0으로 반올림합니다.
- egl.javascript.BigDecimal.prototype.ROUND_FLOOR를 지정하면 음수 쪽으로 반올림합니다.
- egl.javascript.BigDecimal.prototype.ROUND_HALF_DOWN을 지정하면 가장 가까운 이웃으로 반올림되며, 이 때 등거리 값이 버림됩니다.
- egl.javascript.BigDecimal.prototype.ROUND_HALF_EVEN을 지정하면 가장 가까운 이웃으로 반올림되며, 이 때 등거리 값이 가장 가까운 짝수 이웃으로 반올림됩니다.
- egl.javascript.BigDecimal.prototype.ROUND_HALF_UP을 지정하면 가장 가까운 이웃으로 반올림되며, 이 때 등거리 값이 반올림됩니다.
- egl.javascript.BigDecimal.prototype.ROUND_UP을 사용하면 0에서부터 멀리 반올림됩니다.
- scale()은 소수점 아래의 자리 수를 숫자로 리턴합니다.
- signum()은 숫자가 음수인 경우 -1을, 0인 경우 0을, 양수인 경우 1을 리턴합니다.
- subtract(bd)는 현재 오브젝트에서 매개변수를 뺀 결과를 리턴합니다.
- toString()은 BigDecimal 오브젝트의 문자열 표시를 리턴합니다.
- egl.javascript.BigDecimal.prototype.ZERO는 0 값이 있는 BigDecimal입니다.
- egl.javascript.BigDecimal.prototype.ONE은 1 값이 있는 BigDecimal입니다.
- egl.javascript.BigDecimal.prototype.TEN은 10 값이 있는 BigDecimal입니다.
JavaScriptObjectException
외부 유형 방식으로 비생성 JavaScript 함수가 호출되고 함수에서 오류가 발생하는 경우 호출로 인해 EGL JavaScriptObjectException 예외가 발생합니다. 모든 EGL 예외와 같이 JavaScriptObjectException에는 message와 messageID 필드가 있습니다.
JavaScript 오류 오브젝트가 발견되면 오류 오브젝트의 해당 필드에서 message 필드가 설정됩니다. 그렇지 않으면 message 필드가 JavaScript 함수에서 발생된 값에 해당하는 문자열을 받습니다.
- name
- JavaScript 오류 오브젝트가 발견되면 오류 오브젝트의 해당 필드에서 name 필드가 설정됩니다. 그렇지 않으면 name 필드가 비어 있는 문자열을 받습니다.