You are on page 1of 6

requirment : - Sample program is used to extract the Long text associated with P

urchase Order & Sales Order documents. Two Local classes are defined based on t
he Object types, one for Sales order and another for Purchase Order. One interf
ace is defined which gives the information of Text ids attached to the Object ty
pe & Long text data of the Object Type/ Text ID combination. This object is use
d 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.

ans :*&---------------------------------------------------------------------*
*& 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
ls_textid

TYPE STANDARD TABLE OF ty_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-au
art.
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_texti
d-tdid ).
ENDLOOP.
ENDIF.
ENDIF.
ENDIF.

You might also like