이글은 아래 링크의 원본 글에 대한 한글 번역 입니다
https://blogs.sap.com/2014/03/10/custom-timeout-page-for-web-dynpro-applications/

Custom timeout page for Web Dynpro applications

March 10, 2014 

 

 

     사용자들은 가끔 여러창에 웹딘프로 어플리케이션 여러개를 열어둘 떄가 있습니다. 일정시간(BC 설정에 따라 다름)이 흐른후 세션이 자동으로 닫힙니다. 그러면 어플리케이션 서버(Web AS)는 다임아웃 결과를 보여줍니다. 사용자 입장에서는 이런 동작이 혼란스러울 수 있습니다.


요구사항:

     세션 타임아웃 페이지를 만들고 싶습니다. 원래 스탠다드 페이지는 이렇습니다:


     대신 아래처럼 커스텀(회사 고유의) 페이지를 만들고 싶습니다. 여기에는 F5(새로고침) 기능과 아주 큰 "새로고침" 버튼을 넣고 싶습니다:

/wp-content/uploads/2014/03/timeout_406882.png

     티코드 SICF에서 덤프날때와 세션 타임아웃에 대한 에러 처리를 application errors탭에서 지정할 수 있습니다:

/wp-content/uploads/2014/03/sicf_406884.png

     만약 explicit response page를 선택한다면 모든 종류의 어플리케이션 에러에 대해서 동작하는 에러 처리 페이지를 만들게 됩니다. 하지만 지금 원하는 것은 약간 다릅니다. 다른 에러는 아니고 오직 타임아웃에 대해서만 커스텀 페이지를 만들고 싶습니다.

     explicit page는 HTML+CSS로 만들 수 있습니다. 그러나 가장 불편한 점은 자바스크립트를 쓸 수 없다는 것입니다. 즉, 에러 타입을 검사하여 각자 다른 에러 페이지를 보여주도록 만들 수 가 없습니다.

  

해결방법:

     리다이렉트나 시스템 태그 <%=MESSAGE%> 등 여러가지 시행착오 끝에 아주 간단한 해결방법을 찾았습니다. (오컴의 면도날: "같은 현상을 설명하는 두 개의 주장이 있다면, 간단한 쪽을 선택하라"):

     1. 에러 페이지를 .html로 만듭니다. (Notepad++ 등의 프로그램을 사용, 시스템에 기록을 남기고 싶다면 BSP로 저장하는것도 좋습니다).

BSP.png

     2. 티코드 SOTR_EDIT에서 OTR 롱 텍스트를 만들고 앞서 만든 파일내용을 복사하여 붙여넣기 합니다. (이 OTR이 실제 explicit page로 보여질 내용입니다)

 

     3. 스탠다드 클래스 CL_WDR_CLIENT_ABSTRACT_HTTP의 메소드 PREPROCESS_REQUEST를 수정해야 합니다. (이 작업은 enhancement로 할 수 없고 반드시 modify해야 합니다.)

/wp-content/uploads/2014/03/wdr_406888.png

     여기에 직접 코드를 나열하기 보다는 다른 클래스에 코드를 넣고 메소드를 호출하도록 구현하였습니다. 또한 모든 어플리케이션의 타임아웃 페이지에 사용하고자 하는것이 안니라 특정 어플리케이션만 지정하여 적용할 것입니다. 특정 어플리케이션만 지정하기 위해서 테이블을 하나 만들어서 거기에 웹딘프로아밥 어플리케이션 아이디와 사용여부 플래그를 저장했습니다.

 

method handle.

  data:
    lr_server    type ref to cl_http_server,
    lt_path      type string_table,
    ls_appl      type ytpf_t_appl_list,                       "#EC NEEDED
    ls_page      type icf_response_page,
    lv_index     type i,
    lv_service  type string.

lr_server ?= ir_server.
  if lr_server is bound.

     "cl_wdr_task=>application->name can NOT be used here, as the instance is already destroyed…
    split lr_server->m_runtime_memory_id at '/' into table lt_path[].

    if not lt_path[] is initial.
      describe table lt_path[] lines lv_index.
      read table lt_path[] into lv_service index lv_index. refresh lt_path[].

      if sy–subrc is initial.
        translate lv_service to upper case.

        select single service_name active
                             from ytpf_t_appl_list
                             into corresponding fields of ls_appl
                             where service_name eq lv_service
                                 and active       eq abap_true.

        if sy–subrc is initial.
          ls_page–body = '2C768A4E40741EE3A7A55C5708059340' "SOTR automatically generated GUID

          ir_server->set_page(
            exporting
              response_page_type   = ir_server->co_page_error_type
              response_option_page = ls_page
            exceptions
              invalid_parameter    = 1
              document_not_found   = 2
              others               = 3 ).

        endif.
      endif.
    endif.
  endif.

endmethod.

 

실행중에 어플리케이션 에러 타입이 세션 타임아웃인 경우 explicit page가 OTR 롱 텍스트에 저장해둔 커스텀 페이지로 바뀌어 보여집니다.

이방법은 IE 와 NWBC 모두 동작합니다.

 

오래전 부터 관련 논쟁이 게시판에 있었습니다. 참고: Custom timeout page in SICF

 

감사합니다. 댓글 환영합니다!

 

Tudor

 

이글은 아래 링크의 원본 글에 대한 한글 번역 입니다
https://blogs.sap.com/2014/03/10/custom-timeout-page-for-web-dynpro-applications/

+ Recent posts