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.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
7 | |
6 | |
4 | |
3 | |
3 | |
2 | |
2 | |
2 | |
2 |