Application Development Blog Posts
Learn and share on deeper, cross technology development topics such as integration and connectivity, automation, cloud extensibility, developing at scale, and security.
cancel
Showing results for 
Search instead for 
Did you mean: 
rajucd81
Participant

Hi All,

This blog is all about to write BDC program with OOPs in ABAP. In one of my projects I got a requirement that while we creating a PO with respect to a quotation, the unused quotations of same RFQ should be marked as Rejected. To Implement this I found a BADI, unfortunately we don't have BAPI's to update quotations so we should opt BDC to update Quotations. usually BDC programs will be written by using two subroutines to fill BDCDATA internal table, one is for screen information and other one is for field name and value, the problem is that BADI class methods won't allow perform and from statements, so we should write the same code in OOABAP.

So, what I did here is that simply I have converted those two subroutines into two methods in a class. Initially I created a Z_class in that I have create required attributes and methods. Please follow below steps you can understand.

Class Attributes

  Class Methods

Class Methods Implementation

method BDC_DYNPRO.
wa_bdcdata-program = program. " Program name
wa_bdcdata-dynpro = dynpro. " Screen Number
wa_bdcdata-dynbegin = 'X'. " X
*** Append bdc table and clear work area
APPEND wa_bdcdata TO it_bdcdata.
CLEAR wa_bdcdata.
endmethod.

method BDC_FIELDVALUE.
wa_bdcdata-fnam = fnam. " Field Name
wa_bdcdata-fval = fval. " Field Value
  APPEND wa_bdcdata TO it_bdcdata.
CLEAR wa_bdcdata.
endmethod.

Now I simply used this class in my BADI Class Method  and solve the problem .

Here it is a sample code for BDC into OOABAP to update quotations Tcode ME47.

DATA: ob_bdc TYPE REF TO zcl_bdc_bps.

  CREATE OBJECT ob_bdc.

TYPES: BEGIN OF t_ekko,

         ebeln TYPE ekpo-ebeln,

         END OF t_ekko,

         BEGIN OF t_ekpo,

         ebeln TYPE ekpo-ebeln,

         ebelp TYPE ekpo-ebelp,

         END OF t_ekpo.

data: it_ekko     TYPE TABLE OF t_ekko,

        it_ekpo TYPE TABLE OF t_ekpo,

it_message  TYPE TABLE OF t_message,

it_bdcdata TYPE STANDARD TABLE OF bdcdata INITIAL SIZE 0,

it_bdc_messages TYPE STANDARD TABLE OF bdcmsgcoll INITIAL SIZE 0,

wa_message  TYPE t_message,

        wa_ekpo1 TYPE t_ekpo,

        wa_ekko TYPE  t_ekko,

        wa_ekpo TYPE ekpo,

        w_anfnr TYPE ekpo-anfnr,

        w_submi TYPE ekko-submi,

w_mode(1)   TYPE c VALUE 'E',

w_update(1) TYPE c VALUE 'S'.

CLEAR wa_ekpo.

      READ TABLE im_ekpo into wa_ekpo  index 1.

      IF sy-subrc EQ 0.

        CLEAR w_submi.

        SELECT SINGLE submi INTO w_submi FROM ekko WHERE  ebeln  = wa_ekpo-anfnr.

        IF sy-subrc EQ 0.

          SELECT ebeln  FROM ekko INTO TABLE it_ekko WHERE submi = w_submi.

          IF sy-subrc EQ 0.

SELECT ebeln ebelp  FROM ekpo INTO TABLE it_ekpo

FOR ALL ENTRIES IN it_ekko

WHERE ebeln = it_ekko-ebeln.

delete it_ekko where ebeln = wa_ekpo-anfnr.

delete it_ekpo where ebeln = wa_ekpo-anfnr.

LOOP AT it_ekko INTO wa_ekko.

CLEAR:ob_bdc->it_bdcdata[].

*Populate BDC data to Maintain Quotation in ME47

CALL METHOD ob_bdc->bdc_dynpro

EXPORTING

program  = 'SAPMM06E'

dynpro   = '0305'

dynbegin = 'X'.

CALL METHOD ob_bdc->bdc_fieldvalue

EXPORTING

fnam = 'BDC_CURSOR'

fval = 'RM06E-ANFNR'.

CALL METHOD ob_bdc->bdc_fieldvalue

EXPORTING

fnam = 'BDC_OKCODE'

fval = '/00'.

w_ebelp = wa_ekko-ebeln.

CONDENSE w_ebelp.

CALL METHOD ob_bdc->bdc_fieldvalue

EXPORTING

fnam = 'RM06E-ANFNR'

fval = w_ebelp.

CLEAR:w_ebelp.

LOOP AT it_ekpo INTO wa_ekpo1 WHERE ebeln EQ wa_ekko-ebeln.

CALL METHOD ob_bdc->bdc_dynpro

EXPORTING

program  = 'SAPMM06E'

dynpro   = '0323'

dynbegin = 'X'.

CALL METHOD ob_bdc->bdc_fieldvalue

EXPORTING

fnam = 'BDC_CURSOR'

fval = 'RM06E-EBELP'.

CALL METHOD ob_bdc->bdc_fieldvalue

EXPORTING

fnam = 'BDC_OKCODE'

fval = '/00'.

w_ebelp = w_ebelp + 10.

CONDENSE w_ebelp.

CALL METHOD ob_bdc->bdc_fieldvalue

EXPORTING

fnam = 'RM06E-EBELP'

fval = w_ebelp.

CALL METHOD ob_bdc->bdc_dynpro

EXPORTING

program  = 'SAPMM06E'

dynpro   = '0323'

dynbegin = 'X'.

CALL METHOD ob_bdc->bdc_fieldvalue

EXPORTING

fnam = 'BDC_CURSOR'

fval = 'EKPO-EMATN'.

CALL METHOD ob_bdc->bdc_fieldvalue

EXPORTING

fnam = 'BDC_OKCODE'

fval = '=DETA'.

CALL METHOD ob_bdc->bdc_fieldvalue

EXPORTING

fnam = 'RM06E-EBELP'

fval = w_ebelp.

CALL METHOD ob_bdc->bdc_dynpro

EXPORTING

program  = 'SAPMM06E'

dynpro   = '0311'

dynbegin = 'X'.

CALL METHOD ob_bdc->bdc_fieldvalue

EXPORTING

fnam = 'BDC_CURSOR'

fval = 'RM06E-ANMNG'.

CALL METHOD ob_bdc->bdc_fieldvalue

EXPORTING

fnam = 'EKPO-ABSKZ'

fval = 'X'.

ENDLOOP.

CALL METHOD ob_bdc->bdc_fieldvalue

EXPORTING

fnam = 'BDC_OKCODE'

fval = '=BU'.

refresh it_bdcdata.

it_bdcdata = ob_bdc->it_bdcdata.

CALL TRANSACTION c_me47 USING    it_bdcdata

MODE     w_mode

UPDATE   w_update

MESSAGES INTO it_bdc_messages.

endloop.

44 Comments