Sei sulla pagina 1di 8

http://wiki.scn.sap.

com/wiki/display/ABAP/ABAP+Objects++Interface+In+Local+Class+-+Real+Time+Example
start of metadata

ABAP Objects - Interface in Local


Class - A Real Time Example

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.

*&--------------------------------------------------------------------*
*& Report ZOOPS_INTERFACE
*&
*&--------------------------------------------------------------------*
*&
*&
*&--------------------------------------------------------------------*
REPORT ZOOPS_INTERFACE.
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.

Potrebbero piacerti anche