이글은 아래 링크의 원본 글에 대한 한글 번역 입니다

http://scn.sap.com/community/abap/testing-and-troubleshooting/blog/2010/11/09/new-abap-debugger-tips-and-tricks

 

 

Olga Dolinskaja

뉴 아밥 디버거 사용 팁

Posted by Olga Dolinskaja in ABAP Testing and Troubleshooting on Nov 10, 2010 12:51:37 AM

뉴 아밥 디버거는 넷위버04 부터 사용할 수 있습니다. 넷위버 7.0 부터는 구형 클래식 아밥 디버거를 기능적으로 완전히 대체하는 수준에 이르렀습니다. 최근(2010년 이야기)의 SAP TechEd 에서 만난 사람들 대부분 많은 사람들이 뉴 아밥 디버거를 사용하고 있었습니다. 하지만 여전히 많은 사람들이 유용한 기능을 모른체 사용중이더군요. 이 블로그의 목적은 뉴 아밥 디버거의 유용한 기능을 알려드리는 것 입니다.

 

- 목차 -

 

 

 

유용한 디버거 세팅

뉴 아밥 디버거의 세팅을 통해 특별한 디버깅 모드를 사용할 수 있고 문제해결 시간을 단축할 수 있는 편리한 옵션을 제공합니다. 이글을 통해 어떤 세팅이 어떤때 도움이 되는지 알려 드립니다. 디버거에서 메뉴의 Settings->Display/Change Debugger Settings 에서 디버거 세팅을 변경할 수 있습니다.

  • System Debugging: 시스템 프로그램(디버깅이 안되는 펑션 같은것)이 포함된 문제를 디버깅해야 할 경우 이 세팅을 켜주세요(또는 메뉴 Settings->System debugging On/Off 또는 티코드 입력란에 /hs를 입력). 여담이지만 작성한 프로그램을 시스템 프로그램으로 변경하고 싶다면 아밥 에디터(SE38) 에서 속성중 상태(Status)를 시스템 프로그램으로 변경하면 됩니다.

  • Update Debugging: 비동기 업데이트를 분석해야 할 경우 이 세팅을 켜주세요. 구체적으로 펑션을 이렇게 호출한 경우: CALL FUNCTION ‘...' IN UPDATE TASK. 이런 펑션 호출은 비동기 방식으로 별도의 업데이트 워크 프로세스에서 실행됩니다(COMMIT WORK 다음에 실행됨). 디버거는 기본적으로 하나의 프로세스만 디버깅하기 때문에 이런 경우 놓치게 됩니다. 제대로 디버깅하기 위해서는 IN UPDATE TASK로 호출하는 펑션에 브레이크포인트를 걸고 디버거가 시작되면 이 세팅을 켜주세요 그러면 실행중에 디버거는 브레이크포인트에 멈출 겁니다.

  • TRFC (In Background Task): Block Sending: 이 세팅은 transactional Remote Function Calls (TRFC)을 디버깅 할때 켜주세요. 구체적으로 펑션을 이렇게 호출한 경우: CALL FUNCTION ‘...' IN BACKGROUND TASK. 이런 펑션 호출은 비동기 방식으로 logical unit of work (LUW)에 따라 COMMIT WORK 다음에 실행됩니다. 디버거는 기본적으로 하나의 프로세스만 디버깅하기 때문에 이런 경우 놓치게 됩니다. 제대로 디버깅하기 위해서는 이 세팅을 켜주세요. 처리되지 않은 LUW를 확인하려면 TRFC Monitor (티코드 SM58)를 사용합니다. 메뉴에서 Edit->Debug LUW 를 선택하면 디버깅 할 수 있습니다.

  • Close debugger After ‘Continue' (F8) and Roll Area End: 이 세팅을 선택하지 않은 경우 Continue (F8) 을 누르면 디버거 세션은 비활성 상태로 프로그램이 끝나더라도 남아 있습니다. 이 세팅을 켜게 되면 세션이 끝날때 자동으로 디버거가 닫힙니다.

  • Always Create Exception Obj.: 변수 할당하지 않은 Exception을 디버깅 하고 싶다면 이 세팅을 켜주세요. CATCH CX_MY_EXCEPTION 처럼 변수를 할당하지 않은 경우에도 exception object를 생성해 줍니다. exception 발생시 디버거에서 Display Exception Obj. magnifier 버튼을 눌러서 볼 수 있습니다.

 

디버깅 상황을 쉽게 재현하고 싶다면 - debugger variant

지금 꽤 복잡한 환경에서 문제를 재현하고 디버깅을 하고 있다고 가정합시다. 디버깅 끝에 특정 상황에서 펑션 모듈이 올바르게 작동하지 않는 것을 찾았습니다. 이 펑션 모듈에 대해 잘 알고 있는 다른 사람에게도 디버깅 상황을 재현하여 함께 분석하고 싶습니다.

다른 사람이 문제를 동일하게 재현하여 디버깅 하려면 매우 상세하게 설명을 해 주어야 합니다. 브레이크포인트 걸어야할 소스코드 위치가 몇번째 줄인지, 디버거 세팅은 어떻게 해야 하는지, 등. 이렇게 전달 하는건 매우 시간이 많이 소모되며 중요한 정보를 빠뜨릴 가능성도 있습니다. 추천하는 방법은 debugger variant를 사용하여(메뉴에서 Debugger->Debugger Session->Save) 디버거 세션을 저장하는 것입니다. 어떤 내용을 저장할지 선택할 수 있습니다: 현재 layout (변형된 desktop 모양), 디버거 settings, options 그리고 breakpoints. 이 variant는 데이터베이스 또는 로컬 파일로 저장하여 다른사람에게 전달 할 수 있습니다.

abap_debugger_session.png

 

정보를 받은 사람이 저장된 variant 를 불러 올 수 있습니다. 디버거를 시작한 후 메뉴에서 Debugger->Debugger Session->Load를 선택합니다. 모든 세팅과 브레이크포인트가 즉시 활성화 됩니다. 물론 variant 저장시 선택한 항목(layout, settings, options, breakpoints)에 맞춰 로드 됩니다.

 

모든 로드된 프로그램과 글로벌 변수 전체 목록을 보는 방법 - Loaded Programs Tool

변수에 더블클릭하면 Variable Fast Display Tool 이 작동하여 바로 변수에 대한 정보를 보여줍니다: 타입, 값, 등등. Locals 탭에서는 모든 파라미터와 로컬 변수를 볼 수 있고, Globals 탭에서는 현재 프로그램의 모든 글로벌 변수를 볼 수 있습니다. ?로는 local 과 global 정보로 충분하지 않은 경우가 있습니다. 모든 로드된 프로그램과 글로벌 변수 전체 목록을 보고 싶은 경우, Loaded Programs Tool을 사용하세요(New Tool 버튼을 누른후, Special Tools->Loaded Programs).

Loaded Programs는 탭이 2개 있습니다. Loaded Programs 탭에서는 로드된 프로그램의 속성을 볼 수 있습니다. Global Data 탭에서는 글로벌 변수를 볼 수 있습니다. 왼쪽 트리에서 프로그램명을 더블클릭하면 오른쪽에 글로변 변수가 표시됩니다.

abap_debugger_loaded_programs.png

 

 

디버거에서 파라미터를 입력하여 펑션모듈 테스트 하는 방법

디버깅을 위해 Function Builder (티코드 SE37)의 모듈테스트 화면에서 펑션 모듈을 테스트 하는 상황을 가정해 봅시다. 많은 양의 데이터가 들어있는 인터널 테이블을 파라미터로 전달해야 합니다. 인터널 테이블을 SE37에서 손수 입력하려면 시간이 매우 많이 소모됩니다. 이렇게 할 필요가 없습니다. 디버거에서 보이는 데이터를 파라미터로 넘겨서 펑션모듈을 테스트 하려면, 파라미터로 사용할 변수를 다운로드하면 됩니다. 파라미터를 선택하고 마우스 오른쪽 버튼을 눌러 컨텍스트 메뉴에서 Save Parameters as Test Data (SE37)를 선택합니다. 주의할 점은 SE37의 모듈테스트에서 지원하는 데이터 타입만 다운로드가 가능하다는 것입니다. 오브젝트, 포함된 인터널 테이블이나 데이터 레퍼런스는 다운로드가 안 됩니다. 새창으로 SE37을 실행해서 테스트를 실행 합니다. 다운로드한 데이터를 불러오는 방법은 Test Data Directory 버튼을 누르면 나옵니다.

abap_debugger_download37.png

 

 

변수값 분석 팁

  • 복잡한 오브젝트를 볼때 Data Explorer 탭을 사용하세요. 오브젝트를 분석할때 Objects 탭을 기본으로 사용합니다. 여기에서 visibility, inheritance, references to the object (where-used list ) 같은 속성을 확인할 수 있습니다. 오브젝트의 멤버변수를 더블클릭하여 내부로 따라가며 분석 할 수 있습니다. 복잡한 내포관계를 가진 오브젝트를 분석하는 경우라면 Data Explorer Tool 이 더 좋습니다. Data Explorer 탭에서는 내포된 오브젝트를 드릴다운하여 볼 수 있습니다. Object 탭처럼 왔다갔다 이동하지 않고 한눈에 볼 수 있습니다.

abap_debugger_dataexplorer.png         

 

  • hex string(16진표시)을 보려면 Text Translation을, XML 데이터를 보려면 XML Browser를 사용하세요. hex code로 2000 바이트 이상 데이터를 가진 변수를 보는일은 매우 불편합니다. 단순 데이터나 문자열의 경우 세부사항 뷰(Detail Display 탭) 에서 hex string을 읽을 수 있는 문자열로 변경하여 볼 수 있습니다(필드 View에서 Text Translation 선택). 이진 XML 데이터의 경우 XML 뷰어로 볼 수 있습니다(필드 View에서 XML Browser 선택).

abap_debugger_detaildisplay.gif        

 

 

무한 루프에 빠진 프로그램 디버깅 하는 방법

어떤 프로그램을 실행했는데 무한 루프에 빠져서 계속 실행중이고 우리는 이것을 분석해야 한다고 가정해보겠습니다. 이런경우 아밥 에디터를 새창으로 열어서 브레이크포인트를 지정하기만 하면 디버거가 바로 시작 됩니다. 단, 메뉴의 Utilities->Settings...->Debugging 에서 Session breakpoint active immed. 옵션에 체크를 해야 합니다. 이 옵션을 사용하면 모든(실행중이거나 대기중이거나 상관없이) 세션에 즉시 브레이크포인트가 적용됩니다. 개발 환경에서는 이 옵션을 반드시 체크하여 두기를 권장합니다.

abap_debugger_setssionbps.png

 

 

무한 루프에 빠진 백그라운드 작업 디버깅 하는 방법

어떤 백그라운드 작업이 실행되고 있는데 무한 루프에 빠져서 계속 실행중이고 우리는 이것을 분석해야 한다고 가정해보겠습니다. 프로세스 개요(티코드 SM50)를 실행하여 실행중인 프로세스를 선택하고 메뉴에서 Program->Debugging을 선택하면 디버깅을 할 수 있습니다.

 

종료되거나 에러난 백그라운드 작업 디버깅 하는 방법

백그라운드 작업이 매우 빨리 실행 종료 되었다고 가정합시다. 프로세스 개요(티코드 SM50)에서 디버깅을 시작할 시간조차 없이 빨리 끝났습니다. 심지어 에러나서 덤프가 발생하는 경우도 있습니다. 작업 개요(티코드 SM37)를 실행하여 디버깅할 작업을 선택하고 티코드 입력난에 "jdbg"를 입력합니다. 디버거가 시작 됩니다. 두세번 정도 Return (F7) 을 눌러서 spool 펑션 체크를 건너 뜁니다. 이제 종료된 백그라운드 작업이 다시 실행되며 디버깅 할 수 있습니다.

abap_debugger_jdbg.gif

 

 

변수 값 비교하는 방법 - Diff 툴 사용

디버깅 중에 두 엄청 긴 두 문자열이 동일한지 비교해야하는 상황이라고 가정합시다. 또는 복잡하게 내포된 오브젝트 두개가 동일한지 비교해야 한다면 어떨까요? Diff 툴(Diff 탭)을 사용하면 아밥 변수 두개를 비교할 수 있습니다. 테이블, 오브젝트, 구조, 문자열 등 모두 가능합니다. Diff 툴은 타입과 값에 대해서 차이점을 알려줍니다. Diff 실행 후 결과 목록에서 더블클릭을 하면 두 변수 정보를 동시에 표시하여 보여줍니다.

abap_debugger_diff_tool.gif

 

성능이 걱정이라면 복잡하게 내포된 오브젝트라도 "deep diff"를 하지 않으면 단계를 줄여서 빠르게 실행할 수 있습니다.

예를들어 어떤 오브젝트에 멤버변수로 인터널 테이블을 가지고 있다고 하면, 먼저 인터널 테이블만 차이를 비교 할 수 있습니다. 만약 인터널 테이블이 동일하다면 상세한 차이를 볼 수는 없습니다. 상세한 차이를 보려면 동일하지 않은 일부분이 있어야 합니다(결과 목록에서 라인을 선택하고 Diff 버튼). History 탭을 이용하여 이전 단계로 돌아갈 수 있습니다.

http://wiki.sdn.sap.com/wiki/download/attachments/286097433/abap_debugger_deep_diff.png

 

 

HTTP 요청을 디버깅 하는 방법

요즘, HTTP 기반의 어플리케이션(BSP나 웹딘프로아밥 처럼)이 많이 있습니다. 이런 어플리케이션의 문제해결을 위해서는 HTTP 요청을 디버깅해야 하는 경우가 있습니다.

티코드 SICF에서 특정 웹 서비스에 유저 단위로 디버거를 켤 수 있습니다(메뉴에서 Edit->Debugging->Acivate Debugging). 웹 어플리케이션이 실행되는 서버와 브레이크포인트나 SICF에서 HTTP 디버깅을 설정하는 서버가 동일한 서버여야 한다는 점 주의하세요. HTTP 디버깅에 대한 자세한 내용은 노트 668256을 참고하세요.

http://wiki.sdn.sap.com/wiki/download/attachments/286097433/abap_debugger_http.png

 

디버깅을 활성화 하면, http 요청을 처리하는 시스템 코드에서 멈추어 디버거가 시작됩니다.

디버거에서 새로 브레이크포인트나 와치포인트를 설정할 수 있습니다. 컨티뉴 하기전에 저장해야 한다는 점 기억하세요.

 

유용한 디버거 ok코드

/h 디버깅 활성화

/hs 시스템 디버깅 활성화

/ha 딘프로(PAI, PBO)를 건너띄고 바로 아밥 코드부터 디버깅

/hx 디버거 닫기

/hmusa 메모리 스냅샷 생성 (나중에 티코드 S_MEMORY_INSPECTOR 에서 분석)

jdbg in SM37 종료된 백그라운드 작업을 재시작하면서 디버깅

/ron ABAP 실행시간분석 시작 (티코드 SE30)

/roff ABAP 실행시간분석 종료 (티코드 SE30)

 

 

 

 

 

 

이글은 아래 링크의 원본 글에 대한 한글 번역 입니다

http://scn.sap.com/community/abap/testing-and-troubleshooting/blog/2010/11/09/new-abap-debugger-tips-and-tricks

 

 

 

사용 예:

cl_wd_table_column=>e_cell_design-criticalvalue_light

 

타입:

WDUI_TABLE_CELL_DESIGN

 

출처: 

http://help.sap.com/saphelp_nw70ehp1/helpdata/en/45/0ef14d9d942462e10000000a1553f7/content.htm

 

 

이글은 아래 링크의 원본 글에 대한 한글 번역 입니다

https://blogs.sap.com/2015/04/01/how-to-read-the-data-from-a-filtered-table-in-sap-web-dynpro-abap/

 

 

Ramakrishnappa Gangappa

웹딘프로아밥 테이블 필터링 적용된 데이터만 가져오는 방법

Posted by Ramakrishnappa Gangappa in Web Dynpro ABAP on Apr 1, 2015 6:26:04 AM

 

웹딘프로아밥 테이블 필터링 적용된 데이터만 가져오는 스탠다드 메소드인 인터페이스 IF_WD_TABLE_METHOD_HNDL 의 GET_TABLE_DATA 에 해당하는 코드를 공유합니다.

 

SCN 커뮤니티 게시판에서 필터링 적용된 테이블 데이터를 가져오는 방법을 질문하는 글에 제대로된 답변이 없는 경우를 많이 보았습니다. 답은 정해져 있죠. 스탠다드 메소드인 인터페이스 IF_WD_TABLE_METHOD_HNDL 의 GET_TABLE_DATA를 사용하면 되는데 이게 시스템에 없는 경우가 있습니다. 아마도 GET_TABLE_DATA 메소드는 서버 버전이 SAP_ABA 731 이후 부터 사용가능 한것으로 보입니다.

 

그래서, 필터링 적용된 테이블 데이터를 가져오는 방법을 서버 버전에 상관없이 모두가 사용할 수 있도록 아래 로직을 만들었습니다.


 

선행 조건:

Webdynpro ABAP,& OO ABAP 에 대한 기본 지식이 필요합니다.

 

 

아래 메소드를 만들어 주세요.

 

 

GET_TABLE_DATA( )
Parameters:
IO_TBL Importing type ref to CL_WD_TABLE
RT_DATA Returning WDR_TABLE_ROW_DATA_TAB





METHOD get_table_data .

 


DATA elements         TYPE wdr_context_element_set.
  DATA element          TYPE REF TO if_wd_context_element.
  DATA row_data         TYPE wdr_table_row_data.
  DATA last_row_index   TYPE i.
  DATA first_row_index  TYPE i.
  DATA wd_row_arrangement_type_id TYPE guid.
  DATA wd_row_arrangement         TYPE REF TO cl_wd_view_element.
  DATA first_actual_row TYPE i.
  DATA fixed_row_count  TYPE i.
  DATA data_source      TYPE REF TO if_wd_context_node.
  DATA row_count        TYPE i.
  DATA selected_elements TYPE wdr_context_element_set.
  DATA first_row        TYPE i.
  DATA last_row        TYPE i value -1.
  CONSTANTS c_none TYPE guid VALUE ''.
  CLEAR rt_data.
  CLEAR selected_elements.
  row_count = 0.
  IF data_source IS NOT BOUND.
    data_source = io_tbl->get_data_source( ).
  ENDIF.
  wd_row_arrangement ?= io_tbl->get_row_arrangement( ).
  IF wd_row_arrangement IS NOT BOUND.
    wd_row_arrangement = io_tbl->get_master_column( ).
  ENDIF.
  IF wd_row_arrangement IS BOUND.
    wd_row_arrangement_type_id = wd_row_arrangement->_cid.
  ENDIF.
  fixed_row_count = io_tbl->get_row_count( ).
  first_actual_row = io_tbl->get_first_actual_row( ).
  CASE wd_row_arrangement_type_id.
    WHEN c_none.
      selected_elements = data_source->get_selected_elements( ).
      IF fixed_row_count = -1.
        row_count = data_source->get_element_count( ) +
first_actual_row.
      ELSE.
        row_count = fixed_row_count.
      ENDIF.
      first_row_index = first_row - first_actual_row.
      IF last_row = -1 OR
         last_row > row_count.
        last_row_index = row_count - first_actual_row.
      ELSE.
        last_row_index = last_row - first_actual_row.
      ENDIF.
      IF last_row_index >= first_row_index.
        elements = data_source->get_elements( from = first_row_index
to = last_row_index ).
      ENDIF.
      LOOP AT elements INTO element.
        row_data-context_element = element.
        row_data-level           = 0.
        INSERT row_data INTO TABLE rt_data.
      ENDLOOP.
  ENDCASE.







ENDMETHOD.

 

컴포넌트 컨트롤러에 위 메소드 GET_TABLE_DATA 를 만들었다고 가정하겠습니다.

 

아래 사용방법에 따라 실행하면 필터링 적용된 데이터를 읽을 수 있습니다.

 

사용방법:

  • 뷰의 어트리뷰트 탭으로 이동 하여 GO_TBL of type ref to CL_WD_TABLE를 추가 합니다.
  • 메소드 WDDOMODIFYVIEW( ) 로 이동 하여  table ui element "MY_TABLE" 를 가져오는 아래 코드를 추가 합니다.
METHOD wddomodifyview .
           IF first_time = abap_true.
               "Note: my_table is the ui name of table in view layout
               wd_this->go_tbl ?= view->get_element( 'MY_TABLE' ).
           ENDIF.
ENDMETHOD.
 
  • 이제, 필터링 적용된 데이터를 읽기 위해 아래 코드를 사용합니다.
       data lt_data type WDR_TABLE_ROW_DATA_TAB.
       
                wd_comp_controller->get_table_data(
                        exporting
                             io_tbl = wd_this->go_tbl
                        receiving
                             rt_data = lt_data ).
  •  

읽어 주셔서 감사합니다. 이글이 도움이 되었으면 좋겠습니다.

 

관심/ 댓글/ 추천 은 항상 감사합니다.

 

끝.

 

이글은 아래 링크의 원본 글에 대한 한글 번역 입니다

https://blogs.sap.com/2015/04/01/how-to-read-the-data-from-a-filtered-table-in-sap-web-dynpro-abap/

 

 

이글은 아래 링크의 원본 글에 대한 한글 번역 입니다

http://www.saptechnical.com/Tutorials/WebDynproABAP/Sort/tablecolumn.htm

 

 

웹딘프로아밥 테이블 정렬(소트) 구현방법

By Swarna Ramya R, Wipro

 

목표: 

 

복잡하지 않은 다소 간소한 테이블 데이터를 표시할때 ALV 보다는 테이블 UI 엘리먼트를 사용하는 것이 편하고 익숙합니다. 때로는 다수의 숫자 컬럼을 가지는 테이블이 있기도 합니다. 데이터를 더 수월하게 확인하기 위해, 고객들은 컬럼단위로 정렬 기능을 사용하기를 원합니다. 언듯 생각하면 정렬을 구현하는 게 복잡한 작업으로 생각될 수 있지만, 웹딘프로아밥에서는 쉽게 정렬을 구현할 수 있도록 테이블 핸들러에서 기능을 제공합니다.

 

 

진행 순서: 

 

1. 웹딘프로아밥 컴포넌트를 만듭니다. 이름: ZWA_TABLE_SORT. 

 

2. 뷰의 레이아웃탭에서, ROOTUIELEMENTCONTAINER 을 선택하고 마우스 오른쪽 버튼을 누른후 Insert Element 합니다. 그러면 엘리먼트 생성을 위한 팝업 창이 열립니다.

 

3. ID에 Table 을 입력하고 Type은 Table을 선택합니다. 엔터키를 누릅니다.

 

 

4. 컨텍스트 탭으로 이동하여 CONTEXT에서 마우스 오른쪽 버튼을 누르고 Create à Node 를 선택합니다. 

 

5. Node Name 에는 MARA를, Dictionary Structure 에는 MARA를, Cardinality 에는 0..n을 선택하고 하단에 버튼중에  ‘Add Attribute from Structure ‘ 버튼을 누릅니다. 

 

 

6. 사용할 필드로 MATNR, MTART, MATKL, MEINS 를 선택하고 엔터를 누릅니다. 

 

 

7. 레이아웃탭에서 TABLE 아래 CAPTION의 속성중 text에 Material Details라고 입력합니다.

 

 

8. TABLE에서 마우스 오른쪽 버튼을 누르고 Create Binding을 선택합니다. 이제 컨텍스트를 바인딩할 수 있는 팝업 창이 뜹니다.

 

9. Context 버튼을 누르면 컨텍스트를 선택할 수 있는 팝업 창이 뜹니다.

 

10. MARA 노드를 선택하고  엔터키를 누릅니다.

  

 

11. 선택한 노드 아래에 있는 모든 어트리뷰트가 목록으로 표시됩니다. 이제 엔터키를 누릅니다.

 

 

12. 어트리뷰트 탭으로 이동하여, TABLE_CONTROL 레퍼런스 타입 IF_WD_TABLE_METHOD_HNDL 을 추가 합니다.

 

 

13. 레이아웃탭의 TABLE의 속성 중 onSort 이벤트 옆에 바인딩쪽에 있는 생성 버튼을 누릅니다. 팝업창에 Action Name 은 ON_TEST_SORT 을 입력하고 엔터키를 누릅니다.

 

 

14. 메소드 탭으로 이동합니다.

 

 

15. 아래 코드를 각각의 메소드에 입력합니다.

WDDOINIT:
method WDDOINIT .
  data LO_ND_MARA type ref to IF_WD_CONTEXT_NODE.
 data LO_EL_MARA type ref to IF_WD_CONTEXT_ELEMENT.
 data LT_MARA type WD_THIS->ELEMENTS_MARA.
 data LS_MARA type WD_THIS->ELEMENT_MARA.
* navigate from  to  via lead selection
 LO_ND_MARA = WD_CONTEXT->GET_CHILD_NODE( NAME = WD_THIS->WDCTX_MARA ).
  SELECT MATNR MTART MATKL MEINS FROM MARA INTO CORRESPONDING FIELDS OF
        TABLE LT_MARA UP TO 10 ROWS WHERE MATNR LIKE 'A%'.
* Bind Table
 LO_ND_MARA->BIND_TABLE( LT_MARA ).
endmethod.
WDDOMODIFYVIEW:
method WDDOMODIFYVIEW .
data wd_table type ref to cl_wd_table.
check first_time = abap_true.
* Name of the table UI element to be provided
wd_table ?= view->get_element( 'TABLE' ).
wd_this->table_control ?= wd_table->_method_handler.
*Name of the key attribute of the context node to which the table binding is done to be  provided
wd_this->table_control->set_key_attribute_name( 'MATNR' ).
endmethod.
ONACTIONON_TEST_SORT:
method ONACTIONON_TEST_SORT .
wd_this->table_control->apply_sorting( ).
endmethod.

 

16. 저장하고 활성화 합니다. 

 

 

17. 실행하기 위해 WebDynpro Application 을 만들고 그 Application을 실행합니다.

결과:

  1. 초기 테이블의 모습.

 

  1. 정렬 버튼을 누른후 변경된 모습.

 

 

끝.

요약: _method_handler , apply_sorting( ).

 

이글은 아래 링크의 원본 글에 대한 한글 번역 입니다

http://www.saptechnical.com/Tutorials/WebDynproABAP/Sort/tablecolumn.htm

웹딘프로아밥 컴포넌트마다 내부적으로 클래스가 하나 배정되어 있습니다.

그걸 찾는 방법이

cl_wdy_wb_naming_service=>get_classname_for_component

물론 SE24 에서 위 클래스 메소드를 찾아서 실행하면 웹딘 컴포넌트 -> 클래스 이름을 얻을 수 있습니다.

다시 SE24를 열어서 위에서 얻은 클래스 이름을 넣고 들어가서 Find 로 검색을 하면 됩니다.

 

편하게 쓰기 위해 이 일을 하는 펑션모듈을 만들어 봤습니다.

[2022-01-12 수정] 아래 프로그램을 설치하세요.

https://github.com/boy0korea/ZWD_CODE_SCANNER

 

GitHub - boy0korea/ZWD_CODE_SCANNER: WD code scanner

WD code scanner. Contribute to boy0korea/ZWD_CODE_SCANNER development by creating an account on GitHub.

github.com

 

스탬프 다 찍으면 받을 수 있는 완주인증서는 이렇게 상장처럼 생겼습니다. 시장님 도장 찍혀있어요.

완주인증서

 

 

스탬프투어 안내 공식 홈페이지는 여기 있습니다.
http://gil.seoul.go.kr/walk/sub/tourGuide.jsp

 

발급 장소 및 시간
1. 서울둘레길 안내센터 (창포원)
주소 : 서울시 도봉구 마들로 916 (도봉동 4-2) 1층 서울둘레길 안내센터
 찾아오시는 길 : 지하철 7호선 도봉산역 2번 출구 30m (창포원 공원 내)
발급가능시간 : 월,화,목,금,토,일 *주말가능* 9시~18시 (점심시간 12시~13시 ,수요일 정기휴무)
안내문의 ☞ 070-4465-7905~6
 2. 서울둘레길 안내센터 (용산)
주소 : 서울시 용산구 갈월동 두텁바위로 7 국제빌딩2층 (남영동 우체국 건너편)
찾아오시는 길 : 지하철 4호선 숙대입구역 2번 출구 30m (2번 출구 2번째 건물 2층)
발급가능시간 : 월요일~금요일 9시~18시 (점심시간 12시~13시)
안내문의 ☞ 02-779-7904

 

 

스탬프북을 받을때 종이로된 지도를 함께 주는데 jpg 파일로 가지고 있으면 스마트폰으로 보기 편합니다. 

자료실 (http://gil.seoul.go.kr/walk/sub/guide/pds_view.jsp?idx=1) 에서 다운로드 받을 수 있어요.

이 글에 사진을 넣었으니 이글을 보셔도 됩니다.

 

 

위치를 표로 정리해 보았습니다.

정확한 스탬프 위치를 다음지도 로드뷰로 찾기 쉽게 했습니다.

 1코스-수락·불암산코스

1-1 [도봉산역] 서울창포원 관리사무소 앞 
http://dmaps.kr/25hgv


1-2 [당고개역] 불암산 우회코스 갈림길 
http://dmaps.kr/25hh8


1-3 [화랑대역] 화랑대역 4번 출구 앞 공원 [2-1 동일위치]
http://dmaps.kr/25hhf

 

 

 2코스-용마·아차산코스

2-1 [화랑대역] 화랑대역 4번 출구 앞 공원 [1-3 동일위치]
http://dmaps.kr/25hhf


2-2 [사가정공원] 용마산 깔딱고개 쉼터 
http://dmaps.kr/25hi3


2-3 [아차산생태공원] 아차산관리사무소 앞
http://dmaps.kr/25hig

 

 

 3코스-고덕·일자산코스

3-1 [광나루역] 광진교 초입 
http://dmaps.kr/25hke


3-2 [고덕역] 일자산초입 (고덕역 4번 출구 260m 앞 공원) 
http://dmaps.kr/25hkw


3-3 [올림픽공원역] 방이동생태경관보전지역사무소 앞 
http://dmaps.kr/25hm5


3-4 [수서역] 탄천 끝부분
http://dmaps.kr/25hma

 

 

 4코스-대모·우면산

4-1 [수서역] 대모산 초입 
http://dmaps.kr/25hmo


4-2 [양재시민의숲역] 양재시민의숲 안내소 옆(윤봉길의사기념관 앞 안내소) 
http://dmaps.kr/25hms


4-3 [사당역] 우면산 끝부분
http://dmaps.kr/25hmx

 

 

 5코스-관악산코스

5-1 [사당역] 관악산 입구화장실 앞(관음사 아래) 
http://dmaps.kr/25hn5


5-2 [서울대학교] 관악산 안내소 앞 
http://dmaps.kr/25hn8


5-3 [석수역] 관악산 끝부분
http://dmaps.kr/25hnj

 

 

 6코스-안양천코스

6-1 [석수역] 석수역 앞 
http://dmaps.kr/25ho9


6-2 [구일역] 구일역 앞 
http://dmaps.kr/25hoe


6-3 [가양역] 황금내근린공원 화장실 앞
http://dmaps.kr/25hoj

 

 

 7코스-봉산·앵봉산코스

7-1 [가양역] 가양대교 시작점 
http://dmaps.kr/25hoq


7-2 [증산역] 증산체육공원 화장실 앞 
http://dmaps.kr/25hot


7-3 [구파발역] 앵봉산 초입
http://dmaps.kr/25hou

 

 

 8코스-북한산코스

8-1 [선림사] 서울둘레길과 북한산둘레길 합류점
http://dmaps.kr/25hoy


8-2 [북한산생태공원] 북한산둘레길 옛성길 시작점 
http://dmaps.kr/25hp2


8-3 [형제봉매표소] 북한산둘레길 명상길 시작점 
http://dmaps.kr/25hp3


8-4 [벽산라이브파크] 북한산둘레길 흰구름길 시작점
http://dmaps.kr/25hp5


8-5 [진흥숲속어린이집] 북한산둘레길 왕실묘역길 시작점
http://dmaps.kr/25hp9


8-6 도봉탐방지원센터 앞
http://dmaps.kr/25hpe

 

 

 

 

 

 

 

후기:

대부분 스탬프 우체통 위치는 지하철 근처에 있어서 대중교통으로 그 위치에 가서 스탬프찍는 것도 가능합니다.

하지만 산으로 들어가지 않고는 못찍는 곳도 몇개 있습니다.

예를들어 2코스에 2-2 깔딱고개 는 대중교통으로 접근이 안됩니다.

한번에 너무 많이 욕심내지 말고 하루 2~3개씩 찍으면서 전진하다보면 다 찍게 됩니다.

 

길을 잃지 않는 팁을 드리자면 스마트폰의 지도와 GPS를 이용하는 겁니다.

다음지도나 네이버지도 앱에서 둘레길코스를 검색한후 GPS 위치 표시를 하면 아래 그림처럼 확인이 가능합니다.

핑크색라인이 둘레길이고 빨간점이 현재 위치 입니다.

 

 

2021-07-07 수정

이제 abapGit 을 사용합시다. 더 쉽고 편리합니다.

https://boy0.tistory.com/174 

 

abapGit 으로 프로그램 설치하기 간단하게 설명

자세한 설명은 다음 글을 참고하세요. [번역] abapGit 설치 방법 간단하게 설명합니다. https://raw.githubusercontent.com/abapGit/build/main/zabapgit.abap 위 파일을 다운로드 해서 SE38로 프로그램을 만듭니..

boy0.tistory.com

**********************************************************************

아밥 개발 오브젝트를 다운로드/업로드 할 수 있는 SAP link 라는 오픈소스 소프트웨어가 있습니다.

프로그램명은 ZSAPLINK 입니다.

 

설치방법

공식 홈페이지에 접속합니다.

www.saplink.org

SVN에 가서 다운받으라는 안내문구를 읽어 보시고,

SVN으로 이동합니다.

 

trunk / build 폴더로 이동합니다.

...zip 파일을 다운로드 받습니다.

 

오른쪽에 다운로드를 선택해야 합니다.

 

다시 홈페이지 초기화면 (Wiki)로 돌아와서 이번에는 플러그인을 다운 받기 위해

http://plugins.saplink.org/ 링크로 이동합니다.

 

SVN에 가서 다운받으라는 안내문구를 읽어 보시고,

SVN으로 이동합니다.

 

build 폴더로 이동하여 zip 파일을 다운로드 받습니다.

 

오른쪽에 다운로드를 선택해야 합니다.

다 받았으면 웹 브라우저는 닫습니다.

 

압축을 풀면 이렇게 파일이 보입니다.

인스톨러 txt 파일을 메모장으로 엽니다.

 

전체를(Ctrl + A) 선택하여 복사하기(Ctrl + C)

 

SAP 서버에 접속하여 설치용 리포트프로그램을 하나 생성합니다.

내용을 붙여넣기(Ctrl +V)

활성화 하고 실행합니다.

 

다운로드 받은 nugg 파일을 찾아서 선택합니다.

이때 nugg 파일이 두개 있는데 plugin은 나중에 설치할 것이고 우선 SAPlink_Daily.nugg 를 선택합니다.

실행버튼을 눌러서 설치합니다.

 

설치된 프로그램인 ZSAPLINK에 들어가 보겠습니다.

지금은 비활성화 상태입니다.

 

활성화 버튼을 누릅니다.

이번에 설치한 다른 개발 오브젝트도 함께 활성화 하도록 전체선택을 누르고 확인 누릅니다.

 

Acitive 가 되었으면 이제 ZSAPLINK 를 실행해 보겠습니다.

 

이번에는 plugin을 설치할 순서 입니다.

SAPlink-plugins_Daily.nugg 파일을 선택하고 실행버튼을 누릅니다.

 

설치가 잘 되었으면 모두 초록불이 나와야 합니다.

스크롤을 내려서 모두 초록불인지 확인해 보세요.

 

설치한 플러그인을 활성화 하도록 하겠습니다.

비활성인것 아무거나 하나 들어가서 활성화 버튼을 누릅니다.

 

한꺼번에 활성화 하기 위해서 Whole Worklist 버튼을 누른후

전체선택을 누르고 확인을 누릅니다.

에러가 없이 활성화 하였다면 설치가 끝났습니다.

 

 

로컬에 있는게 싫어서 패키지를 옮겨 보았습니다.

 

 

 

서버버전에 따라 설치중 오류가 발생할 수 있습니다.

각자 수정해야 합니다. 예를 들어 7.01에서는 이렇게 수정했습니다.

ZSAPLINK_TABLE_TYPES 플러그인에서 에러가 발생했네요.

원인은 dd43v가 낮은 버전에는 없어서 입니다. 관련 내용을 모두 주석처리 합니다.

 

이글은 아래 링크의 원본 글에 대한 한글 번역 입니다 (+약간의 내용 추가)

https://github.com/ivanfemia/abap2xlsx/wiki/Installation-guide

 

 

이글은 abap2xlsx를 시스템에 설치하기 위한 방법을 설명하고 있습니다. 설치를 위해서는 nugg 파일을 사용하는 SAPLink를 다룰수 있어야 합니다.

 

선행 조건

  • 우선 SAPlink 가  설치 되어 있어야 합니다
  • 다음의 SAPlink Plugins 이 설치 되어 있어야 합니다.  DDic, Interface (각각 설치하기 보다는 플러그인 모음인 SAPlink-plugins_Daily.nugg 설치를 추천합니다.)SAP

 

진행 순서

nugg 파일을 공식 홈페이지의 build folder 에서 PC로 다운로드 받습니다. SAP 시스템에 로그인합니다. 리포트 프로그램 ZSAPLINK를 실행하여 "Import Nugget" 옵션을 선택하고 Nugget File Name 부분에 다운로드 받은 파일 위치를 선택합니다. 최초 설치시에는 필요없지만 만약 업그레이드하는 거라면 Overwirte Originals 옵션에 체크를 합니다.

SAPlink Install

 

실행합니다. Overwirte Originals 옵션에 체크를 했다면 팝업창이 뜰 수 있습니다. 그럴때는 Yes to all 을 선택해 주세요. 너겟설치가 끝나면 아래 그림처럼 모두 녹색불이 들어 옵니다.

SAPlink Install

SAPLink는 모든 오브젝트를 로컬($tmp) 패키지에 넣고 비활성 상태로 업로드하는 특징이 있습니다. 그래서 이제부터 활성화 시켜야 합니다. 한꺼번에 활성화가 안되기 때문에 이 작업이 시간이 다소 걸립니다.

SAPlink Install

 

오브젝트를 활성화 하는 순서는 아래와 같습니다.

  1. Activate all domains
  2. Activate all data elements
  3. Activate all Database Tables / Structures except: ZEXCEL_S_FIELDCATALOG, ZEXCEL_S_WORKSHEET_COLUMNDIME, ZEXCEL_S_WORKSHEET_ROWDIMENSIO
  4. Activate all Table Types except: ZEXCEL_T_FIELDCATALOG, ZEXCEL_T_WORKSHEET_COLUMNDIME, ZEXCEL_T_WORKSHEET_ROWDIMENSIO
  5. Activate all interface/classes (activate anyway)
  6. Activate remaining Database Tables / Structures (if any error occurs open the structure and double click on the class object, SAP needs to refresh its buffer): ZEXCEL_S_FIELDCATALOG, ZEXCEL_S_WORKSHEET_COLUMNDIME, ZEXCEL_S_WORKSHEET_ROWDIMENSIO
  7. Activate remaining Table Types (if any error occurs open the structure and double click on the class object, SAP needs to refresh its buffer): ZEXCEL_T_FIELDCATALOG, ZEXCEL_T_WORKSHEET_COLUMNDIME, ZEXCEL_T_WORKSHEET_ROWDIMENSIO
  8. Activate all demo reports

 

이제부터 번역자(boy0)가 경험을 바탕으로 다소 변형하여 설치 방법을 설명드리겠습니다.

 

활성화 하기전에 우선 패키지를 (예: ZEXCEL) 하나 만들고 모두 패키지 재지정 합니다.

dictionary objects , class library, programs, includes, message classes, transformations

 

원문의 1~4를 한꺼번에 하겠습니다. 패키지 아래의 Dictionary Objects 를 열어서 아무거나 하나 선택하고 들어 갑니다. 활성화 버튼을 누르고 전체선택하여 활성화 합니다. 10개 정도 빼고 활성화 성공합니다. 에러난건 나중으로 미루고 다음을 진행합니다.

 

원문의 5번 입니다. interface와 class를 모두 활성화 합니다. 에러 나면 activate anyway 선택합니다.

한꺼번에 안되고 하나씩해야 합니다. 요령은 마우스 오른쪽 버튼 누르고 i 엔터 입니다. (지루함)

 

원문의 6,7번 입니다. Dictonary 쪽에 비활성으로 남아 있는 것들 하나씩 활성화 합니다.

에러 나면 건너띄고 다른거 먼저 하고 나중에..  이런식으로 하다보면 모두 활성화 할 수 있습니다.

 

8번으로 모든 프로그램을 활성화 합니다. 아무거나 들어가서 활성화 전체선택 하시면 한꺼번에 됩니다.

 

추가로 비활성인 Transformations 부분의 두개 오브젝트를 각각 활성화 해줍니다.

 

잘 설치 되었는지 확인하기 위해 데모 프로그램을 돌려봅니다.

컴파일하면서 잘 실행되면 다행이고 에러가 나면 서버버전 차이로 인한 것이므로 각자 알아서 돌아가게끔 수정하는 노력이 필요합니다.

 

 

넷위버 7.01 버전 기준으로 에러난 부분 & 수정한 내용을 소개 하겠습니다.  에러 5개 입니다.

 

 

 

 

끝.

 

이글은 아래 링크의 원본 글에 대한 한글 번역 입니다 (+약간의 내용 추가)

https://github.com/ivanfemia/abap2xlsx/wiki/Installation-guide

+ Recent posts