Calling a BDC program in side a user-exit

Hi all,
I need to call a BDC program in side a user-exit of sales order change
. i want to make user by calling this BDC program that it wont effect any of my other code's on that and that the customer wont be noticed with any inconvenience.
i know to use
CALL TRANSACTION 'zprogram'.
but i want to make sure that till will not do any harm for any of other parts.
Regards Nafran.

Hi
Make sure you dont change any values of standard SAP variables,structures and internal table values inside the user exit.This is the only way where the other functionality gets affected(unless it is the requirement).
Reward if helpful.
Thanks & regards,
Ramya

Similar Messages

  • Calling a driver program by submit in user exit for PGI

    Hi Gurus,
    I have a question regarding post goods issue (PGI) for transaction vl01n,vl02n and vl06g.
    earlier i have created a smartofrm and a driver program for sending the form output attachment in a mail after delivery posting manually.
    for this i have created a smartform and driver program in which all the logic to attach and mail send is written on delivery posting.
    but now customer want this fucntionality on Post goods issue (PGI), when user go to trasaction vl01n ,vl02n and vlo6g and pressing PGI button,
    then mail should be sent automatically with for output attachment.
    i have found a user exit which is being triggerd on PGI press MV50AFZ1 in which implemented the implecit enhancement in perform
    user_exit_save_document_prepeare with below code.
    ENHANCEMENT 1  ZPGI_MAIL_SEND.    "active version
    DATA c_zlf TYPE likp-lfart.
    IF sy-ucomm = 'WABU_T' and xlikp-lfart = c_zlf.
    SUBMIT ZSD_DECLARATION_CONFORMITY AND RETURN.
    ENDIF.
    ENDENHANCEMENT.
    After going to transaction vl02n i am putting unposted delivery number and clicking on PGI button.
    in debugging its going to condition check for ucomm for PGI buttion and delivery type.
    if condtion is fullfiled and curser going further on submit statement, but without executing the driver program ZSD_DECLARATION_CONFORMITY it coming out of enhancement.
    its not performing the task which is develped in the driver program.
    Please help me with the submit statement structure if i am missing any or other solution for my problem.
    Br,
    Surya

    Hi Team,
    I have used the perform.
    ENHANCEMENT 1  ZPGI_MAIL_SEND.    "active version
    DATA c_zlf TYPE likp-lfart.
    IF sy-ucomm = 'WABU_T' and xlikp-lfart = c_zlf.
    Perform entry( ZSD_DECLARATION_CONFORMITY )using return screen.
    ENDIF.
    ENDENHANCEMENT.
    Now i am able to communicate with my program.
    Thanks,
    surya

  • Can we call a bdc program from a report?how

    hi
    experts can u help me for this

    Hi
    Yes, You can call a BDC program from Report.
    see the sample report in which it is used
    REPORT zm_reservation_alert
    NO STANDARD PAGE HEADING
    MESSAGE-ID zm_msg.
    D A T A B A S E T A B L E S D E C L A R A T I O N
    T Y P E S D E C L A R A T I O N S
    Reservations Main Structure
    TYPES: BEGIN OF s_res,
    rsnum TYPE rsnum, " Reservation No
    rspos TYPE rspos, " Item No
    usnam TYPE usnam, " User Name
    bwart TYPE bwart, " Movement Type
    aufnr TYPE aufnr, " Order Number
    rsart TYPE rsart, " Record Type
    bdart TYPE bdart, " Reservation Type
    matnr TYPE matnr, " Material No
    bdter TYPE bdter, " Req Date
    menge TYPE menge_d, " Quantity
    kostl TYPE kostl, " Cost Center
    usrid TYPE sysid, " User ID
    END OF s_res.
    Output Main Structure
    TYPES: BEGIN OF s_rep,
    usnam TYPE usnam, " User Name
    rsnum TYPE rsnum, " Reservation No
    rspos TYPE rspos, " Item No
    matnr TYPE matnr, " Material No
    bdter TYPE bdter, " Req Date
    menge TYPE menge_d, " Quantity
    kostl TYPE kostl, " Cost Center
    aufnr TYPE aufnr, " Order Number
    END OF s_rep.
    User Dept Details
    TYPES: BEGIN OF s_dept,
    pernr TYPE persno, " Personal No
    usrid TYPE sysid, " User ID
    orgeh TYPE orgeh, " Orgn Unit
    orgtx TYPE orgtx, " Dept Name
    END OF s_dept.
    For Send Mail Purpose
    DATA : i_doc_data LIKE sodocchgi1.
    DATA : BEGIN OF i_pack_list OCCURS 0.
    INCLUDE STRUCTURE sopcklsti1.
    DATA : END OF i_pack_list.
    DATA : BEGIN OF i_receivers OCCURS 0.
    INCLUDE STRUCTURE somlreci1.
    DATA : END OF i_receivers.
    DATA : BEGIN OF i_contents OCCURS 0.
    INCLUDE STRUCTURE solisti1.
    DATA : END OF i_contents.
    DATA : BEGIN OF i_header OCCURS 0.
    INCLUDE STRUCTURE solisti1.
    DATA : END OF i_header.
    DATA : BEGIN OF i_att OCCURS 0.
    INCLUDE STRUCTURE solisti1.
    DATA : END OF i_att.
    Internal table for bdcdata
    DATA : it_bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE.
    Internal table to handle messages
    DATA : it_messages LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.
    D A T A D E C L A R A T I O N S
    DATA: gv_lines TYPE sy-index, " Total Lines int Table
    gv_days TYPE i, " Difference Days
    gv_date TYPE sy-datum, " Date
    gv_date1 TYPE sy-datum, " Date
    gv_date2 TYPE sy-datum, " Date
    gv_text(85), " Text Field
    gv_mesg(70), " Error Messages
    gv_bdc, " BDC Flag
    gv_flag TYPE i, " Flag
    gv_ernam TYPE ernam. " User ID
    C O N S T A N T S D E C L A R A T I O N S
    CONSTANTS: c_x VALUE 'X', " Flag
    c_endda TYPE endda VALUE '99991231'. " Date
    I N T E R N A L T A B L E S D E C L A R A T I O N S
    DATA: i_res TYPE STANDARD TABLE OF s_res WITH HEADER LINE, " Reservns
    i_dept TYPE STANDARD TABLE OF s_dept WITH HEADER LINE, " Dept
    i_rep TYPE STANDARD TABLE OF s_rep WITH HEADER LINE. " Output
    S T A R T - O F - S E L E C T I O N *
    START-OF-SELECTION.
    Fetch main data
    PERFORM fetch_data.
    Process data
    PERFORM process_data.
    *& Form fetch_data
    Fetching the Reservations related data from Database Tables
    FORM fetch_data .
    CLEAR: gv_date, gv_date1, gv_date2.
    gv_date = sy-datum.
    gv_date1 = sy-datum - 10.
    gv_date2 = sy-datum + 10.
    CLEAR i_res.
    REFRESH i_res.
    SELECT a~rsnum " Reservation No.
    b~rspos " Reservation Item
    a~usnam " User Name
    a~bwart " Movement Type
    a~aufnr " Order Number
    b~rsart " Record Type
    b~bdart " Reservation Type
    b~matnr " Material No
    b~bdter " Req Date
    INTO TABLE i_res
    FROM rkpf AS a JOIN resb AS b
    ON arsnum = brsnum
    WHERE ( b~bdter BETWEEN gv_date1 AND gv_date2 ) AND
    b~xloek EQ ' '.
    SORT i_res BY rsnum rspos.
    DELETE ADJACENT DUPLICATES FROM i_res COMPARING matnr.
    Add userid into the i_usr int table
    LOOP AT i_res.
    i_res-usrid = i_res-usnam.
    MODIFY i_res INDEX sy-tabix.
    ENDLOOP.
    IF NOT i_res[] IS INITIAL.
    Get the User Dept Name
    CLEAR i_dept.
    REFRESH i_dept.
    SELECT a~pernr " Personal No
    a~usrid " User ID
    b~orgeh " Orgn Unit
    c~orgtx " Dept Name
    INTO TABLE i_dept
    FROM pa0105 AS a JOIN pa0001 AS b
    ON apernr = bpernr JOIN t527x AS c
    ON borgeh = corgeh
    FOR ALL ENTRIES IN i_res
    WHERE a~usrid = i_res-usrid AND
    a~endda EQ c_endda AND
    b~endda EQ c_endda.
    ENDIF.
    SORT i_dept BY pernr.
    DELETE ADJACENT DUPLICATES FROM i_dept COMPARING pernr.
    Move the Creator of Reservation to a diff table
    LOOP AT i_res.
    MOVE-CORRESPONDING i_res TO i_rep.
    APPEND i_rep.
    CLEAR i_rep.
    ENDLOOP.
    SORT i_rep BY usnam rsnum rspos.
    ENDFORM. " Fetch_Data
    *& Form process_data
    Process the Reservations related data for Expiry Date
    FORM process_data .
    DATA: lv_date1 LIKE sy-datum,
    lv_date2 LIKE sy-datum,
    lv_date3(10),
    lv_menge(13),
    lv_tabix LIKE sy-tabix.
    LOOP AT i_rep.
    CLEAR: gv_days, gv_text, lv_date1, lv_date2,lv_date3.
    lv_tabix = sy-tabix.
    AT NEW usnam.
    Populate the Contents Table
    CLEAR i_att.
    REFRESH i_att.
    i_att = 'Reservations Reminder'(014).
    APPEND i_att.
    i_att = '----
    APPEND i_att.
    i_att-line = ' '.
    APPEND i_att.
    READ TABLE i_dept WITH KEY usrid = i_rep-usnam.
    CONCATENATE 'Name:'(003) i_rep-usnam 'Dept:'(015) i_dept-orgtx
    INTO i_att-line SEPARATED BY space.
    APPEND i_att.
    i_att-line = ' '.
    APPEND i_att.
    i_att = 'Please find the List of expiring Reservations'(004).
    APPEND i_att.
    i_att-line = ' '.
    APPEND i_att.
    CONCATENATE '--' '' '--
    ' INTO
    i_att-line SEPARATED BY space.
    APPEND i_att.
    CONCATENATE 'Reservation #'(006) 'Material #'(007) ' Quantity'(002)
    'Due Date'(008) 'Work Center/CC'(005) INTO
    i_att-line SEPARATED BY space.
    APPEND i_att.
    CONCATENATE '--' '' '--
    ' INTO
    i_att-line SEPARATED BY space.
    APPEND i_att.
    i_att-line = ' '.
    APPEND i_att.
    ENDAT.
    gv_days = i_rep-bdter - gv_date.
    lv_date1 = i_rep-bdter + 5.
    lv_date2 = i_rep-bdter + 10.
    MOVE i_rep-menge TO lv_menge.
    WRITE i_rep-bdter TO lv_date3.
    IF gv_days = 10.
    IF i_rep-aufnr <> space.
    CONCATENATE i_rep-rsnum i_rep-matnr lv_menge lv_date3
    i_rep-aufnr 'is due for 10 days. Please collect'(009)
    INTO gv_text SEPARATED BY space.
    ELSE.
    CONCATENATE i_rep-rsnum i_rep-matnr lv_menge lv_date3
    i_rep-kostl 'is due for 10 days. Please collect'(009)
    INTO gv_text SEPARATED BY space.
    ENDIF.
    i_att-line = gv_text.
    APPEND i_att.
    CLEAR i_att.
    CLEAR gv_text.
    ENDIF.
    IF gv_days = 5.
    IF i_rep-aufnr <> space.
    CONCATENATE i_rep-rsnum i_rep-matnr lv_menge lv_date3
    i_rep-aufnr 'is due for 5 days. Please collect'(010)
    INTO gv_text SEPARATED BY space.
    ELSE.
    CONCATENATE i_rep-rsnum i_rep-matnr lv_menge lv_date3
    i_rep-kostl 'is due for 5 days. Please collect'(010)
    INTO gv_text SEPARATED BY space.
    ENDIF.
    i_att-line = gv_text.
    APPEND i_att.
    CLEAR i_att.
    CLEAR gv_text.
    ENDIF.
    IF gv_date = lv_date1.
    IF i_rep-aufnr <> space.
    CONCATENATE i_rep-rsnum i_rep-matnr lv_menge lv_date3
    i_rep-aufnr 'is getting cancelled on'(011) lv_date2
    INTO gv_text SEPARATED BY space.
    ELSE.
    CONCATENATE i_rep-rsnum i_rep-matnr lv_menge lv_date3
    i_rep-kostl 'is getting cancelled on'(011) lv_date2
    INTO gv_text SEPARATED BY space.
    ENDIF.
    i_att-line = gv_text.
    APPEND i_att.
    CLEAR i_att.
    CLEAR gv_text.
    ENDIF.
    IF gv_date = lv_date2.
    IF i_rep-aufnr <> space.
    CONCATENATE i_rep-rsnum i_rep-matnr lv_menge lv_date3
    i_rep-aufnr 'is being cancelled'(012)
    INTO gv_text SEPARATED BY space.
    ELSE.
    CONCATENATE i_rep-rsnum i_rep-matnr lv_menge lv_date3
    i_rep-kostl 'is being cancelled'(012)
    INTO gv_text SEPARATED BY space.
    ENDIF.
    i_att-line = gv_text.
    APPEND i_att.
    CLEAR i_att.
    CLEAR gv_text.
    Mark the Reservation Item 'DELETED' using BDC.
    UPDATE resb SET xloek = c_x.
    PERFORM delete_item_resb.
    ENDIF.
    AT END OF usnam.
    IF ( gv_days = 10 OR gv_days = 5 OR gv_date = lv_date1 OR
    gv_date = lv_date2 ).
    Read the User who creates the Reservn and send a mail alert to him
    CLEAR : i_receivers,gv_ernam.
    REFRESH: i_receivers.
    READ TABLE i_rep INDEX lv_tabix.
    gv_ernam = i_rep-usnam.
    IF gv_ernam <> space.
    Send mail Alert to PR Creator(SAP inbox)
    PERFORM send_alert_data.
    Send Mail to External Mail ID of the SAP USER
    PERFORM send_mail_external.
    ENDIF.
    ENDIF.
    ENDAT.
    ENDLOOP.
    ENDFORM. " Process_data
    *& Form delete_item_resb
    Set the Deletion Indicator for the Res. Item in RESB
    FORM delete_item_resb.
    gv_bdc = 'N'.
    Perform to fill it_bdcdata.
    PERFORM fill_it_bdcdata.
    Call the Transaction MB22
    CALL TRANSACTION 'MB22' USING it_bdcdata MODE 'A' UPDATE 'S'
    MESSAGES INTO it_messages.
    IF sy-subrc <> 0.
    gv_flag = 1.
    If error occurs in transaction mode run bdc session for that data
    PERFORM bdc_process.
    ENDIF.
    Handles error messages
    PERFORM error_messages.
    CLEAR : it_bdcdata, it_messages.
    REFRESH : it_bdcdata, it_messages.
    IF gv_bdc = 'O'.
    close bdc if it is open
    PERFORM close_bdc.
    ENDIF.
    ENDFORM. "delete_item_resb
    *& Form FILL_IT_BDCDATA
    Filling Bdcdata structure with data
    FORM fill_it_bdcdata.
    PERFORM bdc_dynpro USING 'SAPMM07R' '0560'.
    PERFORM bdc_field USING 'BDC_CURSOR'
    'RM07M-RSPOS'.
    PERFORM bdc_field USING 'BDC_OKCODE'
    '/00'.
    PERFORM bdc_field USING 'RM07M-RSNUM'
    i_rep-rsnum.
    PERFORM bdc_field USING 'RM07M-RSPOS'
    i_rep-rspos.
    PERFORM bdc_dynpro USING 'SAPMM07R' '0510'.
    PERFORM bdc_field USING 'BDC_CURSOR'
    'RESB-XLOEK'.
    PERFORM bdc_field USING 'BDC_OKCODE'
    '/00'.
    PERFORM bdc_field USING 'RESB-XLOEK'
    c_x.
    PERFORM bdc_dynpro USING 'SAPLKACB' '0002'.
    PERFORM bdc_field USING 'BDC_CURSOR'
    'COBL-KOSTL'.
    PERFORM bdc_field USING 'BDC_OKCODE'
    '=ENTE'.
    PERFORM bdc_dynpro USING 'SAPMM07R' '0510'.
    PERFORM bdc_field USING 'BDC_CURSOR'
    'RESB-ERFMG'.
    PERFORM bdc_field USING 'BDC_OKCODE'
    '=BU'.
    PERFORM bdc_dynpro USING 'SAPLKACB' '0002'.
    PERFORM bdc_field USING 'BDC_CURSOR'
    'COBL-KOSTL'.
    PERFORM bdc_field USING 'BDC_OKCODE'
    '=ENTE'.
    ENDFORM. " FILL_IT_BDCDATA
    *& Form BDC_DYNPRO
    Filling the it_bdcdata table with program name & screen number
    FORM bdc_dynpro USING program LIKE bdcdata-program
    dynpro LIKE bdcdata-dynpro.
    it_bdcdata-program = program.
    it_bdcdata-dynpro = dynpro.
    it_bdcdata-dynbegin = 'X'.
    APPEND it_bdcdata.
    CLEAR it_bdcdata.
    ENDFORM. " BDC_DYNPRO
    *& Form BDC_FIELD
    Filling it_bdcdata with field name and field value
    FORM bdc_field USING fnam LIKE bdcdata-fnam
    fval.
    it_bdcdata-fnam = fnam.
    it_bdcdata-fval = fval.
    APPEND it_bdcdata.
    CLEAR it_bdcdata.
    ENDFORM. " BDC_FIELD
    *& Form ERROR_MESSAGES
    Displaying error messages
    FORM error_messages.
    CALL FUNCTION 'FORMAT_MESSAGE'
    EXPORTING
    id = sy-msgid
    lang = sy-langu
    IMPORTING
    msg = gv_mesg
    EXCEPTIONS
    not_found = 1
    OTHERS = 2.
    LOOP AT it_messages WHERE msgtyp = 'E'.
    WRITE : / 'Message :'(001) ,gv_mesg.
    CLEAR it_messages.
    ENDLOOP.
    ENDFORM. " ERROR_MESSAGES
    *& Form BDC_PROCESS
    Open bdc session if call transaction fails
    FORM bdc_process.
    IF gv_bdc = 'N'.
    open bdc session
    PERFORM open_bdc.
    gv_bdc = 'O'.
    ENDIF.
    IF gv_bdc = 'O'.
    insert data into bdc session
    PERFORM insert_bdc.
    ENDIF.
    ENDFORM. " BDC_PROCESS
    *& Form OPEN_BDC
    Calling function module to open bdc session
    FORM open_bdc.
    CALL FUNCTION 'BDC_OPEN_GROUP'
    EXPORTING
    client = sy-mandt
    group = 'ZMM'
    keep = 'X'
    user = sy-uname
    EXCEPTIONS
    client_invalid = 1
    destination_invalid = 2
    group_invalid = 3
    group_is_locked = 4
    holddate_invalid = 5
    internal_error = 6
    queue_error = 7
    running = 8
    system_lock_error = 9
    user_invalid = 10
    OTHERS = 11.
    ENDFORM. " OPEN_BDC
    *& Form INSERT_BDC
    Insert it_bdcdata into bdc by calling function module bdc_insert
    FORM insert_bdc.
    CALL FUNCTION 'BDC_INSERT'
    EXPORTING
    tcode = 'MB22'
    TABLES
    dynprotab = it_bdcdata
    EXCEPTIONS
    internal_error = 1
    not_open = 2
    queue_error = 3
    tcode_invalid = 4
    printing_invalid = 5
    posting_invalid = 6
    OTHERS = 7.
    ENDFORM. " INSERT_BDC
    *& Form CLOSE_BDC
    Closing bdc session
    FORM close_bdc.
    CALL FUNCTION 'BDC_CLOSE_GROUP'
    EXCEPTIONS
    not_open = 1
    queue_error = 2
    OTHERS = 3.
    ENDFORM. " CLOSE_BDC
    *& Form send_alert_data
    Send Alert for the Expired Contract
    FORM send_alert_data .
    CLEAR: gv_lines,i_receivers, i_header, i_contents,i_doc_data.
    REFRESH : i_receivers,i_header,i_contents.
    DESCRIBE TABLE i_att LINES gv_lines.
    i_receivers-receiver = gv_ernam.
    i_receivers-receiver = 'SSHEIK'.
    i_receivers-rec_type = 'B'.
    i_receivers-rec_date = sy-datum.
    i_receivers-express = 'X'.
    i_receivers-com_type = 'INT'.
    i_receivers-notif_del = 'X'.
    APPEND i_receivers.
    i_doc_data-obj_name = 'SAPoffice'(013).
    i_doc_data-obj_descr = 'Reservations Reminder'(014).
    i_doc_data-obj_langu = 'E'.
    i_doc_data-no_change = c_x.
    i_doc_data-obj_prio = 1.
    i_doc_data-priority = 1.
    i_doc_data-doc_size = ( gv_lines - 1 ) * 255 + 135.
    i_pack_list-transf_bin = c_x.
    i_pack_list-head_start = '1'.
    i_pack_list-head_num = '1'.
    i_pack_list-body_start = '1'.
    i_pack_list-body_num = gv_lines.
    i_pack_list-doc_type = 'DOC'.
    i_pack_list-obj_name = 'SAPoffice'(013).
    i_pack_list-obj_descr = 'Reservations Reminder'(014).
    i_pack_list-obj_langu = 'E'.
    i_pack_list-doc_size = ( gv_lines - 1 ) * 255 + 135.
    APPEND i_pack_list.
    i_header-line = 'Header'. APPEND i_header.
    Data for contents
    i_contents-line = 'Please find the Reservations Due List'(016).
    APPEND i_contents.
    CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
    EXPORTING
    document_data = i_doc_data
    PUT_IN_OUTBOX = 'X'
    IMPORTING
    SENT_TO_ALL =
    NEW_OBJECT_ID =
    TABLES
    packing_list = i_pack_list
    object_header = i_header
    contents_bin = i_att
    contents_txt = i_contents
    receivers = i_receivers
    EXCEPTIONS
    too_many_receivers = 1
    document_not_sent = 2
    document_type_not_exist = 3
    operation_no_authorization = 4
    parameter_error = 5
    x_error = 6
    enqueue_error = 7
    OTHERS = 8.
    IF sy-subrc = 0.
    MESSAGE i000 WITH 'Mail Sucessfully sent'(017).
    ELSE.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.
    ENDFORM. " send_alert_data
    *& Form send_mail_external
    Send mail to External MAIL ID of the PR Creator
    FORM send_mail_external.
    DATA : lv_str(24), lv_str1(40),
    lv_pernr LIKE adr6-persnumber,
    lv_adrnr LIKE adr6-addrnumber,
    lv_usrid LIKE pa0105-usrid,
    lv_mail LIKE adr6-smtp_addr,
    lv_sendor TYPE syuname,
    lv_receiver TYPE string,
    lv_header TYPE string,
    lv_body TYPE string.
    CLEAR: lv_pernr, lv_usrid, lv_adrnr,
    lv_mail, lv_sendor, lv_receiver,
    lv_header, lv_body .
    lv_usrid = gv_ernam.
    SELECT SINGLE persnumber addrnumber FROM usr21
    INTO (lv_pernr,lv_adrnr)
    WHERE bname = lv_usrid.
    IF sy-subrc = 0.
    SELECT SINGLE smtp_addr INTO lv_mail FROM adr6
    WHERE addrnumber = lv_adrnr AND
    persnumber = lv_pernr.
    IF sy-subrc <> 0.
    CONCATENATE lv_usrid '@anc.com' INTO lv_mail.
    lv_receiver = lv_mail.
    ELSE.
    lv_receiver = lv_mail.
    ENDIF.
    lv_receiver = '[email protected]'.
    lv_sendor = 'JALKHATAM'.
    lv_header = 'Reservations Reminder'(014).
    lv_str = 'Pls check your SAP Inbox'(019).
    lv_str1 = 'for the status of Reservations Due List'(020).
    CONCATENATE lv_str lv_str1 INTO lv_body
    SEPARATED BY space.
    Call Function Module To send mail
    CALL FUNCTION 'UWSP_SEND_MAIL_TO_WEB'
    EXPORTING
    id_header = lv_header
    id_body = lv_body
    id_receiver = lv_receiver
    id_sender = lv_sendor
    ID_HTML_MAIL =
    id_commit_work = 'X'
    EXCEPTIONS
    error = 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.
    ENDIF.
    ENDFORM. " send_mail_external
    <b>Reward points for useful Answers</b>
    Regards
    Ashu

  • Can we call a bdc program from report program

    hi
    can we call a bdc program from report program

    Yes you can any program from another program using
    SUBMIT <repname>   statement
    SUBMIT <repname> USING SELECTION-SCREEN dynnr.
    or
    SUBMIT <repname> VIA SELECTION-SCREEN USING SELECTION-SET variant
    SUBMIT <repname> VIA SELECTION-SCREEN WITH SELECTION-TABLE rspar
    etc.
    Regards
    Prax

  • Calling custom dialog screen from Standard Transaction(user Exit)

    Hi, I'm calling Standard Transaction from a Custom Screen. I'm calling a custom screen again with in standard transaction (implemented custom screen thru user exits using macros). But when I click 'continue/cancel' in the custom screen, control is going back to main cutom screen rather go back to standard transaction. Could anyone please help me out how to come back to standard transaction from custom screen rather going back to main cutom screen.
    ***INCLUDE LZ_R_FORWARD_FORWARD_LOADI01 .
    *&      Module  USER_COMMAND_9000  INPUT
    MODULE user_command_9000 INPUT.
      CASE sy-ucomm.
        WHEN 'EXEC'.
          PERFORM validate_popup_data.
          IF flag_error_screen NE 'X'.
            MOVE-CORRESPONDING ZFFL_POPUP to var_ZFFL_POPUP.
            clear flag_return.
            SET SCREEN 0.
            LEAVE SCREEN.
          ENDIF.
        WHEN 'CANC'.
          flag_return = 'X'.
          SET SCREEN 0.
          LEAVE SCREEN.
        WHEN OTHERS.
      ENDCASE.
    ENDMODULE.                 " USER_COMMAND_9000  INPUT
    *&      Module  exit_9000  INPUT
    MODULE exit_9000 INPUT.
      CASE sy-ucomm.
        WHEN 'CANC'.
    *      MOVE perf_flag TO lbpla_exist_flag.
          flag_return = 'X'.
          SET SCREEN 0.
          LEAVE SCREEN.
      ENDCASE.
    ENDMODULE.                 " exit_9000  INPUT
    Thanks in advance.

    Hi
    So the command SET SCREEN 0. LEAVE SCREEN. should "place" the program just after the calling of the popup so here:
    FUNCTION z_call_screen.
    * Call the Pop up screen
        CALL SCREEN 9000 STARTING AT 35 05.
    "<------------------------- The program should be here after going back from popup 9000
    ENDFUNCTION.
    Is it true?
    Max

  • How to know the tcodes/programs that uses a user exit

    Hi, anybody knows given the user exit (function module) how will i know the tcodes/programs that uses it? the where used list doesn't return any.

    Hi,
      You will find the enhancement for the exit EXIT_SAPLCOZF_001 ,go to se11>enetr MODSAP Table name in Memeber postion you can enter your function module name EXIT_SAPLCOZF_001>now you will get the enhancement COZF0001 (trx SMOD)
    yOU will find whre the exit is called from the t.code Try this method:
    All exits have the program name as part of their own name, for eg, EXIT_SAPLCOZF_001. In this, SAPLCOZF is the program that the exit is called in, you can use this program name and search for transaction codes related to the program (in SE93).
    The only hitch in the above method is when the program name is a function group program name (SAPL*), in which case you will have to drill down into the function group to find the corresponding tcode.
    Or
    Go to SMOD transaction.
    Enter the Enhancement Name in SMOD.
    Open in Display mode.
    Now get the package name from the window.
    Now go to transaction SE80.
    Choose package from the listbox
    and enter the package name.
    Now it will display the list of Transactions associated with the project.
    Regards
    Kiran Sure

  • How to identify BW caller in Sap R/3 Data Source user exit

    Hi,
    I have the following question :
    I use the same R/3 extractor to load two different SAP BW system. Before, the data must be enriched by a user exit process ( CMOD ).
    In this exit, the treatment for each datasource is identified by the case clause but I have to do some different treatment for each BW target for the same datasource
    CASE i_datasource.
    when 'MyDatasource'
        if BW Caller  = BW 1
           Data treatment for BW 1
        else .
        if BW Caller  = BW 2
           Data treatment for BW 2
        endif.
    Do you know the way to identify the SAP BW system caller in the R/3 user exit in order to aplly a specific treatment for the same datasource ?
    Thanks for your help.
    Marc

    hi,
    not very nice but and not really satisfying:
    if the users of the remote-users for the logon from the BWs onto the one R/3 differ you could use sy-uname to check what bw is extracting ...
    everything else is a bit more complex
    hth
    cheers
    sven

  • Does the background task support BDC program in Workflow?

    Hi Gurus,
    Environment:
    ECC 6.0
    WAS 640
    I've configured a task using Class method, in which a BDC program is called.
    When the task is set as background, it doesn't work. The workflow is suspended at this step.
    However,  when i unselected background option, it was all ok. The workitem is displayed in the mailbox, and can be executed through the mail box.
    The BDC mode is as follows,
      opt-dismode =  'N' .
      opt-updmode = 'S' .    
      opt-cattmode = 'N'.   
      opt-racommit = 'X'.
      opt-nobinpt = 'X'.
    Is it that the background task does not support BDC program?
    or any other reasons?
    Thanks.

    Hi,
    BDC will work in workflow. I done in one of my Project.
    Convert the BDC into FM and call it in workflow, Otherwise, in the FM call your BDC Program and map it workflow.
    Check the binding whether the values are passing or not.
    Regards,
    Surjith

  • Submission of BDC Program in Module Pool fails

    HI,
    I have written the BDC Program to change the position text using 'PP01' .  When it is executed, its changing the value correctly.
    In my module Pool Program, i am calling the BDC Program using SUBMIT as background job . But it throws an RUN TIME ERROR.
    Could you please let me know, whether is this possible or not?
    Thanks in advance.
    Thanks,
    K.Tharani

    Hi Tharani.
    Please check whether u has been used OOPS  ALV (using Costom container)in module pool programming. If that was the case, system throws an rum time error.
    Regards,
    surya.

  • User include structure and routines/program/user exits

    Hello Gurus,
         following is the step for modify the field catalog in material determination .
    Modify the field catalog (OV26)
    1.     Add the new field to the user include structure:
    o     Header data KOMKDZ
    o     Item data KOMPDZ.
    2.     Add coding to the routines for assigning values to the new fields in order processing in program MV45AFZA. Use user exits:
    o     USEREXIT_MOVE_FIELD_TO_KOMKD (header fields)
    o     USEREXIT_MOVE_FIELD_TO_KOMPD (item fields)
    3.     Add the new field to the field catalog (Customizing activity Basic Functions &#61614; Material Determination &#61614; Maintain prerequisites for material determination &#61614; Maintain field catalog).
    Will you please tell me what the step 1 and step 2 mean ?  and what 's the user include structure and USEREXIT_MOVE_FIELD_TO_KOMKD/USEREXIT_MOVE_FIELD_TO_KOMPD and program MV45AFZA ?
    thanks very much!

    Hi,
    KOMKD is cummunication header and KOMPD is communication item which are actually contained in KOMGD structure. So automatically when you add a field to either of header or item it becomes a part of KOMGD. And moreover KOMGD contains all the fields of KOMKD and KOMPD which are required for materail determination.
    USEREXIT_MOVE_FIELD_TO_KOMKD
    Use this user exit to include or assign values to additional header fields in the communication structure KOMKD taken as a basis for the material determination. This is described in detail in the section "New fields for material determination" .
    USEREXIT_MOVE_FIELD_TO_KOMPD
    Use this user exit to include or assign values to additional item fields in the communication structure KOMPD taken as a basis for the material determination. This is described in detail in the section "New fields for material determination ".
    regards
    sadhu kishore

  • What is difference between User Exits and BAPI

    hello sap gurus
    what is difference between User Exits and BAPIs

    http://www.sap-img.com/abap/what-is-user-exits.htm
    www.****************
    Where as this customer exits are again divided into:
    1. Menu Exits.
    2. Field Exits.
    3. Screen Exits.
    4. Function module exits.
    These all the things comes under Enhancements.
    User exits
    1.A user exit is a three character code that instructs the system to access a program during system processing.SXX: S is for standard exits that are delivered by SAP.
    XX represents the 2-digit exit number.UXX: U is for user exits that are defined by the user. XX represents the 2-digit exit number
    2.USER EXITS are FORMS and are called by SAP standard programs
    using PERFORM.
    3.Inside the form (user exit) you can read and change almost
    any global data from host program.
    4. User exits are more flexible because you have more information to use in your code but on the other hand , it is very easy to manipulate erroneously global data and lead the standard program to a dump or even to make database inconsistent.
    5.While changing User-exit,Access Key is required,
    BAPI is nothing function module but which is remote enabled, means you can access this fm through other SAP or non-SAP system by assingning to business object,which we can crea in SWO1 transaction.
    more details see WWW.****************
    reward if helpful

  • ME28 user exit - sy-ucomm not available

    Hi experts,
    I have a requirement to check sy-ucomm in the user exit EXIT_SAPLEBND_002 which is triggered by transaction ME28 - convert a planned order to purchase requisition. Immediately after pressing the release button for the purchase document the SY-UCOMM value is '%_GC 102 2'.
    When the program control reaches the user-exit, SY-UCOMM is already cleared. Analysing the flow shows it is cleared by the method,
    CL_GUI_CFW=>DISPATCH. This is totally the ALV way of handling things. The ALV control passes on to call the function module BAPI_PO_RELEASE which inturn calls the user exit.
    The question is?? How to get the SY_UCOMM in the user exit. Has any one has ever experienced this before. Your answers are much appreciated.

    Ok Guys
    Sorry for my ignorance.But i think that i don't udesrtand correctly .sorry.
    1-you go to ME28 and do your process (click)
    2-this process pass by exit .
    3-I dont understand the ALV  in this case.
    Can you send images of screens with process ?
    I think maybe you could use assign but i need know more about it.
    thanks and sorry again.

  • Help  needed in BAdi and user-exits

    Hi ,
       Can any one send me the procedure how to find out user-exits and about BAdi's.
    Thanks in advance
    Uday

    hi Uday,
    Welcome to <b>SDN</b>
    here is the sample program to find the user exits
    Finding the user-exits of a SAP transaction code
    Finding the user-exits of a SAP transaction code
    Enter the transaction code in which you are looking for the user-exit
    and it will list you the list of user-exits in the transaction code.
    Also a drill down is possible which will help you to branch to SMOD.
    Written by : SAP Basis, ABAP Programming and Other IMG Stuff
                 http://www.sap-img.com/*
    report zuserexit no standard page heading.
    tables : tstc, tadir, modsapt, modact, trdir, tfdir, enlfdir.
             tables : tstct.
    data : jtab like tadir occurs 0 with header line.
    data : field1(30).
    data : v_devclass like tadir-devclass.
    parameters : p_tcode like tstc-tcode obligatory.
    select single * from tstc where tcode eq p_tcode.
    if sy-subrc eq 0.
       select single * from tadir where pgmid = 'R3TR'
                        and object = 'PROG'
                        and obj_name = tstc-pgmna.
       move : tadir-devclass to v_devclass.
          if sy-subrc ne 0.
             select single * from trdir where name = tstc-pgmna.
             if trdir-subc eq 'F'.
                select single * from tfdir where pname = tstc-pgmna.
                select single * from enlfdir where funcname =
                tfdir-funcname.
                select single * from tadir where pgmid = 'R3TR'
                                   and object = 'FUGR'
                                   and obj_name eq enlfdir-area.
                move : tadir-devclass to v_devclass.
              endif.
           endif.
           select * from tadir into table jtab
                         where pgmid = 'R3TR'
                           and object = 'SMOD'
                           and devclass = v_devclass.
            select single * from tstct where sprsl eq sy-langu and
                                             tcode eq p_tcode.
            format color col_positive intensified off.
            write:/(19) 'Transaction Code - ',
                 20(20) p_tcode,
                 45(50) tstct-ttext.
                        skip.
            if not jtab[] is initial.
               write:/(95) sy-uline.
               format color col_heading intensified on.
               write:/1 sy-vline,
                      2 'Exit Name',
                     21 sy-vline ,
                     22 'Description',
                     95 sy-vline.
               write:/(95) sy-uline.
               loop at jtab.
                  select single * from modsapt
                         where sprsl = sy-langu and
                                name = jtab-obj_name.
                       format color col_normal intensified off.
                       write:/1 sy-vline,
                              2 jtab-obj_name hotspot on,
                             21 sy-vline ,
                             22 modsapt-modtext,
                             95 sy-vline.
               endloop.
               write:/(95) sy-uline.
               describe table jtab.
               skip.
               format color col_total intensified on.
               write:/ 'No of Exits:' , sy-tfill.
            else.
               format color col_negative intensified on.
               write:/(95) 'No User Exit exists'.
            endif.
          else.
              format color col_negative intensified on.
              write:/(95) 'Transaction Code Does Not Exist'.
          endif.
    at line-selection.
       get cursor field field1.
       check field1(4) eq 'JTAB'.
       set parameter id 'MON' field sy-lisel+1(10).
       call transaction 'SMOD' and skip first   screen.
    *---End of Program
    To find the function exit
    REPORT ZV_FIND_EXIT NO STANDARD PAGE HEADING.
    TABLES : TSTC, TADIR, MODSAPT, MODACT, TRDIR, TFDIR, ENLFDIR.
    TABLES : TSTCT.
    DATA : JTAB LIKE TADIR OCCURS 0 WITH HEADER LINE.
    DATA : FIELD1(30).
    DATA : V_DEVCLASS LIKE TADIR-DEVCLASS.
    PARAMETERS : P_TCODE LIKE TSTC-TCODE OBLIGATORY.
    SELECT SINGLE * FROM TSTC WHERE TCODE EQ P_TCODE.
    IF SY-SUBRC EQ 0.
    SELECT SINGLE * FROM TADIR WHERE PGMID = 'R3TR'
    AND OBJECT = 'PROG'
    AND OBJ_NAME = TSTC-PGMNA.
    MOVE : TADIR-DEVCLASS TO V_DEVCLASS.
    IF SY-SUBRC NE 0.
    SELECT SINGLE * FROM TRDIR WHERE NAME = TSTC-PGMNA.
    IF TRDIR-SUBC EQ 'F'.
    SELECT SINGLE * FROM TFDIR WHERE PNAME = TSTC-PGMNA.
    SELECT SINGLE * FROM ENLFDIR WHERE FUNCNAME =
    TFDIR-FUNCNAME.
    SELECT SINGLE * FROM TADIR WHERE PGMID = 'R3TR'
    AND OBJECT = 'FUGR'
    AND OBJ_NAME EQ ENLFDIR-AREA.
    MOVE : TADIR-DEVCLASS TO V_DEVCLASS.
    ENDIF.
    ENDIF.
    SELECT * FROM TADIR INTO TABLE JTAB
    WHERE PGMID = 'R3TR'
    AND OBJECT = 'SMOD'
    AND DEVCLASS = V_DEVCLASS.
    SELECT SINGLE * FROM TSTCT WHERE SPRSL EQ SY-LANGU AND
    TCODE EQ P_TCODE.
    FORMAT COLOR COL_POSITIVE INTENSIFIED OFF.
    WRITE:/(19) 'Transaction Code - ',
    20(20) P_TCODE,
    45(50) TSTCT-TTEXT.
    SKIP.
    IF NOT JTAB[] IS INITIAL.
    WRITE:/(95) SY-ULINE.
    FORMAT COLOR COL_HEADING INTENSIFIED ON.
    WRITE:/1 SY-VLINE,
    2 'Exit Name',
    21 SY-VLINE ,
    22 'Description',
    95 SY-VLINE.
    WRITE:/(95) SY-ULINE.
    LOOP AT JTAB.
    SELECT SINGLE * FROM MODSAPT
    WHERE SPRSL = SY-LANGU AND
    NAME = JTAB-OBJ_NAME.
    FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
    WRITE:/1 SY-VLINE,
    2 JTAB-OBJ_NAME HOTSPOT ON,
    21 SY-VLINE ,
    22 MODSAPT-MODTEXT,
    95 SY-VLINE.
    ENDLOOP.
    WRITE:/(95) SY-ULINE.
    DESCRIBE TABLE JTAB.
    SKIP.
    FORMAT COLOR COL_TOTAL INTENSIFIED ON.
    WRITE:/ 'No of Exits:' , SY-TFILL.
    ELSE.
    FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
    WRITE:/(95) 'No User Exit exists'.
    ENDIF.
    ELSE.
    FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
    WRITE:/(95) 'Transaction Code Does Not Exist'.
    ENDIF.
    AT LINE-SELECTION.
    GET CURSOR FIELD FIELD1.
    CHECK FIELD1(4) EQ 'JTAB'.
    SET PARAMETER ID 'MON' FIELD SY-LISEL+1(10).
    CALL TRANSACTION 'SMOD' AND SKIP FIRST SCREEN.
    or
    1. in se11, goto table MODSAP
    View table contents
    2. in Type field, enter 'E' (for function exit)
    3. For that tcode, u should know the program name.
    eg. SAPLLMOB
    4. then type SAPLLMOB and execute
    or
    REPORT z34331_user_exit .
    TABLES : tstc, "SAP Transaction Codes
    tadir, "Directory of Repository Objects
    modsapt, "SAP Enhancements - Short Texts
    modact, "Modifications
    trdir, "System table TRDIR
    tfdir, "Function Module
    enlfdir, "Additional Attributes for Function Modules
    tstct. "Transaction Code Texts
    DATA : jtab LIKE tadir OCCURS 0 WITH HEADER LINE.
    DATA : field1(30).
    DATA : v_devclass LIKE tadir-devclass.
    SELECTION-SCREEN BEGIN OF BLOCK a01 WITH FRAME TITLE text-001.
    SELECTION-SCREEN SKIP.
    PARAMETERS : p_tcode LIKE tstc-tcode OBLIGATORY.
    SELECTION-SCREEN SKIP.
    SELECTION-SCREEN END OF BLOCK a01.
    START-OF-SELECTION.
    Validate Transaction Code
    SELECT SINGLE * FROM tstc
    WHERE tcode EQ p_tcode.
    Find Repository Objects for transaction code
    IF sy-subrc EQ 0.
    SELECT SINGLE * FROM tadir
    WHERE pgmid = 'R3TR'
    AND object = 'PROG'
    AND obj_name = tstc-pgmna.
    MOVE : tadir-devclass TO v_devclass.
    IF sy-subrc NE 0.
    SELECT SINGLE * FROM trdir
    WHERE name = tstc-pgmna.
    IF trdir-subc EQ 'F'.
    SELECT SINGLE * FROM tfdir
    WHERE pname = tstc-pgmna.
    SELECT SINGLE * FROM enlfdir
    WHERE funcname = tfdir-funcname.
    SELECT SINGLE * FROM tadir
    WHERE pgmid = 'R3TR'
    AND object = 'FUGR'
    AND obj_name = enlfdir-area.
    MOVE : tadir-devclass TO v_devclass.
    ENDIF.
    ENDIF.
    Find SAP Modifactions
    SELECT * FROM tadir
    INTO TABLE jtab
    WHERE pgmid = 'R3TR'
    AND object = 'SMOD'
    AND devclass = v_devclass.
    SELECT SINGLE * FROM tstct
    WHERE sprsl EQ sy-langu
    AND tcode EQ p_tcode.
    FORMAT COLOR COL_POSITIVE INTENSIFIED OFF.
    WRITE:/(19) 'Transaction Code - ',
    20(20) p_tcode,
    45(50) tstct-ttext.
    SKIP.
    IF NOT jtab[] IS INITIAL.
    WRITE:/(95) sy-uline.
    FORMAT COLOR COL_HEADING INTENSIFIED ON.
    WRITE:/1 sy-vline,
    2 'Exit Name',
    21 sy-vline ,
    22 'Description',
    95 sy-vline.
    WRITE:/(95) sy-uline.
    LOOP AT jtab.
    SELECT SINGLE * FROM modsapt
    WHERE sprsl = sy-langu AND
    name = jtab-obj_name.
    FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
    WRITE:/1 sy-vline,
    2 jtab-obj_name HOTSPOT ON,
    21 sy-vline ,
    22 modsapt-modtext,
    95 sy-vline.
    ENDLOOP.
    WRITE:/(95) sy-uline.
    DESCRIBE TABLE jtab.
    SKIP.
    FORMAT COLOR COL_TOTAL INTENSIFIED ON.
    WRITE:/ 'No of Exits:' , sy-tfill.
    ELSE.
    FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
    WRITE:/(95) 'No User Exit exists'.
    ENDIF.
    ELSE.
    FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
    WRITE:/(95) 'Transaction Code Does Not Exist'.
    ENDIF.
    Take the user to SMOD for the Exit that was selected.
    AT LINE-SELECTION.
    GET CURSOR FIELD field1.
    CHECK field1(4) EQ 'JTAB'.
    SET PARAMETER ID 'MON' FIELD sy-lisel+1(10).
    CALL TRANSACTION 'SMOD' AND SKIP FIRST SCREEN.
    if u find it useful plz markt the points
    Regards,
    Naveen

  • Supress  some fiels in sales order? user exit?

    can  somebody help me  regarding this. i want to  supress  some fields  in a standard  sales order. i dont want to  delete . i just   want  to supress  some fields  in a standard  sales  order. is there  a  user  exit  for  it? if yes   do tell  me  which  user exit is it and  how to use it?

    hi,
    To make optional / mandatory you can use in IMG - S&D-> Basic > Functions-> Log of incomplete Procedures =>  select the fields > from the tables and the system will check for them (OVA2/VUA2)
    To make a filed entry enabled or grey (non-entry allowed):
    User exits in the program MV45AFZZ-USEREXIT_FIELD_MODIFICATION
    This user exit can be used to modify the attributes of the screen  fields.
    To do this, the screen fields are allocated to so-called modification groups 1 - 4 and can be edited together during a modification in ABAP.
    If a field has no field name, it cannot be allocated to a group. The usage of the field groups (modification group 1-4) is as follows:
    Modification group 1: Automatic modification with transaction MFAW
    Modification group 2: It contains 'LOO' for step loop fields
    Modification group 3: For modifications which depend on check tables or on other fixed information
    Modification group 4: is not used
    The FORM routine is called up for every field of a screen. If you require changes to be made, you must make them in this user exit. This FORM routine is called up by the module FELDAUSWAHL.
    Actually suppressing fielding sales orders userwise is quite easy. We are doing it in our company. For this we use userexit FORM USEREXIT_FIELD_MODIFICATION in MV45AFZZ.
    Below is the sample code
    IF SCREEN-NAME = 'VBKD-ABSSC'.
    AUTHORITY-CHECK OBJECT 'ZMV45AFZZ' ID 'SCRFNAME' FIELD SCREEN-NAME.
      IF sy-subrc = 0.
        SCREEN-INPUT = 1.
      else.
        SCREEN-INPUT = 0.
      ENDIF.
    endif.
    You place the authority check object in authorization profile in the role of the users, who should have access to the field (in this case it is VBKD-ABSSC), and there assign the corresponding fields that are to be accessed via this userexit.
    pls reward points if the answer is helpful
    REgards,
    Murali

  • User Exit or BADI for IW31 when Saving the Service Order

    Dear ABAPers,
            I would like to add one more line in Service order item when saving the Service order in (IW31) at runtime.Is there User Exit or BAdI.It is very Urgent Please help me.
    Thanks & Regards,
    Ashok.

    Hi
    U can go through the tansaction.
      System/ Status
      Double click on program name.
    For badis:
    Search for the Phrase:
      cl_exithandler=>get_instance.
    U will the badi definitions.
    For User exits:
      search for the phrase: CALL CUSTOMER-FUNCTION
      u will get the user exits.
    If it is helpful rewards points.
    Regards
    Pratap.M

Maybe you are looking for