포스트

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 라이센스를 따릅니다.