이벤트 및 등록자
화면 동작은 누름 단추에 대한 클릭 이벤트 또는 텍스트 위젯에 대한 blur 이벤트와 같은 이벤트에 의해 관리됩니다.
이벤트는 다음과 같이 분류됩니다.
- UI 이벤트
UI 이벤트는 위젯 및 해당 라이프사이클과 관련되어 있습니다. 예를 들어, 누름 단추를 클릭하면
onClick이벤트가 발생하고 화면을 초기화하면afterSrceenInit이벤트가 발생합니다. 일반적으로 모든 UI 이벤트 ID의 형식은<uId of the widget>_<event name>입니다. 예를 들어, 위젯의uId가bCreate이고 이벤트가onClick인 경우 UI 이벤트 ID는bCreate_onClick입니다. - 비즈니스 이벤트
비즈니스 이벤트는 애플리케이션에서 화면의 비즈니스 로직을 제어하는 데 사용됩니다. 일반적으로 비즈니스 이벤트는 UI 위젯과 연관되지 않습니다.
참고: UI및 비즈니스 이벤트 ID는 모두 대소문자를 구분합니다.
UI 또는 비즈니스 이벤트 둘 다 이벤트와 연관된 등록자를 포함할 수 있으며, 이는 이벤트가 발생할 때마다 호출됩니다. 구독자는 글로벌 및 로컬 구독자로 분류될 수 있습니다. 로컬 등록자는 화면 레벨에서만 호출됩니다. 따라서 이벤트가 발생하면 이벤트가 발생하는 화면 인스턴스의 로컬 등록자가 호출됩니다. 글로벌 등록자는 화면 전체에서 호출됩니다. 따라서 이벤트가 발생하면 이벤트에 대한 글로벌 등록자가 있는 모든 화면 인스턴스가 호출됩니다. 로컬 등록자의 순서는 글로벌 등록자가 아닌 순서 번호에 의해 관리됩니다. 따라서 글로벌 구독자는 임의의 순서로 호출될 수 있습니다. 다음 범위에서만 순서 번호를 사용할 수 있습니다.
- 범위 11-19-애플리케이션 제공 구독자 앞에 구독자를 추가하려는 경우 11-19범위의 순서 번호를 사용하십시오.
- 범위 51-99: 애플리케이션 제공 구독자 뒤에 구독자를 추가하려면 51-99범위의 순서 번호를 사용하십시오.
다른 모든 순서 번호는 예약되어 있습니다. 따라서 이를 사용하지 마십시오.
참고:
- 순서 번호가 동일한 등록자를 정의하지 않는 것이 좋습니다. 그렇지 않으면 등록자가 무작위로 호출될 수 있습니다.
- 이벤트에 대한 로컬 및 글로벌 구독자에서 수신되는 인수의 순서 및 유형은 다릅니다.
- 구독자가 편집기에서 새 화면 또는 마법사 열기와 같은 비동기 태스크를 수행하는 데 사용되는 경우 로컬 또는 글로벌 구독자가 호출되는 순서가 다를 수 있습니다.
- IBM® Extensibility Workbench를 사용하여 이벤트에 대한 등록자를 정의하는 경우에는 기존 항목 이전 또는 이후에 등록자를 추가하도록 선택하는지 여부에 따라 자동으로 생성되므로 순서 번호를 제공할 필요가 없습니다.
다음 시나리오는 이벤트에 로컬 등록자를 추가하는 프로세스를 설명합니다.
애플리케이션 제공 구독자 다음에 이벤트에 구독자 추가
bCreate_onClick UI 이벤트에 대한 구독자를 51-99범위의 순서 번호를 가진 애플리케이션 제공 구독자 뒤에 추가할 수 있습니다. 예를 들어, 애플리케이션 제공 구독자 정의가 다음과 같은 경우,subscribers: {
local: [{
eventId: 'bCreate_onClick',
sequence: '25',
handler: {
methodName: "createOrderAction"
}
}]
}다음과 같이 화면 확장에서 등록자를 추가할 수 있습니다.subscribers: {
local: [{
eventId: 'bCreate_onClick',
sequence: '51',
handler: {
methodName: "extn_createOrderAction_after"
}
}]
}애플리케이션 제공 구독자 전에 이벤트에 구독자 추가
11-19범위의 순서 번호를 사용하여 애플리케이션 제공 구독자 앞에bCreate_onClick UI 이벤트에 대한 구독자를 추가할 수 있습니다. 예를 들어, 다음과 같이 화면 확장에 등록자를 추가할 수 있습니다.subscribers: {
local: [{
eventId: 'bCreate_onClick',
sequence: '19',
handler: {
methodName: "extn_createOrderAction_before"
}
}]
}이벤트에 대한 애플리케이션 제공 구독자의 실행을 중지합니다.
애플리케이션 제공 구독자의 실행을 중지하려면sc.plat.dojo.utils.EventUtils.stopEvent 유틸리티를 사용하고 애플리케이션 제공 구독자 앞에 구독자를 추가하십시오.참고:
sc.plat.dojo.utils.EventUtils.stopEvent유틸리티는 로컬 구독자에만 적용 가능합니다.- 새 화면 또는 마법사 열기와 같은 비동기 태스크를 수행하는 경우 태스크를 수행하기 전에
sc.plat.dojo.utils.EventUtils.stopEvent유틸리티를 사용하십시오.
애플리케이션 제공 구독자가 없는 이벤트에 구독자 추가
애플리케이션 제공 구독자가 없는 이벤트에 구독자를 추가하려면 허용된 범위의 구독자 시퀀스를 사용하십시오.참고:
handler가 Ajax 요청과 같은 일부 비동기 조작을 수행하는 이벤트에 구독자를 추가할 때 후속 구독자가 정의된 순서로 호출되지 않을 수 있습니다.- UI 또는 비즈니스 이벤트에 등록자를 추가하는 프로시저는 동일합니다. 각 이벤트에 대해 이벤트 ID만 다릅니다.
- 기본적으로 구독자 정의는
local특성에 있습니다. 이벤트에 글로벌 구독자를 추가할 때subscribers의global특성 아래에 구독자 특성을 추가할 수 있습니다. - 새 화면을 작성하는 경우
<Screen>UI.js파일에 구독자 특성을 추가하십시오. 기존 화면을 확장하는 경우<ScreenExtension>UI.js파일에서 구독자 특성을 정의하거나 생성하십시오. handler는 화면 확장 또는 유틸리티 메소드에 정의된 메소드일 수 있습니다.handler가 유틸리티 메소드인 경우 구독자 정의는 다음과 같습니다.subscribers: { local: [{ eventId: 'beforeEditorClosed', sequence: '25', handler: { methodName: "handleEditorClose", className: "UIUtils", packageName: "ias.utils" } }], }여기서
handler는유틸리티에 정의된 메소드ias.utils.UIUtilshandleEditorClose인를 참조합니다.ias.utils.UIUtils.handleEditorClose
이벤트 관련 유틸리티 메소드에 대한 자세한 정보는 JavaScript 문서를 참조하십시오.