UI Element를 자세히 살펴 볼수 있는 몇가지를 방법을 알려드리겠습니다.

1. 데모 프로그램
서버에 접속하여 SE80으로 이동후
웹딘프로 아이디 WDR_TEST_UI_ELEMENTS 를 찾습니다.

application을 실행합니다.

모든 UI Elemet를 한 화면에서 속성 변경해 가며 테스트 할 수 있는 데모 입니다.




2. NET312: UI Development with Web Dynpro for ABAP
정식 교육교재입니다. pdf 파일은 각자 알아서 구하시면 됩니다.


3. WDA UI Elements Reference (공식 도움말 페이지)
링크: http://help.sap.com/saphelp_nw2004s/helpdata/EN/cd/422b035f01914e80251a660e39ab14/frameset.htm




4. WDJ UI Elements Reference (웹딘프로 자바 도움말 페이지이지만 UI는 거의 같기 때문에 참고가 됩니다)
링크: http://help.sap.com/saphelp_nw04/helpdata/en/8f/aa63688343bd40aafc537971aee068/frameset.htm


아래의 예는 MARA-MTART 타입으로 웹딘프로아밥 드랍다운 구성하는 예입니다.

DATA: lo_nd_search_input TYPE REF TO if_wd_context_node,
      lo_node_info TYPE REF TO if_wd_context_node_info,
      ls_shlp_descr TYPE shlp_descr,
      lt_value_set TYPE TABLE OF wdr_context_attr_value,
      ls_value_set TYPE wdr_context_attr_value.

lo_nd_search_input = wd_context->get_child_node( name = wd_this->wdctx_search_input ).
lo_node_info = lo_nd_search_input->get_node_info( ).

CLEAR: ls_shlp_descr, lt_value_set.
CALL FUNCTION 'DPWTY_SEARCH_HELP'
  EXPORTING
    iv_db_tabname   = 'MARA'
    iv_db_fieldname = 'MTART'
    is_shlp         = ls_shlp_descr
    iv_drop_down    = 'X'
  IMPORTING
    et_values       = lt_value_set.

CLEAR: ls_value_set.
INSERT ls_value_set INTO lt_value_set INDEX 1.

lo_node_info->set_attribute_value_set(
   EXPORTING
     name      = 'MTART'
     value_set = lt_value_set
 ).


 

타입마다 다른 로직이 아니라서 좋은 방법입니다.


Web Dynpro ABAP Quick Design guidelines

This Page is to discuss WD4A Design guidelines which can be used by beginner WD4A developer as a checklist to design quality WD4A applications. Please feel free to Add/Correct/Comment to below WD4A Design guidelines and help novice WD4A developer like me in designing quality WD4A applications.

Performance Optimization:

  • Use Range Supply Function to load part of data into context node for heavy table performance optimization.
  • Consider Delta Rendering Optimization while designing WD4A component.
  • Avoid complex and nested Layouts because it has a big impact on browser or client rendering performance.
  • Prefer the Row Layout to the Grid or Matrix Layout if horizontal alignment is not needed for better performance.
  • Number of visible rows in Table or ALV has an impact on performance.
  • Avoid writing much processing in WDDOMODIFYVIEW() method like initialization and all.
  • Don't use context of all WD4A component data. Use context for Screen In/Out data only.
  • Consider the Price Tag of UI elements when designing Web Dynpro Component.

UI Design Practice:

  • Use Flash Islands as add-on for Web DynPro and avoid using more than 3 Flash Islands on the screen.
  • Avoid Scrolling and make all information visible at a glance.
  • Prefer the Matrix Layout to the Grid Layout for Ease of use and consistent layout.
  • Avoid usage of TransparentContainers inside container UI elements.
  • Don't misuse Web Dynpro UI elements by setting improper property values.
  • Exchange default root UI element container with other container UI element to minimize container nesting levels.
  • Never Use Trays and Panel on same screen to avoid confusion for end users.
  • Never use a Section header without associating it with a TransparentContainer.
  • Use Access and Hot Keys for better accessibility.
  • Use Floorplan Manager for consistency across applications.
  • Componentization of Web DynPro component for reusability.

Better Development efficiency:

  • Use Floorplan Manager for the creation of new Web Dynpro ABAP applications to increase development efficiency.
  • Use Developer Defined Reusable Templates.

Miscellaneous:

  • Add URL Parameter "sap-wd-stableids=X" to achieve stable HTML IDs for Automated Tests.
Where-used list는 프로그램 분석할 때 참 유용한 기능입니다.
하지만 이 기능이 항상 완벽하지는 않습니다.

예를들어 어떤 스탠다드 함수를 대체하는 함수를 만들기 위해 어디서 사용되고 있는지 찾으려고 합니다.
Where-used list 를 돌려 보면 4개가 나왔다고 합시다. 하지만 이 4개가 전부라고 믿으면 안 됩니다.

전체 Where-used list를 모두 보관하고 있다면 용량이 너무 너무 크기 때문에
SAP에서는 기본적으로 아주 일부분만 보관하고 있습니다.
어떤식으로 활용하는지 분석하는 참고용으로 쓰라는 거죠.
전체를 다 만들면 DB에 10기가 정도 용량이 추가로 필요하다고 하네요.
(참고)

SAP Where-used list of SAP objects - run SAPRSEUB (note 28022)

 - [ 이 페이지 번역하기 ]



그래서 수동으로 Where-used list를 더 생성할 수 있도록 리포트 프로그램을 제공합니다.
(참고)
http://blog.daum.net/iamkjy/5024481

SAPRSEUB : 전체 생성. BC 허락 받고 백그라운드로 돌리세요. 2일 정도 걸린다고 합니다.
SAPRSEUC : 커스텀 영역만 생성.
SAPRSEUI : 개별 지정하여 생성.


ps. 업그레이드 프로젝트 후에는 개발서버에 전체 생성 해주는게 좋습니다. (운영은 하지 마세요)
 
관련해서 장편의 글을 쓰려고 생각만 하다가 귀차니즘에 쓰지 못하고 있다가,
내가 쓸말을 다 써놓은 곳을 발견하여 소개해 드립니다.

출처: 몽돌잉 님 블로그
http://zmania.tistory.com/14

ps.
1. 폰트 나눔고딕코딩 (크기12) 강추 드립니다.
2. ABAP 7.02 버전 부터는 code assist 가 추가되었다는 반가운 소식입니다. 잘 쓰고 있습니다 ㅋ


웹딘프로 메시지 처리는 MESSAGE 문법을 쓰지 않기 때문에 사용처 리스트에 나타나지 않는다.
하지만 사용처 리스트로 찾게 하려면 이렇게 실행되지 않는 IF 문으로 감싸주면 된다.
IF 1 = 2.

MESSAGE ....
ENDIF.
아래는 사용 예.
           IF 1 = 2.
             MESSAGE i210(usmd2) WITH ld_string.
           ELSE.
             CLEAR: lt_message, ls_message.
             ls_message-msgid = 'USMD2'.
             ls_message-msgty = 'I'.
             ls_message-msgno = '210'.
             ls_message-msgv1 = ld_string.
             INSERT ls_message INTO TABLE lt_message.
             CALL METHOD do_service->show_message( lt_message ).
           ENDIF.

1. 애플리케이션 컨피그 컴포넌트 (appCC) 찾기
Component Configuration 화면에서
Change -> Global Settings를 선택하면 팝업창에서 컴포넌트를 찾을 수 있다.

2. appCC 컴포넌트의 OVERRIDE_EVENT_OIF 메소드

     CASE lo_fpm_event->mv_event_id.
     WHEN if_fpm_constants=>gc_event-start.

      lo_fpm = cl_fpm_factory=>get_instance( ).

*     파라미터 확인
      CALL METHOD lo_fpm->mo_app_parameter->get_value
         EXPORTING
           iv_key   = 'IS_PARAM1'
         IMPORTING
           ev_value = lv_param1.

*     조건에 따라 ... 초기 화면 스킵
        IF lv_param1 IS NOT INITIAL.
         lo_fpm->raise_event_by_id(
           if_fpm_constants=>gc_event-leave_initial_screen ).
       ENDIF.

SAP NetWeaver Business Client (NWBC)

는 웹으로 통합 환경을 제공하여 SAP GUI를 대체하려는 새로운 기술입니다.

이 NWBC는 SAP GUI 처럼 컴퓨터에 프로그램을 설치하여 사용하는 NWBC for Desktop 와
프로그램 설치 없이 웹브라이저로 접속하는 NWBC for HTML 두가지 방식이 있습니다.

이중 NWBC for HTML 은 특정 URL을 가지고 있어서 접속을 할 수 있는데,
SAP GUI에서 이 URL을 생성하여 NWBC를 실행하는 티코드가 NWBC 입니다.
이때 실행되는 코드가 이렇습니다.

코드
Class Name            CL_NWBC
Method                SE93_LAUNCH

METHOD se93_launch.

* In transaction SE93 this method is tied to a transaction called NWBC.

* Get NWBC URL
  DATA: url(1024)       TYPE c,
        nwbc_exception  TYPE REF TO cx_nwbc.

  TRY.
      url = cl_nwbc=>url_base(  ).

      DATA: url_suffix   TYPE icfredurl,
            icf_state    TYPE icfactive.
      cl_icf_tree=>if_icf_tree~service_from_url(
        EXPORTING url             = '/sap/bc/nwbc/nwbc_launch' "#EC NOTEXT
                  hostnumber      = 0
                  authority_check = space
        IMPORTING icfactive       = icf_state
                  urlsuffix       = url_suffix ).
      IF NOT ( icf_state IS INITIAL OR url_suffix IS NOT INITIAL ).
        CONCATENATE url '~launch/' INTO url.
      ENDIF.
    CATCH cx_nwbc INTO nwbc_exception.
      DATA: err_txt TYPE string.
      err_txt = nwbc_exception->get_text( ).
      MESSAGE err_txt TYPE 'E'.
      RETURN.
  ENDTRY.

* Add sap-language and sap-client to URL to give start page same settings as SAPGUI is running in
  DATA: lang_iso TYPE laiso.
  CALL FUNCTION 'LANGUAGE_CODE_SAP_TO_ISO'
    EXPORTING
      sap_code = sy-langu
    IMPORTING
      iso_code = lang_iso.

  CONCATENATE url `?` if_http_form_fields_sap=>sap_client   `=` sy-mandt
                  `&` if_http_form_fields_sap=>sap_language `=` lang_iso
         INTO url.

* Start URL in browser.
  url_launch( url ).

*!!! code below will close currently open additional SAP GUI sesion
* after opening of web browser, if this is not a last session open for
* this system

*** !!!! The code was commented, because it was a logic change for transactio NWBC
* and not all users can accept it

** close current ABAP session, after starting URL
*  DATA: lv_act_sessions TYPE i.
*  CALL FUNCTION 'TH_USER_INFO'
*    EXPORTING
*      client              = sy-mandt
*      user                = sy-uname
*    IMPORTING
*      act_sessions        = lv_act_sessions.
*
*  " do not close last session
*  IF lv_act_sessions GT 1.
*    CALL FUNCTION 'TH_DELETE_MODE'.
*  ENDIF.

ENDMETHOD.

Web Dynpro Application을 열고 Parameters 탭에 가면 여러가지 파라미터를 입력 할 수 있습니다.

여기서는
 테이블(ALV포함)의 새로 스크롤바 또는 하단에 1/30 으로 항목번호를 표시하고 이동하는 방식을 선택할 수 있고,
 마우스 오른쪽 버튼 눌러서 나오는 사용자 세팅을 허용할 것인지를 선택할 수 있고,
 css 테마는 어떤것을 사용할지 지정할 수 있고,
등등 여러가지 어플리케이션 실행에 관련된 세팅을 할 수 있습니다.

그리고 이러한 파라미터를 서버(클라이언트별) 전체 세팅으로 기본값을 지정할 수 있는 프로그램이 있습니다.
WD_GLOBAL_SETTING <-- 웹딘프로 어플리케이션 이름 입니다.

예를 들어 '사용자 세팅'을 모든 웹딘프로 어플리케이션에 대해서 사용 못하게 하려면 이 프로그램을 실행하고
Do Not Allow Personalization by the User: 를 체크하고 저장하면 끝입니다.
하지만 이미 사용자 세팅으로 저장된 내용은 계속 적용이 되고 있으므로 이것을 삭제하려면
WD_ANALYZE_CONFIG_USER 를 실행하여 삭제하여야 합니다.


파라미터에 대해 자세한 내용은 아래 SAP HELP를 참고하세요.
http://help.sap.com/saphelp_nw70/helpdata/en/7b/fb57412df8091de10000000a155106/frameset.htm
7.0을 기준으로 파라미터를 정리해 보았습니다. 버전에 따라 내용이 다를 수 있습니다.
 
WDACCESSIBILITY
접근성 사용 여부
참고: Accessibility parameters.
입력 가능 값: ‘X’, ‘ ‘
WDCONFIGURATIONID
사용할 Configuration 이름 입력
WDDELTARENDERING
델타 렌더링 사용 여부
참고: Delta Rendering. 변경된 뷰만 다시 렌더링 하도록 하여 성능 향상에 도움이 됨.
입력 가능 값: ‘ON’ , ‘OFF’(기본값)
델타 렌더링 사용여부를 설정하는 같은 효과를 가지는 다른 방법으로는 sap‑wd‑deltaRendering URL 파라미터로 입력하는 방법이 있다.
WDDISABLEUSERPERSONALIZATION
개인화 (사용자 세팅 > 숨기기) 불가 여부
참고: Personalization
입력 가능 값: ‘X’, ‘ ‘
WDDISPLAYSPLASHSCREEN
웹딘 초기 로딩시 시작로고 표시 여부
입력 가능 값: ‘X’, ‘ ‘
WDFORCEEXTERNALSTYLESHEET
포털과 연동시 자동으로 포털과 웹딘의 CSS 버전을 검사하여 더 최신버전을 사용하는 기본동작을 무시하도록 할지 여부
입력 가능 값: ‘X’, ‘ ‘
WDHIDEMOREFIELDHELPASDEFAULT
웹딘 UI 엘리먼트의 explanation 프로퍼티 표시 숨김 여부
입력 가능 값: ‘X’, ‘ ‘
WDPROTECTEDAPPLICATION
도메인 릴렉싱 공격으로부터 보호 여부
입력 가능 값: ‘X’, ‘ ‘
‘X’세팅하면 포털과 통합 연동하는 기능이 전혀 작동하지 않음. 예를 들어 포털 이벤트가 작동하지 않음
WDSHAREDREPOSITORY
어플리케이션 메타데이터를 shared memory 영역으로 로드 할지 여부.
입력 가능 값: ‘X’, ‘ ‘
‘X’세팅하면 성능 향상이 있지만, 메모리 사용량이 늘어남
WDTABLENAVIGATION
테이블이나 ALV의 스크롤 방식을 지정
입력 가능 값
‘ ‘ : 기본값, 테이블 아래에 페이지 방식
‘PAGINATOR’ : 테이블 아래에 페이지 방식
SCROLLBAR‘ : 테이블 오른쪽에 스크롤 바
WDTHEMEROOT
포털의 테마를 사용하지 않고 별도 테마를 지정
입력 가능 값
sap_chrome
sap_hcb
sap_highcont
sap_standard
sap_tradeshow (웹딘의 기본 사용 테마)


+ Recent posts