이글은 아래 링크의 원본 글에 대한 한글 번역 입니다
https://blogs.sap.com/2014/06/16/how-to-report-only-one-error-message-for-many-mandatory-fields-in-web-dynpro-abap/

 

How to Report only one error message for many mandatory fields in Web Dynpro ABAP

June 16, 2014

 

필수값 체크를 위해서 보통은 클래스 CL_WD_DYNAMIC_TOOL의 메소드 CHECK_MANDATORY_ATTR_ON_VIEW( )를 호출합니다.

 

Yes, 이건 잘 동작합니다. 하지만 동일한 에러 메시지 “모든 필수 입력 필드를 채우십시오”를 여러 필드에 대해 여러번 출력하는 문제가 있습니다. 예를들어 필드가 100개면 100개의 에러 메시지가 출력됩니다. 

 

원래 실행 결과:

 

err.JPG

필수값 체크 에러가 발생했네요. 필드 하나당 메시지 하나씩 입니다.

 

err1.JPG

 

 

엄청난 스크롤이 메시지 영역에 나타났습니다. 메시지가 지루하게 많습니다. 게다가 화면 윗부분에 자리를 많이 차지하고 있습니다.

 

그럼 어떻게 하면 좋을까요?

          여러 필드 필수값 체크에 에러메시지 하나만 표시하기를 원한다면...

 

해결 방법:

 

 

  • 메소드 CHECK_MANDATORY_ATTR_ON_VIEW 호출시 메시지를 표시하지 않도록 파라미터 DISPLAY_MESSAGES = ABAP_FALSE 을 입력합니다.
  • 메시지는 인터널 테이블 lt_messages에 넣어 둡니다.
  • lt_messages에는 메시지 외에도 필수값 체크에 에러가 난 컨텍스트 엘리먼트와 어트리뷰트 정보가 들어 있습니다.
  • 각 컨텍스트 엘리먼트 별로 어트리뷰트 목록을 모아서 lt_attributes에 넣습니다.
  • IF_WD_MESSAGE_MANAGER의 메소드 REPORT_ELEMENT_ERROR_MESSAGE( )를 사용하여 각 컨텍스트 엘리먼트 별로 하나의 에러 메시지를 표시하도록 합니다.

 

이 해결 방법이 좋아 보입니다.

 

뷰의 WDDOBEFOREACTION( ) 메소드에 아래 코드를 입력해 주세요..

 

주의: 메시지는 컨텍스트 엘리먼트 별로 하나씩 표시 됩니다. 즉 뷰에 컨텍스트 노드가 여러개라면, 여러개의 메시지가 컨텍스트 엘리먼트 별로 하나씩 표시 됩니다.

 

WDDOBEFOREACTION( )
METHOD wddobeforeaction .

  DATA lo_api_controller            TYPE REF TO if_wd_view_controller.

  DATA lo_action                       TYPE REF TO if_wd_action.

  DATA lo_message_manager     TYPE REF TO if_wd_message_manager.

  DATA lt_attributes                   TYPE string_table.

  DATA lt_messages            TYPE cl_wd_dynamic_tool=>t_check_result_message_tab.

  DATA ls_messages            LIKE LINE OF lt_messages.

  lo_api_controller = wd_this->wd_get_api( ).

  lo_action = lo_api_controller->get_current_action( ).

  CALL METHOD lo_api_controller->get_message_manager

    RECEIVING

      message_manager = lo_message_manager.

  IF lo_action IS BOUND.

    CASE lo_action->name.

      WHEN 'CHECK_DATA'.

        cl_wd_dynamic_tool=>check_mandatory_attr_on_view(

          EXPORTING

        view_controller = lo_api_controller

        display_messages = abap_false

          IMPORTING

        messages = lt_messages ).

        CLEAR lt_attributes.

        “sort by context element,

        SORT lt_messages BY context_element.

        LOOP AT lt_messages INTO ls_messages.

          APPEND ls_messages-attribute_name TO lt_attributes.

          AT END OF context_element.

            ” if no attributes found for errors, skip error message

            IF lt_attributes[] IS INITIAL.

              CONTINUE.

            ENDIF.

            ”         report message

            CALL METHOD lo_message_manager->report_element_error_message

              EXPORTING

                message_text = 'Please fill all required fields'

                element      = ls_messages-context_element

                attributes   = lt_attributes.

     

           “Clear attributes list, for next context element

            CLEAR lt_attributes.

          ENDAT.

        ENDLOOP.

    ENDCASE.

  ENDIF.

ENDMETHOD.

 

실행 결과 - 1:

 

에러 메시지가 컨텍스트 엘리먼트 별로 하나씩 표시 됩니다

err2.JPG

실행 결과 - 2:

 

사용자가 영역 1 에 필수 값을 모두 입력하고 check data 버튼을 눌렀습니다,

err3.JPG

————————————-

이 글이 (컨텍스트 엘리먼트 별로) 메시지 하나만 출력하고자 하던 분들에게 도움이 되셨길 바랍니다.

 

그리고 모든 컨텍스트에 대해 메시지 하나만 표시하고 원하신다면 아래 글을 참고하세요.

 

How to Report one attribute error message for multiple fields in Web Dynpro ABAP

————————————

여러분의 소중한 피드백 / 제안 / 댓글 환영합니다.

 

이글은 아래 링크의 원본 글에 대한 한글 번역 입니다
https://blogs.sap.com/2014/06/16/how-to-report-only-one-error-message-for-many-mandatory-fields-in-web-dynpro-abap/

+ Recent posts