이글은 아래 링크의 원본 글에 대한 한글 번역 입니다
https://blogs.sap.com/2014/10/18/dynamically-createmodify-ui-elements-of-standard-components-without-enhancing/

 

Dynamically Create/Modify UI elements of Standard components without Enhancing

October 18, 2014 

소개

 

보통 스탠다드 컴포넌트의 UI 엘리먼트 속성을 수정하려면, 해당 컴포넌트로 이동하여 enhancement를 해서 레이아웃의 UI 엘리먼트 속성을 수정(엘리먼트를 삭제하고 새로 엘리먼트를 추가하는 방법으로)하거나 또는 WDDOMODIFYVIEW 메소드에 pre/post-exit을 만들어서 속성 변경하는 코드를 넣는 방법이 있습니다.

 

스탠다드 컴포넌트에 enhancement를 작성하는 방법 대신 (가끔 enhancement를 원하지 않는 고객이 있지요) BAdI - WD_BADI_DOMODIFYVIEW 가 있습니다. 

 

이 글에서는 예제를 통해 스탠다드 컴포넌트에 enhancement 없이 UI 엘리먼트 속성을 동적 변경하여 보겠습니다.

 

진행

 

간단한 스탠다드 웹딘프로아밥 컴포넌트를 하나 선택합니다. 예를 들어 항공편 목록 프로그램입니다.

 

/wp-content/uploads/2014/10/1_566500.jpg

Depart.City를 입력하지 못하도록 하고 싶습니다.

/wp-content/uploads/2014/10/4_566501.jpg

 

보통은 해당 WDA 컴포넌트로 가서 enhancement를 하고 UI 엘리먼트는 삭제하거나 또는 WDDOMODIFYVIEW메소드에 post-exit을 만들고 코딩으로 UI 엘리먼트를 숨기도록 합니다.

 

이번에는 스탠다드 컴포넌트에 enhancement 없이, 전혀 스탠다드를 건드리지 않고 해보겠습니다. 방법은 바로 BAdI – WD_BADI_DOMODIFYVIEW 구현을 만드는 것입니다.

 

** WD_BADI_DOMODIFYVIEW 는 필터가 있는 바디 입니다. 필터 COMPONENT_NAME 과 VIEW_NAME 이 있습니다. 바디 구현을 만들때 이 필터에 해당 스탠다드 프로그램 값을 입력하여 만들겠습니다.

 

컴포넌트와 뷰의 이름을 찾아보겠습니다. ( 화면에서 오른쪽 버튼 클릭 -> 기술정보):

 

/wp-content/uploads/2014/10/2_566502.jpg

/wp-content/uploads/2014/10/3_566503.jpg

 

UI 엘리먼트의 ID를 찾아 보겠습니다: 기술정보 -> view and View Elements 탭:

/wp-content/uploads/2014/10/5_566504.jpg

 

또는, 티코드 SE80에서 웹딘프로 컴포넌트를 열어서 UI 엘리먼트 ID를 찾을 수 있습니다.

 

/wp-content/uploads/2014/10/6_566505.jpg

 

구현

티코드 SE18 로 이동하여 BAdI를 열어주세요.

/wp-content/uploads/2014/10/7_566506.jpg

해당 컴포넌트에 대해 (필터값 확인) 이미 구현된 것이 있는지 확인합니다. 없으면 구현을 하나 만들어 주세요. Implementations에서 마우스 오른쪽 버튼을 누르고 생성을 선택합니다.

/wp-content/uploads/2014/10/8_566507.jpg

Enhancement Implementation 과 설명을 입력하고 OK를 클릭합니다.

/wp-content/uploads/2014/10/9_566508.jpg

BAdI implementation name 과 설명을 입력하고 Implementation Class도 입력합니다.

/wp-content/uploads/2014/10/10_566509.jpg

 

이제 필터 값을 입력하겠습니다. (어느 컴포넌트와 뷰에 적용할 것인지).

/wp-content/uploads/2014/10/13_566510.jpg

주의: 만약 필터를 만들지 않으면, 모든 웹딘프로 어플리케이션을 대상으로 실행됩니다.(게다가 실행중 덤프가 발생할 수도 있습니다.).

 

마지막으로, 메소드 IF_WD_BADI_DOMODIFYVIEW~WDDOMODIFYVIEW 에 코딩을 합니다.

/wp-content/uploads/2014/10/11_566511.jpg

 

아래 코드를 입력하세요.

 

if_wd_badi_domodifyview~wddomodifyview
METHOD if_wd_badi_domodifyview~wddomodifyview.

     DATA lr_ui_elem TYPE REF TO cl_wd_uielement.

     IF first_time = abap_true.

*     Hide Depart.City Label

       lr_ui_elem ?= view->get_element( 'CITYFROM_LABEL_1_CP' ).

       lr_ui_elem->set_visible( cl_wd_uielement=>e_visible–none ).

*     Hide Depart.City Input

       lr_ui_elem ?= view->get_element( 'CITYFROM_INPUTFIELD_1_CP' ).

       lr_ui_elem->set_visible( cl_wd_uielement=>e_visible–none ).

     ENDIF.

  ENDMETHOD.

 

저장하고 활성화 합니다.

 

실행 결과

어플리케이션을 실행합니다. Depart.City의 레이블과 입력 필드가 숨겨진 것을 확인할 수 있습니다!.

/wp-content/uploads/2014/10/14_566513.jpg

 

결론

예제를 통해 간단히 살펴보았습니다. 서치핼프를 추가/변경 할 수도 있습니다. 레이블을 변경할 수 있습니다. 특정 UI 엘리먼트를 활성화/비활성화 할 수도 있습니다. 이런 일들을 스탠다드 enhancement 없이 단지 필터 값을 가진 BAdI를 구현하여 달성 할 수 있습니다.

 

자세한 코딩 방법에 대해서는 다음 글을 참고하세요: Auto Align UI Elements Dynamically in Web Dynpro ABAP

 

그리고, 동일한 필터에 대해 여러 구현을 만드는 것도 가능합니다.

 

제한사항

위 방법으로 UI 엘리먼트를 만들고 액션을 지정하는것 까지는 가능합니다.(예: 입력 필드/버튼) 그러나 액션에 대한 On_Action 메소드는 여기서 만들 수 없습니다. 그런 경우는 스탠다드 컴포넌트에 enhancement를 해야 합니다.

 

 

이글은 아래 링크의 원본 글에 대한 한글 번역 입니다
https://blogs.sap.com/2014/10/18/dynamically-createmodify-ui-elements-of-standard-components-without-enhancing/

이글은 아래 링크의 원본 글에 대한 한글 번역 입니다
https://blogs.sap.com/2014/10/24/ui-theme-designer-for-web-dynpro-abap/

 

UI Theme Designer for Web Dynpro ABAP

October 24, 2014 

소개


이 문서는 UI 테마 디자이너로 웹딘프로아밥 테마를 만드는 방법을 설명합니다.


UI 테마 디자이너는 웹브라우저에서 실행됩니다. 스탠다드 테마를 복사하여 자신만의 테마를 만들고 수정할 수 있습니다.


준비물

넷위버 7.4 미만 버전에서는 UI Add-on for Netweaver 1.0 SP04 이상 버전을 추가 설치해야 합니다.


넷위버 7.4 SP04 버전 이상인 경우, UI 테마 디자이너는 이미 설치 되어 있습니다.



단계별 진행

예제로 간단한 웹딘프로아밥 어플리케이션을 하나 선택하였습니다. 여기에 배경 그림을 변경하는 데모를 보여드리겠습니다.

/wp-content/uploads/2014/10/1_570383.jpg

위 어플리케이션입니다. 이제 UI 테마 디자이너로 테마 변경을 해보겠습니다.



시작

UI 테마 디자이너를 실행하기 위해서는 티코드 /UI5/THEME_DESIGNER를 실행합니다.


또는, 웹 브라우저에서 아래 주소를 입력해도 됩니다:

https://<server>:<port>/sap/bc/theming/theme-designer?sap-client=<client>


테마 디자이너를 실행하기 전에 다음의 ICF 노드를 활성해 해야 합니다. 티코드 SICF를 실행합니다. 아래의 ICF 노드를 (활성화 하지 않았다면) 활성해 해주세요.

 

경로: default_host -> SAP -> BC -> ui5_ui5 -> SAP 에서 아래 노드를 활성화:

 

  • ARSRVC_SUITE_PB
  • ARSRVC_SPB_ADMN
  • ARSRVC_LPD_C

 

경로: default_host -> SAP -> Public -> BC 에서 아래 노드를 활성화:

  • ui2
  • ui5_ui5

 

 

혹시나 활성화 하지 않더라도 UI 테마 디자이너를 실행하면 활성화 여부를 체크하여 활성화 할지 물어 봅니다.

 

실행

 

이제 티코드 /UI5/THEME_DESIGNER를 실행합니다.

 

웹브라우저에서 테마 디자이너가 실행됩니다. 사용가능한 (스탠다드와 커스텀 테마 모두) 테마 목록이 나타납니다.

/wp-content/uploads/2014/10/2_570461.jpg

 

테마를 선택합니다. 복사하여 수정할 기본이 될 테마를 선택하는 것입니다. Open을 클릭합니다.

/wp-content/uploads/2014/10/3_570462.jpg

테마 수정 화면으로 이동합니다. 화면에 나타난 Target Content를 입력해야 합니다.

 

/wp-content/uploads/2014/10/4_570463.jpg

 

테마를 적용할 웹딘프로 어플리케이션의 URL을 복사하여 Target Content의 application link 에 입력합니다.

/wp-content/uploads/2014/10/5_570464.jpg

application link에 url을 입력하고 description에 설명을 입력하고 Add를 클릭합니다.

/wp-content/uploads/2014/10/6_570465.jpg

 

테마 디자이너가 해당 어플리케이션을 미리보기 영역에 보여줍니다. 테마를 수정하면 미리보기에 바로 반영되어 확인할 수 있습니다.

/wp-content/uploads/2014/10/7_570466.jpg

 

이제 Quick 모드로 배경 그림를 추가하여 테마를 수정해 보겠습니다. 아래 그림처럼 Background Image 옆에 있는 버튼을 누릅니다:

/wp-content/uploads/2014/10/8_570473.jpg

팝업 창이 뜹니다. 파일 추가 아이콘을 누르거나 PC에서 파일을 드래그하여 드랍합니다:

/wp-content/uploads/2014/10/9_570474.jpg

그림을 추가하면 작은 미리보기가 나타납니다. 그림을 선택하고 OK를 클릭합니다.

/wp-content/uploads/2014/10/10_570479.jpg

미리보기에 테마 변경사항이 바로 반영 됩니다:

/wp-content/uploads/2014/10/11_570480.jpg

 

테마 디자이너는 'Expert' 모드를 지원합니다. Quick 보다 더 많은 옵션이 제공 됩니다. 글꼴, 글 색상, 테두리, 넓이, 스타일 등을 쉽게 변경 할 수 있습니다.

/wp-content/uploads/2014/10/12_570481.jpg

 

예를들어 글 색상을 변경하고 싶다면, sapTextColor 옆에 있는 아이콘 버튼을 눌러 보세요:

/wp-content/uploads/2014/10/14_570485.jpg

색상을 쉽게 선택할 수 있고 변경 사항은 즉시 미리보기에 적용됩니다:

/wp-content/uploads/2014/10/15_570486.jpg

 

 

변경된 파라미터는 굵게 표시됩니다. 변경사항을 취소하는 방법은 파라미터 이름 옆에 표시된 세팅 아이콘을 누르고 'Reset to Original'을 선택하면 취소 됩니다.

/wp-content/uploads/2014/10/16_570487.jpg

 

여기에는 필터 기능도 있습니다. 테마 파라미터를 색상, 그림, 글꼴 등을 기준으로 필터링 할 수 있습니다,

/wp-content/uploads/2014/10/17_570450.jpg

 

필터에 직접 글자를 입력할 수도 있습니다:

/wp-content/uploads/2014/10/18_570494.jpg

 

테마 디자이너에서는 직접 css를 입력할 수 있도록 CSS 탭을 제공합니다.

/wp-content/uploads/2014/10/19_570496.jpg

 

미리보기에는 변경전(Original) 과 변경후(Preview)를 쉽게 바꿔가며 볼 수 있습니다.

/wp-content/uploads/2014/10/20_570507.jpg

 

변경이 끝났으면 이제 저장을 해보겠습니다. 테마 메뉴에서 'Save & Build'를 선택합니다.

/wp-content/uploads/2014/10/21_570508.jpg

 

새로 저장할 테마 ID와 설명을 입력하고 Publish를 클릭합니다.

/wp-content/uploads/2014/10/22_570512.jpg

 

 

이제 새로운 테마가 생성되어 사용할 준비가 되었습니다.

/wp-content/uploads/2014/10/23_570513.jpg

 

 

완료

 

테마를 테스트 해보겠습니다. 파라미터 sap-theme=<your_theme> 를 URL 에 추가하여 웹딘프로 어플리케이션을 실행합니다.

 

/wp-content/uploads/2014/10/27_570514.jpg

 

또는, 어플리케이션의 파라미터탭에서 WDTHEMEROOT 파라미터를 선택하고 테마이름을(myTheme)  value 에 입력해도 됩니다.

/wp-content/uploads/2014/10/25_570525.jpg

 

우리가 만든 테마가 (배경 그림 변경) 적용된 웹딘프로 어플리케이션이 실행 됩니다.

/wp-content/uploads/2014/10/28_570526.jpg

 

이 테마는 당연히 다른 어플리케이션에도 적용할 수 있습니다. 아래 그림은 스탠다드 어플리케이션(비행 목록)을 실행하여 테마를 적용해 보았습니다.

/wp-content/uploads/2014/10/26_570527.jpg

 

 

결론

UI 테마 디자이너로 큰 노력 들이지 않고 쉽게 테마를 만들고 수정할 수 있습니다. 웹딘프로아밥, FPM, SAPUI5, NWBC, 포탈 모두에 적용되는 일관성 있는 테마를 만들 수 있습니다.

참고:

UI Theme Designer – User Interface Add-On for SAP NetWeaver – SAP Library

 

이글은 아래 링크의 원본 글에 대한 한글 번역 입니다
https://blogs.sap.com/2014/10/24/ui-theme-designer-for-web-dynpro-abap/

이글은 아래 링크의 원본 글에 대한 한글 번역 입니다
https://blogs.sap.com/2014/12/15/creating-application-specific-web-page-links-in-help-center/

 

Creating Application Specific Web Page Links in Help Center

December 15, 2014 

SAP 도움말 센터는 특정 어플리케이션에 대한 관련 정보를 회사의 입장에서 도움말 형태로 제공하는 기능입니다. 우선 도움말 센터 기능을 활성화 해야 하고 그후 사용자는 어플리케이션에서 도움말을 실행 하면 도움말 센터가 표시 됩니다. SAP에 의해 제공되는 스탠다드 도움말이 기본 링크로 제공됩니다. 회사 입장에서 도움말을 추가로 (예를 들어 Learning Content, Worth Knowing…) 제공 할 수 있습니다. 도움말 센터 관련 IMG 세팅을 통해서 특정 어플리케이션에 간단히 링크를 추가 할 수 있습니다.


이 문서에서는 예제로 SRM 7.02 포탈에 있는 쇼핑 카트와 구매 오더 어플리케이션에 각 어플리케이션별 링크를 추가해 보겠습니다.

 

아래의 단계를 따라 진행합니다.

 

단계 1: "쇼핑 카트"와 "구매 오더"에 대해 각각 웹딘프로 어플리케이션 기술 정보가 필요합니다.

    1. SRM 포탈 홈 페이지 –> Shop –> 마우스 오른쪽 버튼 –> 기술 정보

                 Webdynpro Application Name: /SAPSRM/WDA_L_FPM_GAF


             /wp-content/uploads/2014/12/shop_608390.jpg


             2. SRM 포탈 홈 페이지 –> Purchasing –> Display Purchase Order –> 마우스 오른쪽 버튼 –> 기술 정보

                 Webdynpro Application name: /SAPSRM/WDA_L_FPM_OIF


            PO_image.jpg

 

단계 2: 도움말 센터에서 어플리케이션별 링크를 생성하겠습니다.

 

            티코드SPRO –> SAP NetWeaver –> Knowledge Management –> 도움말 센터 –>

                              도움말 센터 컨텐트 중앙 관리

 

            도움말 센터 컨텐트 관리 가 실행됩니다. 아래 조건을 입력합니다.

 

            Category: Learning Content

           Link Type: Web Page

           Language: EN

            Application Type: Web Dynpro Application

 

             검색 버튼을 누릅니다.

          Admin.jpg

 

            이제 "Create Link to…" 버튼을 누르고 "Web page"를 선택한 후 "Link Text" 에 제목을 입력합니다.

            "Link Target" 에는 웹딘프로 어플리케이션 "/SAPSRM/WDA_L_FPM_GAF"를 입력합니다.

            아래 그림을 참고하세요.


          Admin2.jpg

           저장 버튼을 누릅니다. 이제 구매 오더에 대한 내용도 같은 방식으로 입력합니다.

           Webdynpro Application: /SAPSRM/WDA_L_FPM_OIF

        /wp-content/uploads/2014/12/admin3_608400.jpg

단계 3: 운영 서버에 전송하기 위해 CTS를 생성하겠습니다.

 

            "Transport Link" 버튼을 누릅니다. CTS 정보를 입력합니다.


           /wp-content/uploads/2014/12/admin4_608401.jpg


단계 4: 도움말 센터가 잘 적용되었는지 테스트 합니다.

 

          쇼핑 카트: SRM 포탈 홈페이지 -> Shop 으로 이동 합니다.

          도움말 센터 버튼을 클릭하면 쇼핑 카트와 관련된 웹 페이지 URL이 도움말 센터 팝업 윈도우에 표시됩니다.

          /wp-content/uploads/2014/12/admin5_608414.jpg


         구매 오더: SRM 포탈 홈페이지 -> Purchasing -> Display Purchase Order 로 이동 합니다.

        도움말 센터 버튼을 클릭하면 구매 오더와 관련된 웹 페이지 URL이 도움말 센터 팝업 윈도우에 표시됩니다. 

          /wp-content/uploads/2014/12/admin6_608415.jpg

관련 링크:

Help Center for Web Dynpro ABAP Applications – Using the Help Center for SAP Business Suite Applications – SAP Library

 

 

이글은 아래 링크의 원본 글에 대한 한글 번역 입니다
https://blogs.sap.com/2014/12/15/creating-application-specific-web-page-links-in-help-center/

이글은 아래 링크의 원본 글에 대한 한글 번역 입니다
https://blogs.sap.com/2015/01/28/sharing-theme-between-abap-webdynpro-applications-on-different-systems/

 

Sharing theme between Abap Webdynpro applications on different systems

January 28, 2015 

다른 서버의 웹딘프로 어플리케이션 간에 동일한 테마를 공유하는 방법은 여러가지가 있습니다. 예를 들어 포탈, ECC, CRM, BW 시스템이 있다고 가정합시다. 동일한 테마가 모든 서버에 있거나, 그중 하나의 서버(주로 포탈)에 테마가 있고 나머지 서버들은 파라미터를 지정해서 테마를 지정하거나, 포탈의 테마를 사용하도록 어플리케이션에 지정하는 방법 등이 있습니다.

1)     동일한 포탈 테마를 포탈과 웹딘프로 어플리케이션에 적용.

이 방법은 모든 포탈내 네비게이션과 웹딘프로 어플리케이션이 동일한 테마를 사용합니다.

테마 자체는 포탈에서 관리합니다. 어플리케이션은 아래에 설명하는 방법을 통해 포탈 테마를 사용하도록 설정합니다.

a) 새로운 테마를 포탈에서 만들 수 있습니다. 테마 디자이너 툴이 System Administration-> Portal Display 메뉴에 있습니다.

b) 포탈 아이뷰의 속성 중 'Hand over Portal Stylesheet'에 체크를 하여 웹딘프로 어플리케이션에 테마를 전달 할 수 있도록 세팅합니다.T1.png

c) 웹딘프로의 어플리케이션 파라미터 'WDFORCEEXTERNALSTYLESHEET'에 'X'를 입력하여 포탈 테마를 사용하도록 합니다.

T2.png

 

2)    서로 다른 포탈 테마를 포탈과 웹딘프로 어플리케이션에 적용.

이 방법은 포탈내 네비게이션용으로 다른 테마를 사용하고 웹딘프로 어플리케이션용으로 다른 테마를 사용합니다. 서버에 상관없이 모든 웹딘프로 어플리케이션은 동일한 포탈 테마를 사용합니다. 테마는 포탈에서 관리합니다. 이 방법의 장점은 포탈이 웹딘프로와 다른 테마를 사용하지만 여러 서버에 걸쳐 모든 웹딘프로 어플리케이션은 동일한 테마를 사용하고 한 곳에서 그 테마를 관리한다는 점입니다.

         

테마는 각 로컬 시스템에 있지도 않고 포탈에서 암묵적으로 전달해 줄수도 없습니다. 그러므로 웹딘프로 어플리케이션의 파라미터 형태로 테마를 명시적으로 전달해 주어야 합니다.

a) 아이뷰 속성중 'Application Parameter'에 아래와 같은 형태로 입력합니다.

SAP-EP-THEMEROOT=<PORTAL_THEME_ROOT_PATH>


테마 루트 경로는 아래 규칙에 따라 만들어 집니다:

https://<hostname>:<port>/irj/portalapps/com.sap.portal.design.portaldesigndata/themes/portal/<THEME_ID>T3.png

b) 아이뷰 속성중 'Hand over Portal Stylesheet'를 끕니다. 웹딘프로 어플리케이션 파라미터중 'WDFORCEEXTERNALSTYLESHEET'도 끕니다.

 

3)     ECC 서버의 테마를 CRM/BW 등의 웹딘프로 어플리케이션에도 적용.

앞의 두 방법과 이 방법의 가장 큰 차이점은 테마를 포탈이 아니라 ECC에서 관리한다는 점입니다. 티코드 '/UI5/THEME_DESIGNER' 와 '/UI5/THEME_TOOL' 로 테마를 관리합니다.

여기서는 포탈이 없습니다. 웹딘프로 어플리케이션의 테마는 WDTHEMEROOT 파라미터로 지정합니다. 테마 아이디는 THEME_ID@THEME_ROOT_ID 포맷으로 입력합니다.
T4.png

테마 루트 경로는 티코드 '/UI5/THEME_TOOL'에서 INFO 버튼을 눌러서 확인 할 수 있습니다.T5.png

예를 들어 테마 루트 경로는 이렇게 보입니다.

                             T6.png

 

 

 

 

 

 

 

 

이글은 아래 링크의 원본 글에 대한 한글 번역 입니다
https://blogs.sap.com/2015/01/28/sharing-theme-between-abap-webdynpro-applications-on-different-systems/

이글은 아래 링크의 원본 글에 대한 한글 번역 입니다
https://blogs.sap.com/2015/01/29/how-to-call-a-sap-gui-transaction-from-webdynpro-abap-using-nwbc/

 

How to call a SAP GUI transaction from Webdynpro ABAP using NWBC

January 29, 2015 

개요

웹딘프로아밥을 하다보면 가끔 SAP의 다른 기능이나 티코드를 호출해야 하는 경우가 생깁니다. 예전(웹딘프로아밥이 아닌)에는 모든것이 아밥으로 끝나는 것이고 사용자들은 SAP GUI로 접속해서 사용하고 있는 상태였습니다. 이때는 간단하죠. 그냥 필요한 기능이나 티코드를 호출하면 됩니다. SAP GUI가 새 세션을 열어서 실행시켜 줍니다.

이제 환경이 변했습니다. UI 개발에 여러가지 기술이 사용되고 있고, 이런 여러 기술 사이를 왔다갔다 이동하는 비지니스 프로세스가 발생하고 있습니다.

 

좋은 소식은 이런 경우 NWBC가 프레임워크 역할을 한다는 점입니다. NWBC를 사용하면 SAP의 여러 기능에 따라 각자 웹 브라우저를 여러개 띄우는게 아니라  하나의 어플리케이션으로 통합 관리됩니다.

 

이번 예제에서는 간단히 웹딘프로아밥 어플리케이션을 하나 만들어 보겠습니다. 이 어플리케이션은 판매 오더 번호를 입력받아서 SAP GUI의 티코드 VA03을 호출하는 예제입니다.

 

준비물

SAP ERP System

Netweaver Business Client (설치 후 실행)

웹딘프로아밥에 대한 기본지식

 

작동 원리?

Object-Based Navigation (OBN)을 이용하는게 핵심입니다. OBN은 역할(PFCG)에 있는데 오브젝트를 기능에 연결하는 방식입니다.

 

OBN이 호출되면 사용자의 역할에서 특정 기능을 찾아서 그 기능과 연결된 티코드(또는 다른 기능)를 실행합니다. 나중에 살펴보겠지만 OBN 은 사용자 역할에 아주 밀접하게 연결되어 있습니다. (NWBC도 그렇죠)

 

 

구현 시작

우선 웹딘프로아밥을 만들겠습니다. 판매 오더를 목록으로 보여주거나 해도 되지만 여기서는 간단히 입력 필드로 입력받고 실행 버튼을 하나 만듭니다:

 

blog1.PNG

 

매우 단순합니다. 판매 오더 번호를 넣을 입력 필드 하나와 실행 버튼 하나…

 

버튼의 액션 이벤트가 필요합니다:

blog2.PNG

 

코드는 이렇게 작성 하세요. (그림이라 죄송):

blog3.PNG

두부분으로 나눠서, 첫번째 부분은 화면에서 입력한 판매 오더 번호를 컨텍스트에서 읽어오는 코드 이고, 두번째 부분은 바로 OBN 호출 입니다:

 

IF_WD_PORTAL_INTEGRATION 인터페이스의 메소드를 실행해서 티코드를 호출합니다. 그런데 이상하게도 SAP 포탈이 없는데 됩니다 (대신 NWBC 환경에서 됩니다)!

 

4개 파라미터를 사용했습니다.:

OBJECT_TYPE:                    이것은 오브젝트의 타입입니다.

OBJECT_VALUE_NAME        이것은 티코드에 전달할 파라미터 이름입니다.

OBJECT_VALUE                   이것은 파라미터 값입니다.

OPERATION                         이것은 호출할 기능입니다.

 

위 코드를 잘 이해한 후 다음 구현을 진행하세요.

 

이제 역할을 만들어야 합니다(또는 있는걸 수정해도 됩니다):

 

티코드 PFCG로 이동하여 역할을 만듭니다:

blog4.PNG

 

역할은 루트 폴더와 하나의 하위 폴더로 구성하였습니다(NWBC는 최소 1레벨의 하위 폴더가 필요함). 그 아래에 첫번째 꼭지는 앞서 만든 웹딘프로아밥 어플리케이션 입니다.

 

두번째 꼭지는 판매 오더 조회 티코드 VA03 입니다. Other Node Details 버튼을 눌러서 OBN 부분이 보이도록 해주세요.

 

blog5.PNG

 

메소드 추가 버튼을 눌러서 OBN을 적용하겠습니다.

blog6.PNG

 

이번 예제에서는 오브젝트로 BOR 오브젝트를 사용하겠습니다. BUS2032 (SalesOrder)를 선택하고 메소드는 DISPLAY를 선택합니다.

 

blog7.PNG

 

다음은 파라미터 지정을 위한 화면입니다.

blog8.PNG

 

이것은 웹딘프로아밥에서 입력받은 값을 티코드로 전달하기 위한 파라미터 지정 작업입니다. 파라미터 아이디(첫 컬럼)에 들어갈 값은 해당 티코드에서의 화면 필드 이름 입니다(F1->기술정보).

두번째 컬럼에는 값이 들어 갑니다. 웹딘프로아밥에서 전달할 변수 이름을 갈매기 갈호로 묶어서 표시합니다.

 

주의: BOR 오브젝트는 단지 이름을 지정하기 위해 사용되었습니다. 여기서는 BOR 오브젝트 로직이 전혀 실행되지 않습니다. part 2 (역자주: 없음)에서 BOR 없이 하는 방법을 설명드리겠습니다…

 

이제 역할이 준비 되었습니다!

blog9.PNG

 

저장하고 사용자를 지정합니다.

 

NWBC를 시작해 주세요.

blo10.PNG

웹딘프로아밥 어플리케이션을 실행합니다.

blog11.PNG

판매 오더 번호를 입력하고 버튼을 누릅니다.

blog12.PNG

 

티코드 VA03이 SAP GUI로 호출 되었습니다. 이것은 web GUI가 아닙니다. NWBC안에서 웹딘프로아밥에서 SAP GUI로의 다른 기술간 전환이 이루어졌습니다.

 

어떻게 이게 가능 할까요?

시스템은 SalesOrder라는 비지니스 오브젝트의 메소드 Display를 (SalesOrder.Display) 호출하라고 합니다. 로그인한 사용자의 역할에서 OBN에 지정된 SalesOrder.Display를 찾습니다.

 

우리가 만든 역할에서 해당 OBN을 찾았습니다. 역할에 지정된 티코드를 실행합니다. 그리고 파라미터로 판매 오더 번호를 VA03의 화면필드 VBAL-VBELN에 입력합니다.

 

 

 

이글은 아래 링크의 원본 글에 대한 한글 번역 입니다
https://blogs.sap.com/2015/01/29/how-to-call-a-sap-gui-transaction-from-webdynpro-abap-using-nwbc/

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

https://blogs.sap.com/2015/02/11/webdynpro-tree-ui/

 

WebDynpro – Tree UI

February 11, 2015 

트리 - 순차적(Sequential) 구현방법

트리 UI를 사용하면 컨텍스트에 구성된 계층구조를 시각화 할 수 있습니다.

트리 UI 엘리먼트는 2가지 구현 방법이 있습니다:

  • 순차적(sequential) 구현방법: 재귀 노드가 필요 없습니다. 구현시 몇 단계(level)로 트리를 구성할지 결정 된 경우 사용합니다.
  • 재귀적(recursive) 구현방법: 재귀 노드가 필요 합니다. 구현시 몇 단계(level)로 트리를 구성할지 모르는 상태로 실행시 단계(level)가 결정되는 경우 사용합니다.

웹딘프로 컴포넌트

/wp-content/uploads/2015/02/1_642837.jpg

순차적 구현방법에서는 재귀 노드가 필요하지 않습니다. 컨텍스트 노드 TREE를 뷰 컨트롤러에서 만듭니다. 카디널리티는 1..1이고 싱글턴입니다. 이 노드 아래에 노드 TREE_NODE를 만듭니다. 이 노드 TREE_NODE는 두개의 어트리뷰트를 가지고 있습니다. 이 노드 아래에 노드 TREE_LEAF를 만듭니다. 이 노드 TREE_LEAF는 한개의 어트리뷰트를 가지고 있습니다.

컨텍스트 구조

/wp-content/uploads/2015/02/2_642838.jpg

어트리뷰트 STUDENTNAME, VALUE, STUDENTINFO 는 모두 STRING 타입입니다. 노드 TREE_LEAF는 싱글턴이 아닙니다. 각 TREE_NODE의 엘리먼트마다 TREE_LEAF가 각자 독립적으로 존재해야 하기 때문에 싱글턴이 아닙니다. 어트리뷰트 STUDENTNAME는 학생 이름 저장합니다. 어트리뷰트 STUDENTINFO는 각 학생마다 여러 정보를 가지고 있습니다.

트리 UI 엘리먼트에서는 Node Type을 하위에 추가 할 수 있습니다. Node Type은 TreeItemType 과 TreeNodeType 두가지가 있습니다. 컨텍스트 어트리뷰트를 이곳에 연결해야 합니다.

Node Type을 하위에 추가

/wp-content/uploads/2015/02/3_642842.jpg

  • TreeNodeType: 노드 - 안에 먼가를 담고 있음 /wp-content/uploads/2015/02/4_642843.jpg
  • TreeItemType: 아이템 - 마지막 단계 /wp-content/uploads/2015/02/5_642844.jpg

 

뷰 레이아웃

/wp-content/uploads/2015/02/6_642845.jpg

트리 관련 UI 엘리먼트에 컨텍스트를 바인딩

/wp-content/uploads/2015/02/7_642846.jpg

노드 TREE_NODE는 서플라이 펑션을 통해서 값을 채웁니다.

 

주의: 만약 노드를 하나더 만들었다면(여기서는 2개뿐), 처음 2개 노드에 싱글턴에 체크하고 마지막하나는 싱글턴이 아닙니다.

 

노드 TREE_NODE의 서플라이 펑션 ( V_main = 뷰 이름 )

METHOD supply_tree_node.  ( V_main = View Name )

   DATA: ls_student TYPE if_v_main=>element_tree_node, 
lt_student LIKE TABLE OF ls_student.

ls_student-studentname = 'SathishKumar'.
ls_student-value = 'A'.
APPEND ls_student TO lt_student.
clear ls_student.

ls_student-studentname = 'Ravi'.
ls_student-value = 'B'.
APPEND ls_student TO lt_student.
clear ls_student.

ls_student-studentname = 'Vivek'.
ls_student-value = 'C'.
APPEND ls_student TO lt_student.
clear ls_student.

node->bind_table( lt_student ).

ENDMETHOD.

 

자식 노드 TREE_LEAF 역시 서플라이 펑션을 통해서 값을 채웁니다.

노드 TREE_LEAF의 서플라이 펑션

METHOD supply_tree_leaf.

   DATA: ls_student TYPE if_v_main=>element_tree_leaf,
lt_student LIKE TABLE OF ls_student.
DATA: lv_value TYPE string.

parent_element->get_attribute( EXPORTING name = 'VALUE' IMPORTING value = lv_value ).

CASE lv_value.

WHEN 'A'.

ls_student-studentinfo = 'Article – YES'.
APPEND ls_student TO lt_student.

ls_student-studentinfo = 'Exam – 5'.
APPEND ls_student TO lt_student.

ls_student-studentinfo = 'Academic year -II'.
APPEND ls_student TO lt_student.

WHEN 'B'.
ls_student-studentinfo = 'Article – NO'.
APPEND ls_student TO lt_student.

ls_student-studentinfo ='Academic year -I'.
APPEND ls_student TO lt_student.

WHEN OTHERS.

ls_student-studentinfo = 'Article – YES'.
APPEND ls_student TO lt_student.

ls_student-studentinfo = 'Exam – 3'.
APPEND ls_student TO lt_student.

ls_student-studentinfo = 'Academic year -IV'.
APPEND ls_student TO lt_student.

ENDCASE.

node->bind_table( lt_student ).

ENDMETHOD.

 

 

결과

 

/wp-content/uploads/2015/02/8_642847.jpg

 

 

이글은 아래 링크의 원본 글에 대한 한글 번역 입니다
https://blogs.sap.com/2015/02/11/webdynpro-tree-ui/

이글은 아래 링크의 원본 글에 대한 한글 번역 입니다
https://blogs.sap.com/2015/04/03/calling-tcode-from-web-dynpro-abap-and-passing-the-values-to-it/

 

Calling Tcode from Web Dynpro ABAP and passing the values to it.

April 3, 2015 

이 문서는 웹딘프로아밥에서 파라미터를 전달하며 티코드를 호출하는 방법에 대해서 설명하고 있습니다.

 

예제를 통해서 판매 오더 변경 티코드 VA02를 호출하겠습니다. 웹딘프로아밥 어플리케이션에서 판매 오더 번호를 가져와서 파라미터로 넘깁니다. 그리고 VA02 티코드의 초기화면을 건너띄고 변경화면으로 직접 이동하도록 합니다.

 

  • 웹딘프로 컴포넌트를 생성합니다.
  • 메인 뷰에서 판매 오더 번호를 입력할 입력 필드를 하나 만들고 티코드를 호출할 버튼을 하나 만듭니다.
  • 판매 오더 번호를 넘겨서 티코드를 호출할 버튼에 이벤트를 만듭니다.Untitled.png
  • 버튼 이벤트에 아래 코드를 입력합니다:

Untitled.png

METHOD onactionon_edit .

DATA lo_el_context            TYPE REF TO if_wd_context_element.
DATA ls_context                TYPE               wd_this->element_context.
DATA lv_vbeln                   LIKE                ls_context–vbeln.

DATA lo_window_manager TYPE REF TO if_wd_window_manager.
DATA lo_api_component    TYPE REF TO if_wd_component.
DATA lo_window               TYPE REF TO if_wd_window.

DATA lv_url                       TYPE        string.
DATA lv_host                    TYPE        string.
DATA lv_port                     TYPE string.

lo_el_context = wd_context->get_element(  ).

lo_api_component = wd_comp_controller->wd_get_api( ).
lo_window_manager = lo_api_component->get_window_manager( ).

lo_el_context->get_attribute(
EXPORTING
name =  `VBELN`
IMPORTING
value = lv_vbeln ).

* Call below method to get host and port

CLEAR : lv_host , lv_port.

cl_http_server=>if_http_server~get_location(
IMPORTING
host = lv_host
port = lv_port ).

* Creating URL

CONCATENATE       'http'
'://'
lv_host
':'
lv_port
'/sap/bc/gui/sap/its/webgui/?sap-client=&~transaction=*VA02%20VBAK-VBELN='
lv_vbeln
';DYNP_OKCODE=/00'
INTO lv_url.

*  calling the url which we created above as a popup

lo_window_manager->create_external_window(
EXPORTING
url = lv_url
RECEIVING
window = lo_window ).

lo_window->open( ).

ENDMETHOD.

 

 

  • 실행하기 위해 웹딘프로아밥 어플리케이션을 만듭니다. 지금까지 개발한 것을 모두 활성화 시킨후 어플리케이션을 실행합니다. 판매 오더 번호를 입력하고 edit 버튼을 누르면 판매 오더 변경 화면이 웹브라우저 새창으로 뜹니다. 판매 오더 번호가 파라미터로 전달되고 초기화면은 건너띄고 변경화면으로 이동하였습니다.

Untitled.png

Untitled.png

 

– Gowtham

 

번역자의 추가설명:
web GUI 라고 부르는 SAP GUI for HTML 을 실행하는 것입니다.
URL 주소는 /sap/bc/gui/sap/its/webgui 입니다.
URL 파라미터로 transaction=*VA02 식으로 *티코드를 입력하는 방식입니다.
뒤에 VBAK-VBELN 이 부분은 VA02 티코드에서 화면필드 이름이고 F1 기술정보로 찾을 수 있습니다. (또는 BDC 레코딩을 해도 알 수 있습니다.)
다른 티코드도 이런식으로 화면필드를 알면 값을 전달 할 수 있습니다.

 

이글은 아래 링크의 원본 글에 대한 한글 번역 입니다
https://blogs.sap.com/2015/04/03/calling-tcode-from-web-dynpro-abap-and-passing-the-values-to-it/

 

이글은 아래 링크의 원본 글에 대한 한글 번역 입니다
https://www.sapnuts.com/courses/core-abap/badi-sap/real-time-of-using-badi.html

 

 

Real time example of using BADI in SAP

 

SAP 벤더 마스터(XK01) BADI 예제, XK01용 BADI 구현

 

 
요구사항: 벤더가 독일인데 지역이 비어있으면 에러 메시지를 출력합니다.

요구사항 분석

SAP에서는 티코드 XK01로 벤더를 생성합니다. 생성된 벤더는 LFA1 (벤더 마스터 테이블)에 저장 됩니다. XK01로 벤더를 생성할때 (그리고 XK02로 벤더를 변경할때도) 로직을 추가하여 지역이 올바르게 입력되었는지 검사해야 합니다. 그러기 위해서 BADI를 사용하겠습니다.

XK01용 BADI를 구현하기 위해서, 다음 단계를 따라야 합니다.

단계1: BADI를 찾습니다.

단계2: 적절한 BADI를 선택합니다.

단계3: BADI를 구현합니다.

단계4: BADI를 테스트 합니다.

 

XK01/XK02용 BADI를 찾아봅시다.

BADI 구현을 위한 첫 단계는 먼저 BADI를 찾는 것입니다.

티코드 SE24로 이동하여 CL_EXITHANDLER 클래스의 GET_INSTANCE 메소드에 브레이크포인트를 겁니다.

LFA1 테이블에서 벤더 넘버를 하나 구해두고 티코드 XK02로 가서 벤더 넘버를 입력합니다.

Implementing BADI for XK01

엔터키를 눌러 다음 화면으로 이동합니다. 적당히 값을 입력하고 저장 버튼을 누릅니다(또는 컨트롤 S).

BADI for XK01

브레이크포인트에 멈추고 디버거가 실행됩니다. BADI 이름을 모두 적어 둡니다.

BADI for Vendor in SAP

아래 처럼 BADI 이름을 다 적었습니다.

  • VENDOR_FIELDSTATUS
  • GOS_SRV_SELECT
  • ADDRESS_CHECK
  • ADDR_TXJCD_CHECK
  • CVI_CALL_BTE
  • ADDRESS_UPDATE
  • VENDOR_ADD_DATA

 

적절한 BADI를 선택하고 검증해 봅시다.

적절한 BADI를 찾기 위해서, 티코드 SE18로 이동하여 BADI 이름을 입력하고 살펴봅니다.

내역에 명시된 설명을 바탕으로 추측합니다. 인터페이스에 메소드 파라미터도 참고합니다. 이런식으로 몇몇 BADI를 선택할 수 있습니다.

요구사항에 맞는 적절한 BADI로 VENDOR_ADD_DATA를 선택하겠습니다.

 

BADI를 구현해 봅시다.

BADI는 객체 지향 프로그래밍(OOP) 방법을 사용합니다. BADI 자체는 인터페이스에 지나지 않습니다. BADI를 구현하는 것은 즉, 그 인터페이스를 구현하는 것입니다.

BADI를 구현하기 위해서 티코드 SE19(BADI Builder)로 이동하여 BADI 이름을 입력하고 create implementation 버튼을 누릅니다.

Implement BADI for XK01

팝업창이 나타나면 implementaion name을 입력합니다. 예: ZVENDOR_ADD_DATA

Vendor BADI implementation

내역을 입력하고, 메소드 목록에서 적절한 메소드를 선택하여 더블클릭합니다.

 

여기서는 CHECK_ALL_DATA 메소드가 점검 로직을 넣기에 적절해 보입니다.

METHOD IF_EX_VENDER_ADD_DATA~CHECK_ALL_DATA.
BREAK-POINT.
ENDMETHOD.

티코드 XK02로 이동하여 벤더 넘버를 입력하고 주소 체크박스에 체크를 합니다. 엔터키를 눌러 주소 화면으로 이동하고 아무거나 변경한 다음 저장합니다. 이제 위 브레이크 포인트에 걸려서 디버거가 뜨는지 확인합니다. 요구사항에 맞는 아주 적절한 구현 위치를 찾은것 같습니다. 테스트로 넣은 브레이크 포인트 구문을 지우고 실제 필요한 아래 코드를 입력합니다.

METHOD IF_EX_VENDER_ADD_DATA~CHECK_ALL_DATA.
IF I_LFA1=LAND1= 'DE' AND I_LFA1-REGIO= ' '.
MESSAGE 'Region is required for German Vendors'  TYPE  'E'.
ENDMETHOD.

저장하고 활성화 합니다.

BADI 구현이 끝났습니다.

 

BADI가 잘 작동하는지 테스트해 봅시다.

BADI를 테스트하기 위해 티코드 XK02로 이동합니다. 벤더 넘버를 입력하고 엔터키를 누릅니다.

국가를 DE로 변경하고 지역은 빈값으로 입력합니다.

 

저장 (컨트롤 S).

 

에러 메시지가 뜹니다.

BADI in SAP

 

BADI를 잘 만든 것으로 확인됩니다.

 

 

이글은 아래 링크의 원본 글에 대한 한글 번역 입니다
https://www.sapnuts.com/courses/core-abap/badi-sap/real-time-of-using-badi.html

WDR_TASK

 

SAP internal로 비공식이지만 유용한 웹딘의 시스템변수(SY)급이예요.
참고: https://help.sap.com/saphelp_nw75/helpdata/en/c4/b3670f72ff42eb8d4a508defd7f7a1/content.htm
여러해 경험으로 봐서는 버전별로 약간의 변화가 있지만 모양을 잘 유지하고 있습니다.

 

가장 흔히 쓰는 구문은 SAP GUI 인지 웹딘프로인지 IF로 분기하는 것입니다.

IF wdr_task=>application_name IS INITIAL.
  " GUI
ELSE.
  " WD
ENDIF.

 

wdr_task=>application_name 자체는 sy-tcode 와 비슷하게 실행중인 웹딘프로아밥 어플리케이션 이름을 알 수 있습니다.

 

메시지 출력시 컴포넌트 컨트롤러를 wdr_task 에서 가져오면, 펑션 내부 처럼 웹딘이 아닌 다른 곳에서도 메시지 출력을 쉽게 할 수 있습니다. wdr_task=>application->component

* get message manager
DATA lo_api_controller TYPE REF TO if_wd_controller.
DATA lo_message_manager TYPE REF TO if_wd_message_manager.
* lo_api_controller ?= io_view_api.
lo_api_controller ?= wdr_task=>application->component.
CALL METHOD lo_api_controller->get_message_manager
  RECEIVING
    message_manager = lo_message_manager.
* report message
CALL METHOD lo_message_manager->report_message
......

 

메시지를 팝업창으로 띄울때는 wdr_task=>application->if_wd_window_manager~create_popup_to_confirm 메소드를 실행하면 됩니다.

 

URL 파라미터를 읽을 때는 wdr_task=>client_window->if_wdr_client_info_object~parameters 에서 가져올 수 있습니다.

 

HTTP 헤더를 읽을 때는 wdr_task=>client_window->if_wdr_client_info_object~header_fields 에서 가져올 수 있습니다.

 

파일다운로드시 사용하는 cl_wd_runtime_services=>attach_file_to_response 내부에서 wdr_task=>client_window->client->attach_file_to_response 를 사용하고 있습니다.

 

컴포넌트 컨트롤러의 컨텍스트는 wdr_task=>application->component->if_wd_context~root_node 로 접근할 수 있습니다.

 

웹딘프로아밥 테마 관련 문서 입니다.

저작권은 SAP 에 있습니다.

 

custom-themes-for-web-dynpro-abap-applications-without-sap-enterprise-portal.pdf

How To Customize the SAP User Interface Using Theme Editor.pdf

How To Edit Web Dynpro Themes.pdf

Portal Integration of Web Dynpro Applications.pdf

 

theme editor 는 단종되어서 더이상 구할 수 없었습니다.

그래서 저는 노트패드++으로 css 수정 작업했습니다. ^^;;

+ Recent posts