Rich UI 애플리케이션에서의 서비스 비동기 호출
Rich UI에서 call 문은 서비스를 비동기로 호출하는 데 사용됩니다.
call serviceName.operationName(argumentList)
returning to myCallbackFunction onException myExceptionHandler
{timeout = milliseconds};
- serviceName
- 인터페이스 파트를 기반으로 하는 변수의 이름
- operationName
- 인터페이스 파트 함수 프로토타입의 이름
- argumentList
- 쉼표를 사용하여 구분된 인수의 목록
인수에 대한 제한사항은 "서비스 액세스에 사용되는 프로토타입의 제한사항"을 참조하십시오.
- myCallbackFunction
- call 문에서 사용 가능한 콜백 함수 또는 위임의 이름입니다. 대부분의 경우 이 함수 또는 위임은 같은 Rich UI 핸들러 또는 라이브러리 내에 있습니다. 이 콜백 함수는 이 주제의 뒷부분에 설명되어 있습니다.
- myExceptionHandler
- 선택사항입니다. call 문에서 사용 가능한 예외 핸들러 또는 위임의 이름입니다. 대부분의 경우 이 예외 핸들러 또는 위임은 같은 Rich UI 핸들러 또는 라이브러리 내에 있습니다.
이 예외 핸들러는 이 주제의 뒷부분에 설명되어 있습니다.
자체 예외 핸들러가 없는 경우에는 위임 serviceLib.serviceExceptionHandler를 지정할 수 있습니다. 이로 인한 영향은 다음과 같습니다.
- 기본적으로 이 위임을 지정하면 예외 message 필드의 컨텐츠를 표준 출력에 기록하는 시스템 함수가 자동으로 호출됩니다. 이 제품에서 표준 출력은 콘솔 보기입니다. 외부 브라우저의 표준 출력은 웹 페이지의 맨 아래 부분입니다.
- 또는, 이 위임으로 인해 사용자 정의 핸들러가 호출될 수도 있습니다. 이를 사용하여 애플리케이션 세트 전체에 사용자 정의 오류 처리를 적용할 수도 있습니다.
예를 들면, 다음과 같은 작업을 수행할 수 있습니다.
- 이름이 myLibrary인 라이브러리를 작성하고 이름이 myExceptionHandler인 사용자 정의 예외 핸들러와 설정 함수를 둘 다 여기에 포함시킵니다.
- 설정 함수에 다음 명령문을 포함시킵니다.
serviceLib.serviceExceptionHandler = myLibrary.myExceptionHandler; - 각 Rich UI 애플리케이션의 on-construction 함수에서 이 설정 함수를 호출합니다.
call 문에 의해 호출되는 모든 서비스에 대해(이 명령문이 serviceLib.serviceExceptionHandler를 포함하는 경우), EGL 런타임 코드는 사용자 정의된 예외 핸들러를 실행하여 런타임 예외를 처리합니다(이 예제의 경우에는 myLibrary.myExceptionHandler를 실행함).
- milliseconds
- 애플리케이션 서버의 EGL Rich UI 프록시가 웹 서비스를 호출하고 이 프록시가 응답을 수신하기까지 기다리는 최대 유효 밀리초 수입니다.
이 시간이 경과하면 EGL 런타임 코드는 ServiceInvocationException 예외를 처리합니다. 그러나 전용 서비스 액세스 중에는 제한시간이 적용되지 않습니다.
제한시간을 설정하려면 다음 작업을 수행하십시오.
- 로컬 네트워크 트래픽, 인터넷 트래픽 및 서버 응답 시간과 같은 다양한 요소를 고려하십시오. 이러한 요소는 서로 다른 조건에서의 동일 서비스에 대한 두 호출의 응답에 서로 다른 시간이 소요될 수 있음을 의미합니다.
- 애플리케이션의 특성을 고려하십시오. 코드에서 신용 승인을 기다리고 있는 경우에는 사용자에 대한 이중 청구를 방지하기 위해 긴 제한시간을 설정하는 것이 좋습니다. 코드에서 온라인 경매의 입찰을 수행하고 있는 경우에는 사용자가 다른 입찰을 빠르게 수행할 수 있도록 짧은 제한시간을 설정하는 것이 좋습니다.
- 1초 이상 차이가 나는 여러 제한시간 값을 사용하십시오.
defaultServiceTimeout 빌드 디스크립터 옵션에 milliseconds의 기본값을 설정할 수 있습니다. defaultServiceTimeout 빌드 디스크립터 옵션에는 설정되어 있는 기본값이 없습니다. defaultServiceTimeout과 milliseconds에 모두 값을 지정하지 않으면 서비스 호출이 제한시간을 초과하지 않습니다. 자세한 정보는 "defaultServiceTimeout"을 참조하십시오.
call 문에 대한 키 입력 지원
- call 문에 returning to 또는 onException 키워드를 입력한 후에는 Ctrl+Space를 눌러 컨텐츠 지원을 요청할 수 있습니다. 함수의 목록이 표시되며 이 중 하나를 선택할 수 있습니다.
- call 문을 종료 세미콜론과 함께 입력하고 존재하지 않는 콜백 또는 onException 함수를 포함시키는 경우에는 워크벤치가 누락된 로직을 작성하도록 요청할 수 있습니다.
- Ctrl+1을 누르십시오.
- 또는, 세미콜론 뒷부분을 마우스 오른쪽 단추로 클릭하고 콜백 함수 작성을 선택하십시오.
콜백 함수
콜백 함수는 서비스의 응답에서 전송한 값이 있는 경우 이를 수신합니다. 콜백 자체에는 리턴값이 없습니다.
콜백 함수는 써드파티 REST 서비스에서 호출된 경우 0개 또는 1개의 매개변수를 갖습니다. 매개변수가 지정된 경우 그 유형은 인터페이스 파트에 지정된 리턴값의 유형과 일치해야 하며 매개변수 수정자는 IN입니다.
- 인터페이스 파트에 다음 함수 프로토타입이 있다고 가정해 보십시오.
Interface EmployeeService {} Function GetEmployeeDetail(employeeCode STRING IN, employeeSalary FLOAT OUT, employeeStatus STRING INOUT) returns(myEmployeeRecordPart); end - 이 예제에는 인터페이스 선언 및 서비스를 호출하는 데 사용된 call 문이 표시되어 있습니다.
myInterface EmployeeService; call myInterface.GetEmployeeDetail("A123", 25.8, "Full-time") returning to myCallback onException myExceptionHandler; - 콜백 함수의 개요는 다음과 같습니다.
Function myCallBack(salary FLOAT IN, status STRING IN, myRecord myEmployeeRecordPart IN) // statements here end이 함수는 OUT 또는 INOUT인 각 서비스 오퍼레이션 매개변수에 대해 하나의 매개변수를 포함합니다. 콜백 함수에서의 이러한 매개변수의 순서는 서비스 오퍼레이션의 순서와 동일합니다. 서비스 오퍼레이션 리턴값은 콜백 함수의 마지막 매개변수로 표시됩니다.
- 이 함수에는 서비스 호출의 OUT 및 INOUT 매개변수와 순서가 같은 일련의 매개변수가 있음
- 서비스 호출에 리턴값이 있는 경우 콜백 함수는 리턴값을 수락하기 위한 추가적인 마지막 매개변수를 포함함
- 함수의 각 매개변수에는 IN 수정자가 있음
onException 함수
- 리턴값이 없음
- 이 함수는 유형이 AnyException인 예외 레코드를 수락하며 이 레코드를 테스트하여 특정 유형을 수신했는지 판별할 수 있음
onException 함수의 개요는 다음과 같습니다.
Function myExceptionHandler(exp AnyException)
case
when (exp isa ServiceBindingException)
;
when (exp isa ServiceInvocationException)
;
otherwise
;
endend
- 서비스 바인딩(코드에 서비스 액세스가 지정되는 방식). 이 오류는 배치 디스크립터의 문제점과 연관되어 있을 수 있습니다.
- Rich UI 애플리케이션과 EGL Rich UI 프록시 간의 통신
- EGL Rich UI 프록시
- EGL Rich UI 프록시와 서비스 간의 통신
- 서비스
서비스 바인딩에서 문제점이 발생하면 ServiceBindingException이 발생합니다. 다른 문제점은 더 가능성이 낮은 ServiceInvocationException 또는 RuntimeException을 발생시킵니다.