Skip to end of metadata
Go to start of metadata

ABAP Objects - Interface in Local Class - A Real Time Example

Link to Content's target Space :

http://wiki.sdn.sap.com/wiki/display/ABAP/ABAP+Objects+Examples+Beginner.

Applies to:

Sample Program Developed in ECC 5.0

Summary

This Post narrates the Concept of Interface & Local Class and its use in Object Oriented ABAP Program.

Author(s):  Vinod Kumar T

   
Company:     NIIT Technologies Limited
Created on:    05.01.2011
Author(s) Bio
Vinod Kumar is an ABAP consultant working with NIIT Technologies Limited.

Table of Contents

Scenario & Processing Logic

Sample program is used to extract the Long text associated with Purchase Order & Sales Order documents.  Two Local classes are defined based on the Object types, one for Sales order and another for Purchase Order.  One interface is defined which gives the information of Text ids attached to the Object type & Long text data of the Object Type/ Text ID combination.  This object is used in both the classes for required data.

  •  Define interface LIF_LONGTEXT with methods GET_TEXTID (for Text id list related to the Object type) and GET_TEXT (for Long text data).
    • Declare Local class LCL_SO_HEADER for Sales order information.
      • Constructor method for SO header data
      • Implement LIF_LONGTEXT~GET_TEXTID & LIF_LONGTEXT~GET_TEXT for long text data.
      • Implement method GET_TEXTID_DOC to get Order document type specific Text ID Data
    • Declare Local class LCL_PO_HEADER for Purchase Order Information.
      • Constructor Methof for PO header data
      • Implement LIF_LONGTEXT~GET_TEXTID & LIF_LONGTEXT~GET_TEXT for long text data.

Program Code Lines


*&---------------------------------------------------------------------*
*& Report  ZVK_OO_INTERFACES1
*&---------------------------------------------------------------------*
REPORT  zvk_oo_interfaces.
TYPE-POOLS : abap.
*----------------------------------------------------------------------*
*       INTERFACE longtext
*----------------------------------------------------------------------*
* Interface for Long text for Transaction
*----------------------------------------------------------------------*
INTERFACE lif_longtext.
  TYPES : BEGIN OF ty_textid,
           tdspras  TYPE spras,
           tdobject TYPE tdobject,
           tdid     TYPE tdid,
           tdtext   TYPE tdtext,
        END OF ty_textid.

  DATA :  lt_textid   TYPE STANDARD TABLE OF ty_textid,
          ls_textid   TYPE ty_textid.

** Methods for Text ID information & Long text data **
  METHODS : get_textid,
            get_text       IMPORTING value(text_object) TYPE tdobject
                                     value(text_id) TYPE tdid
                           EXPORTING tlines TYPE tline_t.
ENDINTERFACE.                      "longtext

*----------------------------------------------------------------------*
*       CLASS lcl_so_header DEFINITION
*----------------------------------------------------------------------*
* Class Definition for Sales Order Header **
*----------------------------------------------------------------------*
CLASS lcl_so_header DEFINITION.
  PUBLIC SECTION.

    DATA :  ls_vbak TYPE vbak,
            lt_ttxern TYPE STANDARD TABLE OF ttxern.

    INTERFACES lif_longtext.
** Aliases for Interface components **
    ALIASES : lt_textid FOR lif_longtext~lt_textid,
              ls_textid FOR lif_longtext~ls_textid.

    METHODS : constructor    IMPORTING value(order_no) TYPE vbeln
                             EXCEPTIONS not_found,
              get_textid_doc IMPORTING value(text_object) TYPE tdobject
                                       value(text_group) TYPE txtob
                             EXPORTING textid_tab LIKE lt_ttxern.

  PROTECTED SECTION.
    DATA :     ls_tvak TYPE tvak,
               lt_tlines TYPE tline_t,
               ls_tlines TYPE tline,
               lv_name   TYPE tdobname.

    METHODS : print_data IMPORTING reference(text_lines) TYPE tline_t
                                   reference(text_id) TYPE tdid.
ENDCLASS.                    "lcl_so_header DEFINITION

*----------------------------------------------------------------------*
*       CLASS lcl_so_header IMPLEMENTATION
*----------------------------------------------------------------------*
* Class Implementation for Sales Order Header **
*----------------------------------------------------------------------*
CLASS lcl_so_header IMPLEMENTATION.

** Constructor method for Order Header data **
  METHOD constructor.
    CLEAR : ls_vbak.
    SELECT SINGLE * FROM vbak
      INTO ls_vbak
      WHERE vbeln = order_no.
    IF sy-subrc NE 0.
      RAISE not_found.
    ENDIF.
  ENDMETHOD.                    "constrcutor

** Method to get text-id's assinged to Order type based on Configuration **
  METHOD get_textid_doc.
    CLEAR : ls_tvak.
    REFRESH : lt_ttxern.
    SELECT SINGLE * FROM tvak
      INTO ls_tvak
      WHERE auart = ls_vbak-auart.
    IF sy-subrc EQ 0.
      SELECT * FROM ttxern
        INTO TABLE lt_ttxern
        WHERE tdobject = text_object
        AND   txtob = text_group
        AND   txtgr = ls_tvak-txtgr.
      APPEND LINES OF lt_ttxern TO textid_tab.
    ENDIF.
  ENDMETHOD.                    "lif_longtext~get_texit_doc

** Inteface method for extracting Text-id list for Object Type **
  METHOD lif_longtext~get_textid.
    SELECT tdspras tdobject tdid tdtext FROM ttxit
      INTO TABLE lt_textid
      WHERE tdspras = sy-langu
      AND   tdobject = 'VBBK'.
  ENDMETHOD.                    "lif_longtext~get_textid

** Inteface method for extracting Long text for Object type/Text id **
  METHOD lif_longtext~get_text.
    REFRESH : lt_tlines.
    MOVE me->ls_vbak-vbeln TO me->lv_name.
    CALL FUNCTION 'READ_TEXT'
      EXPORTING
        id                      = text_id
        language                = sy-langu
        name                    = me->lv_name
        object                  = text_object
      TABLES
        lines                   = lt_tlines
      EXCEPTIONS
        id                      = 1
        language                = 2
        name                    = 3
        not_found               = 4
        object                  = 5
        reference_check         = 6
        wrong_access_to_archive = 7
        OTHERS                  = 8.
    IF sy-subrc EQ 0.
      me->print_data( EXPORTING text_lines = lt_tlines
                                text_id = text_id ).
    ENDIF.
  ENDMETHOD.                    "lif_longtext~get_text

** Protected Method to Print Long text data **
  METHOD print_data.
    WRITE :/ 'Order Number : ', ls_vbak-vbeln.
    WRITE :/ 'Long text for Text Id  : ',text_id.
    WRITE :/ '---------------------------------'.
    LOOP AT lt_tlines INTO ls_tlines.
      WRITE :/ ls_tlines-tdline.
    ENDLOOP.
  ENDMETHOD.                    "print_data
ENDCLASS.                    "lcl_so_header IMPLEMENTATION

*----------------------------------------------------------------------*
*       CLASS lcl_po_header DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_po_header DEFINITION.
  PUBLIC SECTION.
    INTERFACES lif_longtext.
** Aliases for interface components **
    ALIASES : lt_textid FOR lif_longtext~lt_textid,
              ls_textid FOR lif_longtext~ls_textid.

    DATA : ls_ekko TYPE ekko.

    METHODS : constructor IMPORTING reference(po_no) TYPE ebeln
                          EXCEPTIONS not_found.

  PROTECTED SECTION.
    DATA :     lt_tlines TYPE tline_t,
               ls_tlines TYPE tline,
               lv_name   TYPE tdobname.

    METHODS : print_data IMPORTING reference(text_lines) TYPE tline_t
                                   reference(text_id) TYPE tdid.

ENDCLASS.                    "lcl_po_header DEFINITION

*----------------------------------------------------------------------*
*       CLASS lcl_po_header IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_po_header IMPLEMENTATION.

** Constructor method for Order Header data **
  METHOD constructor.
    CLEAR : ls_ekko.
    SELECT SINGLE * FROM ekko
      INTO ls_ekko
      WHERE ebeln = po_no.
    IF sy-subrc NE 0.
      RAISE not_found.
    ENDIF.
  ENDMETHOD.                    "constructor

** Inteface method for extracting Text-id list for Object Type **
  METHOD : lif_longtext~get_textid.
    SELECT tdspras tdobject tdid tdtext FROM ttxit
      INTO TABLE lt_textid
      WHERE tdspras = sy-langu
      AND   tdobject = 'EKKO'.
    DELETE lt_textid WHERE tdid+0(1) NE 'F'.
  ENDMETHOD.                    "lif_longtext~get_textid

** Inteface method for extracting Long text for Object type/Text id **
  METHOD : lif_longtext~get_text.
    REFRESH : lt_tlines.
    MOVE me->ls_ekko-ebeln TO me->lv_name.
    CALL FUNCTION 'READ_TEXT'
      EXPORTING
        id                      = text_id
        language                = sy-langu
        name                    = me->lv_name
        object                  = text_object
      TABLES
        lines                   = lt_tlines
      EXCEPTIONS
        id                      = 1
        language                = 2
        name                    = 3
        not_found               = 4
        object                  = 5
        reference_check         = 6
        wrong_access_to_archive = 7
        OTHERS                  = 8.
    IF sy-subrc EQ 0.
      me->print_data( EXPORTING text_lines = lt_tlines
                                text_id = text_id ).
    ENDIF.
  ENDMETHOD.                    ":

** Protected Method to Print Long text data **
  METHOD print_data.
    WRITE :/ 'PO Number : ', ls_ekko-ebeln.
    WRITE :/ 'Long text for Text Id  : ',text_id.
    WRITE :/ '---------------------------------'.
    LOOP AT lt_tlines INTO ls_tlines.
      WRITE :/ ls_tlines-tdline.
    ENDLOOP.
  ENDMETHOD.                    "print_data

ENDCLASS.                    "lcl_po_header IMPLEMENTATION

** Selection Screen **
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS : p_so RADIOBUTTON GROUP b1 DEFAULT 'X' USER-COMMAND rad.
PARAMETERS : p_po RADIOBUTTON GROUP b1.
PARAMETERS : p_vbeln TYPE vbeln.
SELECTION-SCREEN END OF BLOCK b1.

START-OF-SELECTION.
  IF p_so EQ abap_true.  "Get Order Details"

    DATA : zcl_so_header TYPE REF TO lcl_so_header,
           zif_so_longtext TYPE REF TO lif_longtext.

    DATA : lt_ttxern TYPE STANDARD TABLE OF ttxern,
           ls_ttxern TYPE ttxern.

** Create Instance of class LCL_SO_HEADER **
    CREATE OBJECT zcl_so_header
                   EXPORTING order_no = p_vbeln
                   EXCEPTIONS not_found = 1.

    IF sy-subrc EQ 0.
      MOVE zcl_so_header TO zif_so_longtext.
*******************************************
** Get Text ids for Sales Order Document **
*******************************************
      zif_so_longtext->get_textid( ).
      WRITE :/ 'Text Ids available for SO Header'.
      WRITE :/ '================================'.
      LOOP AT zcl_so_header->lt_textid INTO zcl_so_header->ls_textid.
        WRITE :/ 'Text Id : ',
                 zcl_so_header->ls_textid-tdid,
                 ' -> ',
                 zcl_so_header->ls_textid-tdtext.
      ENDLOOP.
***********************************************
** Get Text ids for Sales Order Document Type**
***********************************************
      zcl_so_header->get_textid_doc( EXPORTING text_object = 'VBBK'
                                                 text_group = 'A'
                                       IMPORTING textid_tab = lt_ttxern  ).    "Order Header"
      WRITE :/ 'Text IDs applicable for Doc Type -> ', zcl_so_header->ls_vbak-auart.
      WRITE :/ '============================================'.
      LOOP AT lt_ttxern INTO ls_ttxern.
        WRITE :/ 'Text id : ', ls_ttxern-tdid.
      ENDLOOP.
    ELSE.
      MESSAGE 'Sales order Not Exist' TYPE 'I' DISPLAY LIKE 'E'.
      STOP.
    ENDIF.
***********************************************
** Get Long Text for Sales Order Document Type**
***********************************************
    REFRESH : lt_ttxern.
    zcl_so_header->get_textid_doc( EXPORTING text_object = 'VBBK'
                                             text_group = 'A'
                                   IMPORTING textid_tab = lt_ttxern ).
    LOOP AT lt_ttxern INTO ls_ttxern.
      zif_so_longtext->get_text( EXPORTING text_object = ls_ttxern-tdobject
                                           text_id     = ls_ttxern-tdid ).
    ENDLOOP.
  ELSEIF p_po EQ abap_true.    "Get PO Details"
    DATA : zcl_po_header TYPE REF TO lcl_po_header,
           zif_po_longtext TYPE REF TO lif_longtext.

** Create instance of class LCL_PO_HEADER **
    CREATE OBJECT zcl_po_header
     EXPORTING po_no = p_vbeln
     EXCEPTIONS not_found = 1.
    IF sy-subrc NE 0.
      MESSAGE 'PO number not exists' TYPE 'I' DISPLAY LIKE 'E'.
      STOP.
    ELSE.
      MOVE zcl_po_header TO zif_po_longtext.
*******************************************
** Get Text ids for Purchase Order Document **
*******************************************
      zif_po_longtext->get_textid( ).
      WRITE :/ 'Text Ids available for PO Header'.
      WRITE :/ '================================'.
      LOOP AT zcl_po_header->lt_textid INTO zcl_po_header->ls_textid.
        WRITE :/ 'Text Id : ',
                 zcl_po_header->ls_textid-tdid,
                 ' -> ',
                 zcl_po_header->ls_textid-tdtext.
      ENDLOOP.
***********************************************
** Get Long Text for Purchase Order Document Type**
***********************************************
      IF zcl_po_header->lt_textid[] IS NOT INITIAL.
        LOOP AT zcl_po_header->lt_textid INTO zcl_po_header->ls_textid.
          zif_po_longtext->get_text( EXPORTING text_object = 'EKKO'
                                               text_id = zcl_po_header->ls_textid-tdid ).
        ENDLOOP.
      ENDIF.
    ENDIF.
  ENDIF.

Related Content


Useful Information

Use of Interfaces in Local Class