Purchase Order Data Extraction using ABAP Classes
Link to Content's target Space :
http://wiki.sdn.sap.com/wiki/display/ABAP/ABAP+Development+and+Programming.
Applies to:
Sample Program Developed in ECC 5.0
Summary
This post narrates the use of ABAP Classes for Extracting Purchase Order Details.
Author(s): Vinod Kumar T
Company: NIIT Technologies Limited
Created on: 16.11.2010
Author(s) Bio
Vinod Kumar is an ABAP Consultant working with NIIT Technologies LImited
Table of Contents
Class & Methods Used
| Class |
Interface / Method |
Description |
| CL_PO_HEADER_HANDLE_MM |
SET_STATE |
Set the Current State of Purchase Order |
| CL_PO_HEADER_HANDLE_MM |
PO_INITIALIZE |
Initialize/Refresh PO Environment |
| CL_PO_HEADER_HANDLE_MM |
PO_READ |
Read Purchase Order |
| CL_PO_HEADER_HANDLE_MM |
IF_PURCHASE_ORDER_MM~GET_DATA |
Get PO Header Data |
| CL_PO_HEADER_HANDLE_MM |
IF_PURCAHSING_DOCUMENT~GET_PARTNERS |
Get PO Header Partners |
| CL_PO_HEADER_HANDLE_MM |
IF_LONGTEXTS_MM~GET_TEXTOBJECT |
Get Header Long Text Object |
| CL_PO_HEADER_HANDLE_MM |
IF_LONGTEXTS_MM~GET_TYPES |
Get Header Long Text IDs |
| CL_PO_HEADER_HANDLE_MM |
IF_LONGTEXTS_MM~GET_TEXT |
Get Header Long Text |
| CL_PO_HEADER_HANDLE_MM |
IF_PURCHASE_ORDER_MM~GET_ITEMS |
Get PO Line items Instance |
| CL_PO_ITEM_HANDLE_MM |
IF_PURCHASE_ORDER_ITEM_MM~GET_DATA |
Get PO Line items data |
| CL_PO_ITEM_HANDLE_MM |
IF_PURCHASE_ORDER_ITEM_MM~GET_SCHEDULES |
Get PO Item Schedule instance |
| CL_PO_SCHEDULE_HANDLE_MM |
IF_PURCAHSE_ORDER_SCHEDULE_MM~GET_DATA |
Get PO Item Schedule data |
| CL_PO_ITEM_HANDLE_MM |
IF_PURCHASE_ORDER_ITEM_MM~GET_ACCOUNTINGS |
Get PO Acct Assignment Instance |
| CL_PO_ACCOUNTING_HANDLE_MM |
IF_PURCHASE_ORDER_ACCOUNT_MM~GET_DATA |
Get PO Acct Assingment data |
| CL_PO_ITEM_HANDLE_MM |
IF_PURCHASE_ORDER_ITEM_MM~GET_CONDITIONS |
Get PO Item Pricing Conditions |
| CL_PO_ITEM_HANDLE_MM |
IF_LONGTEXTS_MM~GET_TYPES |
Get PO Line Long text IDs |
| CL_PO_ITEM_HANDLE_MM |
IF_LONGTEXTS_MM~GET_TEXT |
Get PO LIne Long text Data |
| CL_PO_ITEM_HANDLE_MM |
IF_PURCHASE_ORDER_ITEM_MM~GET_HISOTRY |
Get PO History (Document Flow) |
Contents in Sample Code
Sample code is used to extract the Purchase Order Information using the ABAP Classes. Following Information is extracted using the Classes.
- Purcahse Order Header Data
- PO Header Partner Information
- PO Header Long texts
- PO Line item Information
- PO Line item Delivery Schedule Information
- PO Line item Account assingment information
- PO Line item Long texts
- PO History (Line Item wise Document Flow)
Comments
The code written here stores the data in internal tables. Further processing of internal tables or Display of the contents are not mentioned in the sample code.
Sample Code
&---------------------------------------------------------------------
*& Report ZVK_CL_PO
&---------------------------------------------------------------------
*& Report to Extract Purchase Order details
&---------------------------------------------------------------------
REPORT zvk_cl_po.
TABLES : ekko.
TYPE-POOLS : mmpur, abap.
DATA : zcl_po TYPE REF TO cl_po_header_handle_mm.
* Definition for header *
DATA : ls_document TYPE mepo_document,
lv_result TYPE mmpur_bool,
ls_mepoheader TYPE mepoheader.
* Definition for Item *
DATA : lt_items TYPE purchase_order_items,
ls_items TYPE purchase_order_item,
lt_mepoitem TYPE STANDARD TABLE OF mepoitem,
ls_mepoitem TYPE mepoitem.
* Definition for Delivery Schedule *
DATA : lt_schedules TYPE purchase_order_schedules,
ls_schedules TYPE purchase_order_schedule,
lt_meposchd TYPE STANDARD TABLE OF meposchedule,
ls_meposchd TYPE meposchedule.
* Definition for Account assignments *
DATA : lt_accounting TYPE purchase_order_accountings,
ls_accounting TYPE purchase_order_accounting,
lt_mepoacct TYPE STANDARD TABLE OF mepoaccounting,
ls_mepoacct TYPE mepoaccounting.
* Definition for Item Conditions *
DATA : lt_conditions TYPE mmpur_tkomv,
ls_conditions TYPE komv,
lt_mepocond TYPE mmpur_tkomv.
* Definition for Header Partners *
DATA : lt_partners TYPE mmpur_partner_all_tab,
ls_partners TYPE mmpur_partner_all.
* Defintion for Header Text Object*
DATA : lv_tdobject TYPE tdobject,
lv_metafield TYPE mmpur_metafield.
* Definition for Header Text IDs *
DATA : lt_h_txttypes TYPE mmpur_t_texttypes,
ls_h_txttypes TYPE mmpur_texttypes.
* Definition for Header Text Data *
DATA : lt_h_txtlines TYPE mmpur_t_textlines,
lt_h_textdata TYPE mmpur_t_textlines,
ls_h_txtlines TYPE mmpur_textlines,
lv_h_format TYPE mmpur_bool.
* Defintion for Item Text Object*
DATA : lv_i_tdobject TYPE tdobject,
lv_i_metafield TYPE mmpur_metafield.
* Definition for Item Text IDs *
DATA : lt_i_txttypes TYPE mmpur_t_texttypes,
ls_i_txttypes TYPE mmpur_texttypes.
* Definition for Item Text Data *
DATA : lt_i_txtlines TYPE mmpur_t_textlines,
lt_i_textdata TYPE mmpur_t_textlines,
ls_i_txtlines TYPE mmpur_textlines,
lv_i_format TYPE mmpur_bool.
* Definition for Purchase Order History *
DATA : ls_indicator TYPE mepo_were,
lt_item_total TYPE me_ekbes,
lt_total_sum TYPE me_ekbes,
lt_item_del TYPE me_ekbnk,
lt_del_sum TYPE me_ekbnk,
lt_grir_det TYPE me_ekbez,
lt_grir_sum TYPE me_ekbez,
lt_history TYPE me_ekbe,
lt_hist_sum TYPE me_ekbe,
lt_del_hist TYPE me_ekbz,
lt_dh_sum TYPE me_ekbz.
PARAMETERS : p_ebeln TYPE ekko-ebeln.
MOVE mmpur_po_process TO ls_document-process.
MOVE 'A' TO ls_document-trtyp.
MOVE p_ebeln TO ls_document-doc_key(10).
MOVE mmpur_initiator_call TO ls_document-initiator-initiator.
* Create Object of Purchase Order Class *
CREATE OBJECT zcl_po
EXPORTING
im_po_number = p_ebeln
EXCEPTIONS
failure = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
IF zcl_po IS NOT INITIAL.
* Set the state to existing Purchase Order *
zcl_po->set_state( im_state = cl_po_header_handle_mm=>c_available ).
* Initialize the environment *
zcl_po->po_initialize( im_document = ls_document ).
* Read PO document *
zcl_po->po_read(
EXPORTING
im_tcode = 'ME23N'
im_trtyp = ls_document-trtyp
im_aktyp = ls_document-trtyp
im_po_number = p_ebeln
im_document = ls_document
IMPORTING
ex_result = lv_result ).
IF lv_result = abap_true.
* --------------------------------------------------*
* Extract PO Header Information *
* --------------------------------------------------*
CLEAR : ls_mepoheader.
ls_mepoheader = zcl_po->if_purchase_order_mm~get_data( ).
* --------------------------------------------------*
* Extract PO Header Partners *
* --------------------------------------------------*
REFRESH : lt_partners.
lt_partners = zcl_po->if_purchasing_document~get_partners( ).
* --------------------------------------------------*
* Extract Header Text Object Details *
* --------------------------------------------------*
CLEAR : lv_tdobject, lv_metafield.
zcl_po->if_longtexts_mm~get_textobject(
IMPORTING
ex_tdobject = lv_tdobject
ex_metafield = lv_metafield ).
* --------------------------------------------------*
* Extract Header Text ID information *
* --------------------------------------------------*
REFRESH : lt_h_txttypes.
zcl_po->if_longtexts_mm~get_types(
IMPORTING
ex_texttypes = lt_h_txttypes ).
* --------------------------------------------------*
* Extract Header Text Informaton *
* --------------------------------------------------*
REFRESH : lt_h_textdata.
LOOP AT lt_h_txttypes INTO ls_h_txttypes.
zcl_po->if_longtexts_mm~get_text(
EXPORTING
im_tdid = ls_h_txttypes-tdid
IMPORTING
ex_textlines = lt_h_txtlines
ex_text_formatted = lv_h_format ).
APPEND LINES OF lt_h_txtlines TO lt_h_textdata.
ENDLOOP.
* --------------------------------------------------*
* Extract PO Item Information *
* --------------------------------------------------*
REFRESH : lt_items.
lt_items = zcl_po->if_purchase_order_mm~get_items( ).
LOOP AT lt_items INTO ls_items.
** ls_items-item returns the type Interface : IF_PURCHASE_ORDER_ITEM_MM
** which is part of the class : CL_PO_ITEM_HANDLE_MM
** Call the Interface method GET_DATA to get the Item details related to
** the Purchase Order. Item details data are passed to the structure
** ls_mepoitem and appended to the internal table lt_mepoitem.
ls_mepoitem = ls_items-item->get_data( ).
APPEND ls_mepoitem TO lt_mepoitem.
* --------------------------------------------------*
* Extract PO delivery schedule *
* --------------------------------------------------*
REFRESH : lt_schedules.
lt_schedules = ls_items-item->get_schedules( ).
LOOP AT lt_schedules INTO ls_schedules.
** ls_schedules-schedule returns the type Interface : IF_PURCHASE_ORDER_SCHEDULE_MM
** which is part of the class : CL_PO_SCHEDULE_HANDLE_MM
** Call the interface method GET_DATA to get the delivery schedule related to
** to the PO Line Item. Schedule line details are passed to the strcuture
** ls_meposchd and appended to the internal table lt_meposchd.
ls_meposchd = ls_schedules-schedule->get_data( ).
APPEND ls_meposchd TO lt_meposchd.
ENDLOOP.
* --------------------------------------------------*
** Extract PO Account Assignments
* --------------------------------------------------*
REFRESH : lt_accounting.
lt_accounting = ls_items-item->get_accountings( ).
LOOP AT lt_accounting INTO ls_accounting.
** ls_accounting-accounting returns the type Interface : IF_PURCHASE_ORDER_ACCOUNT_MM
** which is part of the class : CL_PO_ACCOUNTING_HANDLE_MM
** Call the interface method GET_DATA to get the delivery schedule related to
** to the PO line item. Account assignment details are passed to the structure
** ls_mepoacct and appended to the internal table lt_mepoacct.
ls_mepoacct = ls_accounting-accounting->get_data( ).
APPEND ls_mepoacct TO lt_mepoacct.
ENDLOOP.
* --------------------------------------------------*
* Extract PO Item Conditions *
* --------------------------------------------------*
ls_items-item->get_conditions(
IMPORTING
ex_conditions = lt_conditions ).
APPEND LINES OF lt_conditions TO lt_mepocond.
* --------------------------------------------------*
* Extract PO Item Text Data *
* --------------------------------------------------*
REFRESH : lt_i_txttypes.
ls_items-item->if_longtexts_mm~get_types(
IMPORTING
ex_texttypes = lt_i_txttypes ).
LOOP AT lt_i_txttypes INTO ls_i_txttypes.
ls_items-item->if_longtexts_mm~get_text(
EXPORTING
im_tdid = ls_i_txttypes-tdid
IMPORTING
ex_textlines = lt_i_txtlines ).
APPEND LINES OF lt_i_txtlines TO lt_i_textdata.
ENDLOOP.
* --------------------------------------------------*
** Get Purchase Order Item History
* --------------------------------------------------*
REFRESH : lt_item_total, lt_item_del,lt_grir_det,
lt_history, lt_del_hist.
ls_items-item->get_history(
IMPORTING
ex_indicators = ls_indicator
ex_item_totals = lt_item_total
ex_item_totals_delivery = lt_item_del
ex_grir_assignment = lt_grir_det
ex_history = lt_history
ex_history_delivery = lt_del_hist ).
APPEND LINES OF lt_item_total TO lt_total_sum.
APPEND LINES OF lt_item_del TO lt_del_sum.
APPEND LINES OF lt_grir_det TO lt_grir_sum.
APPEND LINES OF lt_history TO lt_hist_sum.
APPEND LINES OF lt_del_hist TO lt_dh_sum.
ENDLOOP.
ENDIF.
ENDIF.
Related Content
|