class ZCL_BC_BDC definitionpublicfinalcreate private .public section.*"* public components of class ZCL_BC_BDC*"* do not include other source files here!!!constants CO_MSG_TYPE_INFO type C value 'I'. "#EC NOTEXTconstants CO_MSG_TYPE_SUCCESS type C value 'S'. "#EC NOTEXTconstants CO_MSG_TYPE_ERROR type C value 'E'. "#EC NOTEXTconstants CO_MSG_TYPE_WARNING type C value 'W'. "#EC NOTEXTconstants CO_MSG_TYPE_ABEND type C value 'A'. "#EC NOTEXTclass-methods S_INSTANTIATEimporting!IM_BDC_TYPE type C!IM_TCODE type TCODE!IM_BDC_MODE type C default 'N'!IM_UPD_MODE type C default 'S'!IM_GROUP type APQI-GROUPID optional!IM_USER type APQI-USERID default SY-UNAME!IM_KEEP type APQI-QERASE optional!IM_HOLDDATE type APQI-STARTDATE optionalreturningvalue(RE_BDC) type ref to ZCL_BC_BDC .class-methods S_FREE_INSTANCE .methods ADD_FIELDimporting!IM_FLD type ANY!IM_VAL type ANY!IM_CONV type CHAR1 optional .methods ADD_SCREENimporting!IM_REPID type ANY!IM_DYNNR type ANY .methods PROCESSexporting!EX_SUBRC type SY-SUBRC!EX_MESSAGES type TAB_BDCMSGCOLLraisingZCX_BATCH_INPUT_ERROR .methods CLEAR_BDC_DATA .*"* protected components of class ZCL_BC_BDC*"* do not include other source files here!!!*"* protected components of class ZCL_BC_BDC*"* do not include other source files here!!!protected section.private section.*"* private components of class ZCL_BC_BDC*"* do not include other source files here!!!class-data BDC type ref to ZCL_BC_BDC .data BDCDATA type BDCDATA_TAB .data BDC_TYPE type CHAR2 .data TCODE type TCODE .data CT_BDC_MODE type C .data CT_UPD_MODE type C .data BI_GROUP type APQI-GROUPID .data BI_USER type APQI-USERID .data BI_KEEP type APQI-QERASE .data BI_HOLDDATE type APQI-STARTDATE .methods CONSTRUCTORimporting!IM_BDC_TYPE type C!IM_TCODE type TCODE!IM_BDC_MODE type C!IM_UPD_MODE type C!IM_GROUP type APQI-GROUPID!IM_USER type APQI-USERID!IM_KEEP type APQI-QERASE!IM_HOLDDATE type APQI-STARTDATE .methods CALL_TRANSACTIONexporting!EX_SUBRC type SY-SUBRC!EX_MESSAGES type TAB_BDCMSGCOLL .methods CREATE_BATCH_INPUT_SESSraisingZCX_BATCH_INPUT_ERROR .ENDCLASS.CLASS ZCL_BC_BDC IMPLEMENTATION.* <SIGNATURE>---------------------------------------------------------------------------------------+* | Instance Public Method ZCL_BC_BDC->ADD_FIELD* +-------------------------------------------------------------------------------------------------+* | [--->] IM_FLD TYPE ANY* | [--->] IM_VAL TYPE ANY* | [--->] IM_CONV TYPE CHAR1(optional)* +--------------------------------------------------------------------------------------</SIGNATURE>METHOD add_field.*----------------------------------------------------------------------** Insert field in BDC screen** Additional functionality if IV_CONV is populated as below:-* D - Convert date from YYYYMMDD format to output format* S - Allow initial values to be populated in BDC*----------------------------------------------------------------------*DATA:bdcdata LIKE LINE OF me->bdcdata.* Initial values are skipped unless suppress 'S' is usedIF im_val IS INITIAL AND im_conv <> 'S'.RETURN.ENDIF.CASE im_conv.WHEN 'D'.CALL FUNCTION 'CONVERSION_EXIT_MODAT_OUTPUT'EXPORTINGinput = im_valIMPORTINGoutput = bdcdata-fval.WHEN OTHERS.bdcdata-fval = im_val.ENDCASE.bdcdata-fnam = im_fld.APPEND bdcdata TO me->bdcdata.ENDMETHOD.* <SIGNATURE>---------------------------------------------------------------------------------------+* | Instance Public Method ZCL_BC_BDC->ADD_SCREEN* +-------------------------------------------------------------------------------------------------+* | [--->] IM_REPID TYPE ANY* | [--->] IM_DYNNR TYPE ANY* +--------------------------------------------------------------------------------------</SIGNATURE>method ADD_SCREEN.*----------------------------------------------------------------------** Start new BDC screen*----------------------------------------------------------------------*DATA:bdcdata LIKE LINE OF me->bdcdata.bdcdata-program = im_repid.bdcdata-dynpro = im_dynnr.bdcdata-dynbegin = 'X'.APPEND bdcdata TO me->bdcdata.endmethod.* <SIGNATURE>---------------------------------------------------------------------------------------+* | Instance Private Method ZCL_BC_BDC->CALL_TRANSACTION* +-------------------------------------------------------------------------------------------------+* | [<---] EX_SUBRC TYPE SY-SUBRC* | [<---] EX_MESSAGES TYPE TAB_BDCMSGCOLL* +--------------------------------------------------------------------------------------</SIGNATURE>METHOD CALL_TRANSACTION.DATA:bdc_subrc LIKE sy-subrc.CLEAR: ex_subrc, ex_messages.*-----------------------------------------------------------------------* Call BDC*-----------------------------------------------------------------------* Call the transaction and collect the messagesCALL TRANSACTION me->tcodeUSING me->bdcdataMODE me->ct_bdc_modeUPDATE me->ct_upd_modeMESSAGES INTO ex_messages.bdc_subrc = sy-subrc.*-----------------------------------------------------------------------* Process BDC messages*-----------------------------------------------------------------------* Check if there are any errorsLOOP AT ex_messages TRANSPORTING NO FIELDSWHERE msgtyp = co_msg_type_errorOR msgtyp = co_msg_type_abend.EXIT. "Exit loopENDLOOP.IF sy-subrc = 0 OR bdc_subrc <> 0.ex_subrc = 4.ENDIF.ENDMETHOD.* <SIGNATURE>---------------------------------------------------------------------------------------+* | Instance Public Method ZCL_BC_BDC->CLEAR_BDC_DATA* +-------------------------------------------------------------------------------------------------+* +--------------------------------------------------------------------------------------</SIGNATURE>METHOD CLEAR_BDC_DATA.CLEAR: me->bdcdata.ENDMETHOD.* <SIGNATURE>---------------------------------------------------------------------------------------+* | Instance Private Method ZCL_BC_BDC->CONSTRUCTOR* +-------------------------------------------------------------------------------------------------+* | [--->] IM_BDC_TYPE TYPE C* | [--->] IM_TCODE TYPE TCODE* | [--->] IM_BDC_MODE TYPE C* | [--->] IM_UPD_MODE TYPE C* | [--->] IM_GROUP TYPE APQI-GROUPID* | [--->] IM_USER TYPE APQI-USERID* | [--->] IM_KEEP TYPE APQI-QERASE* | [--->] IM_HOLDDATE TYPE APQI-STARTDATE* +--------------------------------------------------------------------------------------</SIGNATURE>METHOD constructor.me->bdc_type = im_bdc_type.me->tcode = im_tcode.me->ct_bdc_mode = im_bdc_mode.me->ct_upd_mode = im_upd_mode.me->bi_group = im_group.me->bi_user = im_user.me->bi_keep = im_keep.me->bi_holddate = im_holddate.ENDMETHOD.* <SIGNATURE>---------------------------------------------------------------------------------------+* | Instance Private Method ZCL_BC_BDC->CREATE_BATCH_INPUT_SESS* +-------------------------------------------------------------------------------------------------+* | [!CX!] ZCX_BATCH_INPUT_ERROR* +--------------------------------------------------------------------------------------</SIGNATURE>METHOD create_batch_input_sess.CALL FUNCTION 'BDC_OPEN_GROUP'EXPORTINGgroup = me->bi_groupholddate = me->bi_holddatekeep = me->bi_keepuser = me->bi_userEXCEPTIONSclient_invalid = 1destination_invalid = 2group_invalid = 3group_is_locked = 4holddate_invalid = 5internal_error = 6queue_error = 7running = 8system_lock_error = 9user_invalid = 10OTHERS = 11.IF sy-subrc <> 0.RAISE EXCEPTION TYPE zcx_batch_input_errorEXPORTINGmsgty = sy-msgtymsgid = sy-msgidmsgno = sy-msgnomsgv1 = sy-msgv1msgv2 = sy-msgv2msgv3 = sy-msgv3msgv4 = sy-msgv4.ENDIF.CALL FUNCTION 'BDC_INSERT'EXPORTINGtcode = me->tcodeTABLESdynprotab = me->bdcdataEXCEPTIONSinternal_error = 1not_open = 2queue_error = 3tcode_invalid = 4printing_invalid = 5posting_invalid = 6OTHERS = 7.IF sy-subrc <> 0.RAISE EXCEPTION TYPE zcx_batch_input_errorEXPORTINGmsgty = sy-msgtymsgid = sy-msgidmsgno = sy-msgnomsgv1 = sy-msgv1msgv2 = sy-msgv2msgv3 = sy-msgv3msgv4 = sy-msgv4.ENDIF.CALL FUNCTION 'BDC_CLOSE_GROUP'EXCEPTIONSnot_open = 1queue_error = 2OTHERS = 3.IF sy-subrc <> 0.RAISE EXCEPTION TYPE zcx_batch_input_errorEXPORTINGmsgty = sy-msgtymsgid = sy-msgidmsgno = sy-msgnomsgv1 = sy-msgv1msgv2 = sy-msgv2msgv3 = sy-msgv3msgv4 = sy-msgv4.ENDIF.ENDMETHOD.* <SIGNATURE>---------------------------------------------------------------------------------------+* | Instance Public Method ZCL_BC_BDC->PROCESS* +-------------------------------------------------------------------------------------------------+* | [<---] EX_SUBRC TYPE SY-SUBRC* | [<---] EX_MESSAGES TYPE TAB_BDCMSGCOLL* | [!CX!] ZCX_BATCH_INPUT_ERROR* +--------------------------------------------------------------------------------------</SIGNATURE>METHOD process.CLEAR: ex_subrc, ex_messages.CASE me->bdc_type.WHEN 'CT'.me->call_transaction( IMPORTING ex_subrc = ex_subrcex_messages = ex_messages ).WHEN 'BI'.me->create_batch_input_sess( ).ENDCASE.ENDMETHOD.* <SIGNATURE>---------------------------------------------------------------------------------------+* | Static Public Method ZCL_BC_BDC=>S_FREE_INSTANCE* +-------------------------------------------------------------------------------------------------+* +--------------------------------------------------------------------------------------</SIGNATURE>METHOD s_free_instance.FREE zcl_bc_bdc=>bdc.ENDMETHOD.* <SIGNATURE>---------------------------------------------------------------------------------------+* | Static Public Method ZCL_BC_BDC=>S_INSTANTIATE* +-------------------------------------------------------------------------------------------------+* | [--->] IM_BDC_TYPE TYPE C* | [--->] IM_TCODE TYPE TCODE* | [--->] IM_BDC_MODE TYPE C (default ='N')* | [--->] IM_UPD_MODE TYPE C (default ='S')* | [--->] IM_GROUP TYPE APQI-GROUPID(optional)* | [--->] IM_USER TYPE APQI-USERID (default =SY-UNAME)* | [--->] IM_KEEP TYPE APQI-QERASE(optional)* | [--->] IM_HOLDDATE TYPE APQI-STARTDATE(optional)* | [<-()] RE_BDC TYPE REF TO ZCL_BC_BDC* +--------------------------------------------------------------------------------------</SIGNATURE>METHOD s_instantiate.* Create singleton so that in any single session, only* one instance of class existsIF zcl_bc_bdc=>bdc IS NOT BOUND.ASSERT FIELDS im_tcode CONDITION im_tcode IS NOT INITIAL.ASSERT FIELDS im_bdc_type CONDITION im_bdc_type = 'CT' OR im_bdc_type = 'BI'.CREATE OBJECT zcl_bc_bdc=>bdcEXPORTINGim_bdc_type = im_bdc_typeim_tcode = im_tcodeim_bdc_mode = im_bdc_modeim_upd_mode = im_upd_modeim_group = im_groupim_user = im_userim_keep = im_keepim_holddate = im_holddate.ENDIF.re_bdc = zcl_bc_bdc=>bdc.ENDMETHOD.ENDCLASS.
Saturday, 17 May 2014
Lets use ABAP Objects for BDC
Labels:
ABAP OO Objects
Location:
New York, NY, USA