Do.

[Source] 하나의 OVP로 여러 필드 관리하기 본문

SAP/WD4A

[Source] 하나의 OVP로 여러 필드 관리하기

성공보다는 가치를.. 2014. 9. 25. 17:42
728x90

WD4A 개발을 하다보면 하나의 OVS를 여러개 관리해야 하는 경우가 많은데 

그때마다 하나씩 만들어주기가 여간 번거로운게 아니다. 


이럴 때 하나의 OVS로 여러 필드를 관리하도록 간단하게 짜보았다. 


[ Result ]


[ Component에서 OVS 이름 정의 및 I/F ] 


[ OVS를 처리할 VIew에서 해당 Component 선언 ]


[ OVS Method 생성 ]


[ 예제소스 ]

  DEFINE _set_output.

    assign ovs_callback_object->selection->to &1.
    if &1 is assigned.
      ovs_callback_object->context_element->set_static_attributes(
                             static_attributes =  &1 ).
    endif.

  END-OF-DEFINITION.

  DATA:
    ls_parameters TYPE wdr_event_parameter.

* ID값 읽어오기
  FIELD-SYMBOLS <lv_id> TYPE string.
  READ TABLE wdevent->parameters INTO ls_parameters WITH KEY name 'OVS_CONTEXT_ATTRIBUTE'.
  ASSIGN ls_parameters-value->TO <lv_id> CASTING.

*1. OVS에 보여질 Field 선언
  TYPES:
      BEGIN OF lty_matnr,
        matnr TYPE matnr,
        maktx TYPE maktx,
      END OF lty_matnr.

  TYPES:
      BEGIN OF lty_werks,
        werks TYPE werks_d,
        name1 TYPE name1,
      END OF lty_werks.

  TYPES:
      BEGIN OF lty_stlan,
        stlan TYPE t416t-stlan,
        antxt TYPE t416t-antxt,
      END OF lty_stlan.

  DATA:
    lt_matnr TYPE STANDARD TABLE OF lty_matnr,
    lt_werks TYPE STANDARD TABLE OF lty_werks,
    lt_stlan TYPE STANDARD TABLE OF lty_stlan.

  DATA:
    ls_text          TYPE wdr_name_value,
    lt_label_texts   TYPE wdr_name_value_list,
    lt_column_texts  TYPE wdr_name_value_list.

  FIELD-SYMBOLS :
       <matnr> TYPE lty_matnr,
       <werks> TYPE lty_werks,
       <stlan> TYPE lty_stlan.

* 2.Get Data & Output Table Setting
  CASE ovs_callback_object->phase_indicator.
    WHEN if_wd_ovs=>co_phase_0.  "configuration phase, may be omitted
    WHEN if_wd_ovs=>co_phase_1.  "set search structure and defaults
    WHEN if_wd_ovs=>co_phase_2.

      CASE <lv_id>.
        WHEN 'MATNR'.
          SELECT
            matnr
            maktx
            FROM makt
            INTO CORRESPONDING FIELDS OF TABLE lt_matnr
              WHERE spras sy-langu.

          ovs_callback_object->set_output_tableoutput lt_matnr ).

        WHEN 'WERKS'.
          SELECT DISTINCT
            werks
            name1
            FROM t001w
            INTO CORRESPONDING FIELDS OF TABLE lt_werks.

          ovs_callback_object->set_output_tableoutput lt_werks ).
        WHEN OTHERS.
          SELECT DISTINCT
            stlan
            antxt
            FROM t416t
            INTO CORRESPONDING FIELDS OF TABLE lt_stlan
              WHERE spras sy-langu.

          ovs_callback_object->set_output_tableoutput lt_stlan ).
      ENDCASE.

*    2-2 Output Table Setting
*      ovs_callback_object->set_output_table( output = lt_select_list ).
    WHEN if_wd_ovs=>co_phase_3.
*   apply result
      CASE <lv_id>.
        WHEN 'MATNR'.
          _set_output <matnr>.
        WHEN 'WERKS'.
          _set_output <werks>.
        WHEN OTHERS.
          _set_output <stlan>.
      ENDCASE.
  ENDCASE.


[ 처리할 VIew에서 사용하는 OVS Usage는 같은 Usage로 선언해준다 ]




728x90