Custom Action 예시
Custom Action 예시
1. Behavior Definition(Root View)에 action정의
1
2
3
4
// Row 단위로 작업을 완료 처리하는 커스텀 액션 정의
// result [1] $self는 완료 처리 후 변경된 '자기 자신 레코드 1건'을
// 프런트엔드에 리턴하겠다는 OData V4 표준 약속입니다.
action completeTask result [1] $self;
2. Behavior Definition(Projection View)에 action 사용
1
2
// 작업 완료 처리
use action completeTask;
3. Abap Class 작성
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
METHOD completeTask.
IF keys IS INITIAL. RETURN. ENDIF.
" 1. LOOP AT을 돌지 않고, 들어온 keys를 인라인 FOR문으로 초고속 일괄 매핑하여 업데이트
MODIFY ENTITIES OF zr_twbs_task2 IN LOCAL MODE
" 비헤비어 정의 파일(BDEF)의 Alias
ENTITY ZrTwbsTask2
UPDATE FROM VALUE #( FOR key IN keys (
%tky = key-%tky
CompleteYn = 'Y'
Progress = '100'
" 각각의 필드가 수정되었다고 명확히 표기
%control-CompleteYn = if_abap_behv=>mk-on
%control-Progress = if_abap_behv=>mk-on
)
)
FAILED DATA(ls_failed)
REPORTED DATA(ls_reported).
failed = CORRESPONDING #( DEEP ls_failed ).
reported = CORRESPONDING #( DEEP ls_reported ).
" 2. 에러가 없다면 최신 상태를 읽어와서 리턴 배열(result)에 한방에 주입
" IS INITIAL > isEmpty(), ls_failed == null 로 이해하면 됨.
IF ls_failed IS INITIAL.
READ ENTITIES OF zr_twbs_task2 IN LOCAL MODE
ENTITY ZrTwbsTask2 ALL FIELDS WITH CORRESPONDING #( keys ) RESULT DATA(lt_result_tasks).
result = VALUE #( FOR ls_res IN lt_result_tasks ( %tky = ls_res-%tky %param = ls_res ) ).
" [커스텀 알림창]
" 성공 메시지를 생성하여 프레임워크의 출력 변수인 reported에 넣는다.
reported-zrtwbstask2 = VALUE #( FOR key IN keys (
%tky = key-%tky
%msg = new_message_with_text(
severity = if_abap_behv_message=>severity-success " 초록색 성공 마킹
text = '배포 및 완료 상태가 초기화 되었습니다.' " 팝업 문구
)
) ).
ENDIF.
ENDMETHOD.
4. Metadata Extention에 버튼 생성
- 최 상위 컬럼에 버튼들 위치
1 2 3 4 5 6 7 8 9 10 11 12 13 @EndUserText.label: '프로그램 UUID' // 한글 컬럼명 적용 //@UI.identification: [ { position: 10, label: '프로그램 UUID' } ] @UI.fieldGroup: [{ qualifier: 'BasicInfoFields', position: 10, label: '프로그램 UUID' } ] @UI.lineItem: [ { position: 10 } // 툴바 좌측 상단에 '카테고리 추가' 버튼 배치 및 1단계의 액션 바인딩 ,{ type: #FOR_ACTION, dataAction: 'createCategory', label: '카테고리 추가', position: 1, invocationGrouping: #ISOLATED } ,{ type: #FOR_ACTION, dataAction: 'deleteCategory', label: '카테고리 삭제', position: 2, invocationGrouping: #ISOLATED } ,{ type: #FOR_ACTION, dataAction: 'completeDeploy', label: '운영배포 처리', position: 3} ,{ type: #FOR_ACTION, dataAction: 'completeTask', label: '작업완료 처리', position: 4 } ] @UI.selectionField: [ { position: 10 } ] ProgUuid;
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.