메뉴 건너뛰기

SAP 한국 커뮤니티



ABAP [Dictionary] Search Help Coding

문바이 2012.04.02 22:21 조회 수 : 12937 추천:3

누구나 알고있는 내용을 정리해 보았습니다.

 

Search Help개체를 사용하지 않고 프로그램을 구성하는 방법.


1) Selection-Screen을 구상한후 명령어를 통해 해당 화면을 구성한다. 
2) Selection-Screen의 구성원중 F4(Input Help)를 구성할 항목을 선택한 후 Event 처리 루틴을 삽입한다.
 사용자가 F4(Input Help/ Possible Entry)를 누른경우를 Event처리한다.

At SELECTION-SCREEN On VALUE-REQUEST FOR s_connid-low.
   PERFORM SS_VALUE_REQUEST_S_CONNID.

 

  문법설명(Type-1 Event처리에 대한 이해가 필요합니다. 영문법으로 나누어 봅시다)

   At SELECTION-SCREEN : At (Selection-Screen)  => Selection Screen에서
   On Value-Request : On ( Value-Request) => Value-Request(값의 요청, Input Help, F4, Possible Entry)에 대해서.
   FOR s_connid : For( s_connid) => 개체 s_connid-low 를 위해서.
   Perform ss_value_request_s_connid. 를 수행해라.


3) Perform SS_VALUE_REQUEST_S_CONNID를 구성한다.
   가) 현시점에서의 Selection-Screen에 있는 화면 Field의 내용을 읽어들인다.
       CALL FUNCTION 'DYNP_VALUES_READ'
         EXPORTING
           DYNAME                               = sy-cprog
           DYNUMB                               = sy-dynnr
           TRANSLATE_TO_UPPER         = 'X'
           REQUEST                              = 'A'
         TABLES
           DYNPFIELDS                           = LT_DYREAD .
    
       READ TABLE LT_DYREAD WITH KEY fieldname = 'S_CARRID-LOW'.
       lt_carrid = LT_DYREAD-fieldvalue.            
   나) 앞선 데이타를 기준으로 Data Select를 수행한다.
       if lv_s1 is INITIAL.
         lv_s1 = '%'.
       endif.
       SELECT CONNID FLDATE
           INTO CORRESPONDING FIELDS OF TABLE lt_v1
         FROM SFLIGHT
       WHERE CARRID like LV_S1.            
   다-1) 화면에 표시할수 방법(1)

     [VALUE_ORG       = 'S'  ] / 장점 : 쉽고 빠르게 적용할수 있다 / 단점 : Return값이 1개이고, Field이름을 정의가 안된다
       CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
         EXPORTING
           RETFIELD           = 'CD'                     Value_tab 의 Internal Table에서 사용자가 선택후 되돌려줄 Field Name.
           DYNPPROG        = SY-REPID
           DYNPNR             = SY-DYNNR
           DYNPROFIELD    = 'S_PROD3'           RETFIELD 에 의해 선택된 값이 화면상에 들어올 개체이름. -Low/-High가 의미가 없음
           WINDOW_TITLE   = '제품그룹3 선택'     PopUp 제목
           VALUE_ORG       = 'S'                      Return종류 C [Cell], S[Structure]
         TABLES
           VALUE_TAB       = LT_F4                  화면에 표시될 itab (내 마음대로 정의한 itab사용가능)
           RETURN_TAB      = LT_F4_RETURN    POP후 선택된 값이 들어올 테이블.
         EXCEPTIONS
           PARAMETER_ERROR = 1
           NO_VALUES_FOUND = 2
           OTHERS          = 3.            
   다-2) 화면에 표시할수 방법(2)

    [VALUE_ORG       = 'C'  ] / 장점 : Return값이 n개 이상 이고/ Field이름을 정의가 된다 / 단점 : 다소복잡하다
        화면에 Display되어 있는 데이타를 읽어들인다.
           CALL FUNCTION 'DYNP_VALUES_READ'
             EXPORTING
               DYNAME                               = sy-cprog
               DYNUMB                               = sy-dynnr
               TRANSLATE_TO_UPPER                   = 'X'
               REQUEST                              = 'A'
             TABLES
               DYNPFIELDS                           = LT_DYREAD.
          
            READ TABLE LT_DYREAD WITH KEY FIELDNAME = 'P_USER01'.
            IF not lt_dyread-fieldvalue is INITIAL.
              lv_carrid = lt_dyread-fieldvalue.
            ELSE.
              lv_carrid = '%'.
            ENDIF.            

        화면에 읽어온 데이타를 바탕으로 화면에 뿌려줄 데이타를 가공한다.
            DATA : BEGIN OF lt_popup OCCURS 0,  팝업의 데이타를 가지고 있을 테이블
                             datas(20) type c,
                       END OF lt_popup.

 

        팝업으로  뿌려줄 데이타를 가공한다.
           SELECT *
             FROM SFLIGHT
             INTO CORRESPONDING FIELDS OF TABLE lt_sflight
            WHERE CARRID LIKE lv_carrid.
       
           데이타를 가공한다. (열로 나열한다)
           LOOP AT lt_sflight.
             lt_popup-datas = lt_sflight-carrid.
             append lt_popup.
             lt_popup-datas = lt_sflight-connid.
             append lt_popup.
             lt_popup-datas = lt_sflight-fldate.
             append lt_popup.
           ENDLOOP.     

        
        화면에 뿌려질 Field Cataloge를 작성한다.
            DATA : lt_field like STANDARD TABLE OF DFIES      INITIAL SIZE 0 with HEADER LINE.

             화면에 표시될 Field정보를 가공한다.
              CALL FUNCTION 'DDIF_FIELDINFO_GET' 테이블 명과 field명을 제공하면 기본정보를 가져온다
                EXPORTING
                  TABNAME    = 'SFLIGHT'
                  FIELDNAME  = 'CARRID'
                  LFIELDNAME = 'CARRID'
              IMPORTING
                DFIES_WA = lt_field.
         
              LT_FIELD-SCRTEXT_S = '내맘대로001'.
              LT_FIELD-SCRTEXT_M = '내맘대로001'.
              LT_FIELD-SCRTEXT_L = '내맘대로001'.
              LT_FIELD-REPTEXT   = '내맘대로001'.
              APPEND LT_FIELD.     

        
        Return값을 늘리기 위해 Mapping 용 테이블에 데이타를 넣는다.
             DATA : lt_map   like STANDARD TABLE OF DSELC      INITIAL SIZE 0 with HEADER LINE.

             사용자가 데이타를 선택한후 화면필드와 매치시킬 mapping을 작성한다.
             lt_map-fldname   = 'CARRID'.
             lt_map-dyfldname = 'P_USER01'.
             append lt_map.
         
             lt_map-fldname   = 'CONNID'.
             lt_map-dyfldname = 'P_USER02'.
             append lt_map.            


        화면에 Popup을 올린다.
             CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
               EXPORTING
                 RETFIELD               = 'FLDATE'
                 WINDOW_TITLE           = 'SFLIGHT 필터링된내용' 팝업제목
               TABLES
                 VALUE_TAB              =  lt_popup
                 FIELD_TAB              =  lt_field
                 RETURN_TAB             =  lt_rtn
                 DYNPFLD_MAPPING        =  lt_map

             
        가져온 데이타를 화면에 넣어준다.
             DATA : LT_UPDATE LIKE DYNPREAD OCCURS 0 WITH HEADER LINE. Dynp_values_read/화면데이타 쓰기용

             lt_update-FIELDNAME   = 'P_USER01'.
             READ TABLE lt_rtn with key RETFIELD = lt_update-fieldname.
             IF SY-SUBRC = 0.
               lt_update-FIELDVALUE  = lt_rtn-fieldval.
               APPEND lt_update.
             endif.
        
             lt_update-FIELDNAME   = 'P_USER02'.
             READ TABLE lt_rtn with key RETFIELD = lt_update-fieldname.
             IF SY-SUBRC = 0.
               lt_update-FIELDVALUE  = lt_rtn-fieldval.
               APPEND lt_update.
             endif.
        
             화면에 데이타를 기록한다.
             CALL FUNCTION 'DYNP_VALUES_UPDATE'
               EXPORTING
                 DYNAME                     = SY-CPROG
                 DYNUMB                     = SY-DYNNR
               TABLES
                 DYNPFIELDS                 = lt_update.            

 

번호 제목 글쓴이 날짜 조회 수
1264 DMS를 위한 BAPIS 문서 파일 [7] file 뷰티마인드 2010.11.10 17787
1263 sap interface 소개자료 [31] file yuchippong 2012.05.10 17759
1262 ABAP Statement Overview(명령어, 구문 정리) [21] sapjoy 2007.01.22 17635
1261 abap 초보탈출 교육교재 [51] file rednut79 2008.04.25 17500
1260 SAP MSSQL HINT (notes) [16] file shiny 2013.03.07 17473
1259 Web Page에서 RFC 호출시 BDC로 생성된 영업오더생성(VA01) 처리시 문제점 발생 윤뚱 2010.10.13 17438
1258 운영에서 수정권한이 없는 SE11에서 테이블 유지보수 [17] file Giant 2012.01.18 17318
1257 <img src=d.gif>SAP screen에 그림파일 조회하기(2)[추천:보나] [20] file 춘풍 2011.03.11 17299
1256 (10/4_Onepaper) Tip. 삭제된 프로그램 복구 [9] file 유리선율 2010.10.05 17295
1255 SLIS TEST DATA 만들기 [5] file bongbong 2012.04.17 17274
1254 <img src=d.gif>element에대한 Multiple 사용처테이블 조회 프로그램만들기[추천:보나] [20] file 양키 2010.07.06 17252
1253 gdb 뷰어 참고하세요 [8] file 위대한코끼리 2011.01.15 17235
1252 user-exit 자료 입니다. [7] file SAP아가씨 2010.12.08 17230
1251 MM 기본 교재.ppt [38] file 육억 2010.11.24 17224
1250 [onepaper] 참고자료 Archiving 세팅에 필요한 파일소스입니다. [5] file 원니컴 2011.03.22 17209
1249 abap 교재 요약 워드 파일입니다... [45] file 준맘 2012.08.07 17194
1248 FI 용어집 [28] file 플래툰K 2012.01.18 17178
1247 SAP 주요 테이블 및 용어 [32] file 스타맨 2012.11.30 17155
1246 Creating your own dynamic patterns in ABAP Editor [10] file sapjoy 2007.01.31 17140
1245 SAP/ABAP MEMORY [15] file 열공아밥 2010.07.15 17118