Submit job in user exit

Hi sap expert,
Please guide me for the abap coding. my requirement is when i create outbound delivery note, then press SAVE button, serial number will be automatic proposed.
Now , i process as below sequent.
1. using user exit MV50AFZ1 -> FORM USEREXIT_SAVE_DOCUMENT
in this user exit i submit background job to change oubound delivery
2. in the background job, i call BAPI BAPI_OUTB_DELIVERY_CHANGE to change serial number
Question.
1. This step right or wrong, if wrong, please suggest
2. How to coding --> submit job from the user exit
Thank you in advance
Jean

Hi,
Most of the guys around are with functional experience.
I think you should post this query in SAP-ABAP. U will get
an immediate reply.
Kind Regards
Chakradhar

Similar Messages

  • How do I SUBMIT from a user exit which is called in an update task?

    I want to send an idoc each time there is a goods movement. So, in the user exit of MB_POST_DOCUMENT I am calling IDOC_OUTBOUND_WRITE_TO_DB. This creates an idoc of status 30. However, in order to send the idoc I want to SUBMIT RSEOUT00. I get an ABAP dump on the SUBMIT because MB_POST_DOCUMENT is called in the update task, where SUBMIT is not allowed. Do you know any other way I can execute RSEOUT00 at this moment without having to call it later in batch?
    Thanks!!
    Joy

    Hi Naren,
    Your reply is VERY helpful!! Thank you so much.
    I added  CALL FUNCTION 'RSAP_IDOC_EINBUCHEN_VOM_BIW_4' IN BACKGROUND TASK. I am no longer getting the dump, but my idoc is still a status 03 and not a status 30. Should I expect to see it turn to a status 30? I ran this function directly in SE37 -> Test with the same parameters and it ran perfectly and turned the idoc to a status 03. Is there anything else I need to do in the code?
    Thanks again,
    Joy

  • Infotype 1610 (Job attributes) user exit/BADI?

    Hello Friends
    I want to write some custom code on the event when I Modify the Jobs attributes (IT 1610) via PP02.
    I know that Badi HRPAD00INFTY is used to achieve this for the infotypes 1000, 1001 etc.
    but this does not work with the IT 1610. Please advise.
    Thanks,
    sapper.

    Hi Vimz ,
    what you want to do in IT1610.
    Thanks & Regards,
    Raghunadh Kodali

  • JOB_OPEN cannot be used in user exit, what can I do to raise a job?

    Dear Experts,
    We need to setup a job in user exit ZXM06U43 (when saving purchase order), but JOB_OPEN has 'COMMIT WORK' in it, which is not acceptable in user exit.
    Do you have another method to walk around?
    Thank you for your comments.
    Joanne Wu

    Hi,
    Try this..
    Create a RFC FM...
    In the include ZXM06U43...Call the function module in background task..
    CALL FUNCTION 'Z_RFC_TEST' IN BACKGROUND TASK
    EXPORT.
    In that RFC function module use JOB_OPEN Function module...
    Hope this helps..
    THanks,
    Naren

  • User exit EXIT_SAPLL03T_002 and jobs

    Hi everybody,
    I have a problem with user exit EXIT_SAPLL03T_002 and trx LT12, i put code (the code is in the end) in the user exit in order to update the field QNAME from the standar table LTAP, the sentences for the update are in a job.
    The problem is when a run the LT12, put the order and press enter the trx finish normally, but when i see the jobs resumen (SM37) there isnt any job.
    Thank you for your help, see you.
      INCLUDE ZXLTOU02                                                   *
    DATA:
        WJ_JTANUM LIKE LTAP-TANUM,
        WJ_LGNUM LIKE LTAP-LGNUM,
        WJ_WERKS LIKE LTAP-WERKS,
        WJ_USER LIKE SY-UNAME,
    Parametros para el Job
        l_numero  LIKE tbtcjob-jobcount,    "ID de un job de fondo
        l_fecha   LIKE tbtcjob-laststrtdt,  "Fecha de ejecución más tardía
        l_hora    LIKE tbtcjob-laststrttm,  "Ultima hora de ejecución para
        l_jobname LIKE tbtco-jobname VALUE 'JOB_RF',
        W_USER LIKE SY-UNAME,
        W_HORA LIKE SY-UZEIT,
        W_DIA LIKE SY-DATUM.
    GET PARAMETER ID 'mb_usuario' FIELD W_USER.
    Solo lo realiza para la transaccion LM05 y LM07
    y si es por logueo No SAP
    ***ANTIGUO
    *IF ( SY-TCODE EQ 'LM05' OR
      SY-TCODE EQ 'LM07' OR SY-TCODE EQ 'LM03' OR
      SY-TCODE EQ 'LM04') AND ( W_USER NE '' ).
    **********ACTUALIZADO 07/02*********
    IF ( SY-TCODE EQ 'LM05' OR
       SY-TCODE EQ 'LM07' OR SY-TCODE EQ 'LM03' OR
       SY-TCODE EQ 'LM04' OR SY-TCODE EQ 'LT12' ) AND ( W_USER NE '' ).
    ojo
      UPDATE ZTMB_USERCOLA
        SET STATU = ' ' DOCNUM = ' '
        WHERE
        BNAME = W_USER.
      GET PARAMETER ID 'mb_hora' FIELD W_HORA.
      GET PARAMETER ID 'mb_dia' FIELD W_DIA.
      CALL FUNCTION 'JOB_OPEN'
             EXPORTING
                  jobname          = l_jobname
             IMPORTING
                  jobcount         = l_numero
             EXCEPTIONS
                  cant_create_job  = 1
                  invalid_job_data = 2
                  jobname_missing  = 3
                  OTHERS           = 4.
        SUBMIT ZUPDATE_LTAP
            AND RETURN
              VIA JOB l_jobname NUMBER l_numero
                WITH WJ_TANUM = T_LTAP_VB-TANUM
                WITH WJ_LGNUM = T_LTAP_VB-LGNUM
                WITH WJ_WERKS = T_LTAP_VB-WERKS
                WITH WJ_USER = W_USER.
      Llama a la funcion para cerrar el Job
        CALL FUNCTION 'JOB_CLOSE'
             EXPORTING
                  jobcount             = l_numero
                  jobname              = l_jobname
                  strtimmed            = 'X'  "Inicio inmediato
             EXCEPTIONS
                  cant_start_immediate = 1
                  invalid_startdate    = 2
                  jobname_missing      = 3
                  job_close_failed     = 4
                  job_nosteps          = 5
                  job_notex            = 6
                  lock_failed          = 7
                  OTHERS               = 8.
    ENDIF.
    REPORT ZUPDATE_LTAP .
    PARAMETERS:
          WJ_TANUM LIKE LTAP-TANUM, " Numero de OT
          WJ_LGNUM LIKE LTAP-LGNUM, " Almacen
          WJ_WERKS LIKE LTAP-WERKS, " Centro
          WJ_USER LIKE SY-UNAME,    " Usuario SAP
          W_QNAME LIKE LTAP-QNAME.
    data: w_actual, w_timeout type i.
      Actualiza el campos de usuario
    w_actual = '0'.
    w_timeout = 0.
    while w_actual = '0' and w_timeout < 300.
      w_timeout = w_timeout + 1.
      WAIT UP TO 7 SECONDS.
      UPDATE LTAP
        SET QNAME = WJ_USER ZZRF_BNAME = WJ_USER
      WHERE
        TANUM = WJ_TANUM
            AND
        LGNUM = WJ_LGNUM
            AND
        WERKS = WJ_WERKS.
    AGREGANDO 4 ENERO
      UPDATE ZTMB_USERCOLA
        SET TPICKEO = SY-UZEIT FPICKEO = SY-DATUM
      WHERE
        LGNUM = WJ_LGNUM
            AND
        BNAME = WJ_USER.
    AGREGANDO 4 ENERO
      if sy-subrc = 0.
        w_actual = '1'.
       UPDATE LTAK SET ZZRF_BNAME = WJ_USER
       WHERE TANUM = WJ_TANUM AND
             LGNUM = WJ_LGNUM.
      endif.
      commit work.
    endwhile.

    Hi,
    Check the print parameters. Probably after execution you may be deleting the job.
    You can change the print parameters during runtime.
    CALL FUNCTION 'GET_PRINT_PARAMETERS'
       EXPORTING
         no_dialog                    = 'X'
         user                         = sy-uname
       IMPORTING
      OUT_ARCHIVE_PARAMETERS       =
         out_parameters               = params
         valid                        = ws_valid.
      IF ws_valid <> space.   
        params-pdest = 'LOCL'.  "Destination
        params-primm = ''.      "Print Immediately
        params-prnew = 'X'.     "New Spool Request.
        params-armod = '1'.     "Print: Archiving Mode - Print Only
        params-linct = 65.      "Rows
        params-linsz = 255.     "Cols
        params-paart = 'X_65_255'.
        params-prrec = sy-uname.  "User name
        params-prsap = ''.      "Print: SAP Cover Page
        params-prunx = ''.      "PRINT: Host spool cover page
        params-prcop = '001'.   "number of copies
        SUBMIT zmib_fiber_link_background
               WITH file     = i_file_list-name
               WITH rb1      = space
               WITH rb2      = c_x
               WITH p_launch = c_x
      VIA JOB ws_c_session NUMBER ws_c_jobnum
      EXPORTING LIST TO MEMORY 
        TO SAP-SPOOL
        WITHOUT SPOOL DYNPRO
        SPOOL PARAMETERS params
        AND RETURN.
    endif.
      CALL FUNCTION 'JOB_CLOSE'
           EXPORTING
                jobcount             = ws_c_jobnum
                jobname              = ws_c_session
                strtimmed            = 'X'
           EXCEPTIONS
                cant_start_immediate = 1
                invalid_startdate    = 2
                jobname_missing      = 3
                job_close_failed     = 4
                job_nosteps          = 5
                job_notex            = 6
                lock_failed          = 7
                OTHERS               = 8.
    Also check the sy-subrc after JOB_OPEN.
    Regards
    Subramanian

  • 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

  • Report, back ground job, user exit, function module used

    I have more than 100 Z program and report painter program, user exit, function module for one country, inside this country, there are many company code, for a specific company code, I want to know which Z program/CMOD user exit/function module/back groundjob is used in this company code, any table or transaction can do?
    also can we find all z tables used in this company code?

    May be this url can help you http://it.toolbox.com/wiki/index.php/Find_data_in_your_SAP_system_and_know_which_tables_do_what

  • Trigger a waiting ABAP program from a User Exit of CO01

    Hi all,
       We would like to launch a ABAP program from a User Exit (EXIT_SAPLCOZV_001) of CO01, this ABAP program has a special characteristic: using Function Module RFC_PING_AND_WAIT, so this program will be existing until terminating event coming.
        Our purpose is terminate CO01 normally before finishing of ABAP program. We don't know if it's possible?
        Actually:
           1. when we use SUBMIT ..., the process will stop CO01 (stop not normally) and then launch ABAP program. => This is not suitable for our purpose.
           2. when we use SUBMIT ... and RETURN, CO01 will wait for finishing of ABAP program => This is not suitable for our purpose too, because we wish CO01 terminated normally when ABAP program is still existing and waiting for its terminating event.
    Do you have a solution that is suitable for our purpose, could you please help us?
    (The context is below:
    Time:  Begin-->CO finished> ABAP finished-->    
       Launch CO01 --> Call User Exit --> Call ABAP program for waiting --> CO01 saved normally.
    > ABAP program still waiting ---> waiting for terminating event       
    Thanks a lot,
    Vinh Vo

    Hi,
         Try with the function module BP_EVENT_RAISE, it takes eventid, and eventparm as import parameters in the User exit.
    1) With Eventid, you create a background job of the ABAP program and schedule it. Eventparm can be the Production order number.
    2) So when ever the Event is triggered the FM gets triggered and which in turn run the ABAP program, so the foreground the CO01 transaction runs without waiting for the ABAP program to complete.
    Regards
    Bala Krishna

  • User exit ZXPADU02 - evaluating SY-UCOMM

    Hello everyone,
    I am trying to display an error message whenever someone tries to create a new work schedule rule (P0007-SCHKZ) in infotype 7. However, the error message should just come up when the user is trying to save his data.
    I am using user exit ZXPADU02 for this purpose. My problem is that SY-UCOMM does not seem to hold reliable data in this user exit, and SSCRFIELDS does not seem to be supported at all.
    My code looks like this (only the relevant code snippet in ZXPADU02):
    CASE INNNN-INFTY.
            WHEN '0007'.
          CALL METHOD CL_HR_PNNNN_TYPE_CAST=>PRELP_TO_PNNNN
            EXPORTING PRELP = INNNN
            IMPORTING PNNNN = P0007.
          CALL METHOD CL_HR_PNNNN_TYPE_CAST=>PRELP_TO_PNNNN
            EXPORTING PRELP = PSAVE
            IMPORTING PNNNN = P0007_ALT.
          IF P0007_ALT-SCHKZ <> P0007-SCHKZ
          AND IPSYST-MASSN IS INITIAL " do not warn within an info group of a personnel action
          AND SY-UCOMM = 'UPD'. " only warn when saving the data -> problem here <-
            MESSAGE 'Do not change IT7 directly or else.' TYPE 'I' DISPLAY LIKE 'E'.
            SHOW_DATA_AGAIN = 'X'.
          ENDIF.
    At first glance, the above works nicely.  But this is what happens when I test more thoroughly:
    I create a new period in IT 7, enter a P0007-SCHKZ other than the one that was previously valid, press F11. Some warnings appear (for different reasons), which I dismiss using the Enter key. Afterwards, the above code fires, the error message is being displayed, and I am thrown back into the data screen. So far, so good.
    Now I simply alter the value in the field "Weekly hours" (P0007-WOSTD) and press Enter (!). Again a series of warnings appear, including one that a dataset is going to be deleted (seeing that an IT 7-period with just the same date range already exists). I confirm that with Enter, and the data is being saved. The above code does not fire because I have only pressed Enter - but the data is being saved anyway!
    Looks like a pretty erroneous behavior on the side of the SAP system. The question is whether I have a chance to do something about it in the code.

    Mihir Nagar wrote:
    Dear Petersen,
    Your IF condition seems ok. I doubt on the message statement. Can you replace your message statement with type E.
    MESSAGE 'Do not change IT7 directly or else.' TYPE 'E'.
          ENDIF.
    Hope this works.
    Regards,
    Mihir.
    I did not expect this to work, because normally you use type 'E'-messages only in certain PAI-environments, but it does the job, thank you!
    make use of  field IOPER of the structure  PSYST to check on the infotype actions INS, MOD, COP, DEL...
    In this particular case I did not care, so I did not check that. IT 7 should only be maintained through personnel actions in our case.
    Next you can check with sy-ucomm field the different between "enter" and "save". With "save" sy-ucomm will be 'UPD'.
    That is what I did, but as I described, there was a situation when SY-UCOMM is SPACE, but the system saved anyway due to a prior save attempt.

  • Send email from PA30 user exit

    When I try to send an email from user exit in ZXPADU02 it never makes it to SOST.  WIll always go to SBWP outbox if I set the flag but never gets sent to receiver address.
    If I paste the following code into a report it works fine.  Is there some other parameter for this FM or some additional process needed to send email from a user exit?
        DATA: maildata TYPE sodocchgi1.
        DATA: mailtxt  TYPE TABLE OF solisti1 WITH HEADER LINE.
        DATA: mailrec  TYPE TABLE OF somlrec90 WITH HEADER LINE.
          CLEAR maildata.
          REFRESH: mailtxt, mailrec.
          maildata-obj_name = 'SRVC_EMAIL'.
          maildata-obj_descr = 'Email test'.
          maildata-obj_langu = sy-langu.
          mailtxt-line = 'Test line from user exit'.
          APPEND mailtxt.
          mailrec-receiver = '[email protected]'.
          mailrec-rec_type  = 'U'.
          APPEND mailrec.
          CALL FUNCTION 'SO_NEW_DOCUMENT_SEND_API1'
            EXPORTING
              document_data              = maildata
              document_type              = 'RAW'
              put_in_outbox                = 'X'
              commit_work                  = 'X'
            TABLES
              object_header                = mailtxt
              object_content               = mailtxt
              receivers                       = mailrec
            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.

    Put the function call 'SO_NEW_DOCUMENT_SEND_API1'
    in a report Program & SUBMIT that report from ZXPADU02.
    Arya

  • Processing of a BDC  in background which internally triggers user exits

    Hi experts,
    I have a req. where in a BDC program would internally trigger a user exit to update values.The program is running well in the foreground and in display with errors.But in background it throws a "System error when creating a control".Can you please let me know the exact reason for this.
    Thanks and Regards,
    Anitha

    i think there is one option 'After Job' in SM36
    this might be helpful to you
    regards
    if you are creating your jobs via SM36, you should be able to to create the second job using
    'After Job' option with the 'Start Status Dependent' checkbox switched on. This way the
    second job will not start unless the first job finishes successfully.
    Message was edited by: Surpreet Singh Bal

  • To find out user exit/ badi for the VT01n transaction triggered in Save

    Hi Friends,
              I have the following requirement and for this appropriate user exit/ badi should be needed which will trigger during saving of the shipment.
    Cass shipment type (VTTK-ADD03) field needs to be required and should be automatically populated upon creation of the shipment document.  The rules for populating the value (SO, ST, PO and RA) are as follows:
    If any of the orders on the shipment are customer order types, then the CASS shipment type should be a SO,
    If all of the orders are STO orders, then the Cass shipment type should be "ST",
    If all of the orders are PO orders, then the Cass shipment type should be "PO" , and
    If all of the orders are customer return orders, then the Cass shipment type should be "RA".
    I have tried with the 3 badi available and 7 to 8 user exit, but it won't work.
    Thanking a lot in advance for giving the solution.
    With Regards,
    Ajit.

    Hi,
    This code will give you all the user-exits.
    Code:
    & Report ZPJA_PM002 (Ver4) &
    & PJA Consultancy Services (www.pjas.com) &
    & This report attmpts to find Enhancements, Program-Exits, BADIs &
    & and Business Transaction Events in a particular program/tcode. &
    & Other search options: &
    & Program: RPR_ABAP_SOURCE_SCAN &
    & FModule: &
    & Text Elements: &
    & P_DEVC Show user-exits from development class &
    & P_LIMIT Limit submit program selection &
    & P_FUNC Show function modules &
    & P_SUBM Show submit programs &
    & S01 Selection data (TCode takes precedence over program name) &
    report zpja_pm002
    no standard page heading
    line-size 221.
    data: tabix like sy-tabix,
    w_linnum type i,
    w_off type i,
    w_index like sy-tabix,
    w_include like trdir-name,
    w_prog like trdir-name,
    w_incl like trdir-name,
    w_area like rs38l-area,
    w_level,
    w_fsel like sy-ucomm, " Determination of screen field
    w_str(50) type c,
    w_funcname like tfdir-funcname.
    constants: c_fmod(40) type c value 'Function modules selected: ',
    c_subm(40) type c value 'Submit programs selected: ',
    c_col1(12) type c value 'Enhanmt Type',
    c_col2(40) type c value 'Enhancement',
    c_col3(30) type c value 'Program/Include',
    c_col4(20) type c value 'Enhancement Name',
    c_col5(40) type c value 'Enhancement Description',
    c_col6(8) type c value 'Project',
    c_col7(1) type c value 'S',
    c_col8(12) type c value 'ChangeName',
    c_col9(10) type c value 'ChangeDate'.
    Work Areas: ABAP Workbench
    data: begin of wa_d010inc.
    data: master type d010inc-master.
    data: end of wa_d010inc.
    data: begin of wa_tfdir.
    data: funcname type tfdir-funcname,
    pname type tfdir-pname,
    include type tfdir-include.
    data: end of wa_tfdir.
    data: begin of wa_tadir.
    data: devclass type tadir-devclass.
    data: end of wa_tadir.
    data: begin of wa_tstc.
    data: pgmna type tstc-pgmna.
    data: end of wa_tstc.
    data: begin of wa_tstcp.
    data: param type tstcp-param.
    data: end of wa_tstcp.
    data: begin of wa_enlfdir.
    data: area type enlfdir-area.
    data: end of wa_enlfdir.
    Work Areas: BADIs
    data: begin of wa_sxs_attr.
    data: exit_name type sxs_attr-exit_name.
    data: end of wa_sxs_attr.
    data: begin of wa_sxs_attrt.
    data: text type sxs_attrt-text.
    data: end of wa_sxs_attrt.
    Work Areas: Enhancements
    data: begin of wa_modsap.
    data: member type modsap-member.
    data: end of wa_modsap.
    data: begin of wa_modsapa.
    data: name type modsapa-name.
    data: end of wa_modsapa.
    data: begin of wa_modsapt.
    data: modtext type modsapt-modtext.
    data: end of wa_modsapt.
    Work Areas: Business Transaction Events
    data: begin of wa_tbe01t.
    data: text1 type tbe01t-text1.
    data: end of wa_tbe01t.
    data: begin of wa_tps01t.
    data: text1 type tps01t-text1.
    data: end of wa_tps01t.
    user-exits
    types: begin of ty_mod,
    member like modact-member,
    name like modact-name,
    status like modattr-status,
    anam like modattr-anam,
    adat like modattr-adat,
    end of ty_mod.
    data: w_mod type ty_mod.
    types: begin of t_userexit,
    type(12) type c,
    pname like trdir-name,
    txt(300),
    level type c,
    modname(30) type c,
    modtext(60) type c,
    modattr type ty_mod,
    end of t_userexit.
    data: i_userexit type standard table of t_userexit with header line.
    Function module developmnet classes
    types: begin of t_devclass,
    clas like trdir-clas,
    end of t_devclass.
    data: i_devclass type standard table of t_devclass with header line.
    types: begin of t_enlfdir,
    area type enlfdir-area,
    end of t_enlfdir.
    data: i_enlfdir type standard table of t_enlfdir with header line.
    Submit programs
    types: begin of t_submit,
    pname like trdir-name,
    level,
    done,
    end of t_submit.
    data: i_submit type standard table of t_submit with header line.
    Source code
    types: begin of t_sourcetab, "#EC * (SLIN lügt!)
    line(200), "#EC * (SLIN lügt!)
    end of t_sourcetab. "#EC * (SLIN lügt!)
    data: sourcetab type standard table of t_sourcetab with header line.
    data c_overflow(30000) type c.
    Description of an ABAP/4 source analysis token
    data: i_stoken type standard table of stokex with header line.
    data wa_stoken like i_stoken.
    Description of an ABAP/4 source analysis statement
    data: i_sstmnt type standard table of sstmnt with header line."#EC NEEDED
    keywords for searching ABAP code
    types: begin of t_keywords,
    word(30),
    end of t_keywords.
    data: keywords type standard table of t_keywords with header line.
    function modules within program
    types: begin of t_fmodule,
    name like rs38l-name,
    pname like trdir-name,
    pname2 like trdir-name,
    level,
    bapi,
    done,
    end of t_fmodule.
    data: i_fmodule type standard table of t_fmodule with header line.
    & Selection Options &
    selection-screen begin of block selscr1 with frame title text-s01.
    parameter: p_pname like trdir-name memory id rid,
    p_tcode like syst-tcode,
    p_limit(4) type n default 100,
    p_devc like rihea-dy_ofn default ' ',
    p_func like rihea-dy_ofn default ' ',
    p_subm like rihea-dy_ofn default ' '.
    selection-screen end of block selscr1.
    & START-OF-SELECTION &
    start-of-selection.
    if p_pname is initial and p_tcode is initial.
    message e008(hrfpm). "Make entry on the selection screen
    stop.
    endif.
    ensure P_LIMIT is not zero.
    if p_limit = 0.
    p_limit = 1.
    endif.
    perform data_select.
    perform get_submit_data.
    perform get_fm_data.
    perform get_additional_data.
    perform data_display.
    & Form DATA_SELECT &
    form data_select.
    data selection message to sap gui
    call function 'SAPGUI_PROGRESS_INDICATOR'
    destination 'SAPGUI'
    keeping logical unit of work
    exporting
    text = 'Get programs/includes' "#EC NOTEXT
    exceptions
    system_failure
    communication_failure
    . "#EC *
    determine search words
    keywords-word = 'CALL'.
    append keywords.
    keywords-word = 'FORM'.
    append keywords.
    keywords-word = 'PERFORM'.
    append keywords.
    keywords-word = 'SUBMIT'.
    append keywords.
    keywords-word = 'INCLUDE'.
    append keywords.
    if not p_tcode is initial.
    get program name from TCode
    select single pgmna from tstc into wa_tstc-pgmna
    where tcode eq p_tcode.
    if not wa_tstc-pgmna is initial.
    p_pname = wa_tstc-pgmna.
    TCode does not include program name, but does have refereve TCode
    else.
    select single param from tstcp into wa_tstcp-param
    where tcode eq p_tcode.
    if sy-subrc = 0.
    check wa_tstcp-param(1) = '/'.
    check wa_tstcp-param+1(1) = '*'.
    if wa_tstcp-param ca ' '.
    endif.
    w_off = sy-fdpos + 1.
    subtract 2 from sy-fdpos.
    if sy-fdpos gt 0.
    p_tcode = wa_tstcp-param+2(sy-fdpos).
    endif.
    select single pgmna from tstc into wa_tstc-pgmna
    where tcode eq p_tcode.
    p_pname = wa_tstc-pgmna.
    if sy-subrc <> 0.
    message e110(/saptrx/asc) with 'No program found for: ' p_tcode."#EC NOTEXT
    endif.
    else.
    message e110(/saptrx/asc) with 'No program found for: ' p_tcode."#EC NOTEXT
    endif.
    endif.
    endif.
    Call customer-function aus Program coding
    read report p_pname into sourcetab.
    if sy-subrc > 0.
    message e017(enhancement) with p_pname raising no_program."#EC *
    endif.
    scan abap-source sourcetab tokens into i_stoken
    statements into i_sstmnt
    keywords from keywords
    overflow into c_overflow
    with includes.
    if sy-subrc > 0. "keine/syntakt. falsche Ablauflog./Fehler im Skanner
    message e130(enhancement) raising syntax_error. "#EC *
    endif.
    check I_STOKEN for entries
    clear w_linnum.
    describe table i_stoken lines w_linnum.
    if w_linnum gt 0.
    w_level = '0'.
    w_prog = ''.
    w_incl = ''.
    perform data_search tables i_stoken using w_level w_prog w_incl.
    endif.
    endform. "DATA_SELECT
    & Form GET_FM_DATA &
    form get_fm_data.
    data selection message to sap gui
    call function 'SAPGUI_PROGRESS_INDICATOR'
    destination 'SAPGUI'
    keeping logical unit of work
    exporting
    text = 'Get function module data' "#EC NOTEXT
    exceptions
    system_failure
    communication_failure. "#EC *
    Function module data
    sort i_fmodule by name.
    delete adjacent duplicates from i_fmodule comparing name.
    loop at i_fmodule where done ne 'X'.
    clear: i_stoken, i_sstmnt, sourcetab, wa_tfdir, w_include .
    refresh: i_stoken, i_sstmnt, sourcetab.
    store function groups
    select single area from enlfdir into wa_enlfdir-area
    where funcname = i_fmodule-name.
    i_enlfdir-area = wa_enlfdir-area.
    append i_enlfdir.
    Store development classes
    if not wa_enlfdir-area is initial.
    select single devclass into wa_tadir-devclass
    from tadir where pgmid = 'R3TR'
    and object = 'FUGR'
    and obj_name = wa_enlfdir-area.
    check not wa_tadir-devclass is initial.
    move wa_tadir-devclass to i_devclass-clas.
    append i_devclass.
    endif.
    clear wa_tfdir.
    select single funcname pname include from tfdir into wa_tfdir
    where funcname = i_fmodule-name.
    check sy-subrc = 0.
    call function 'FUNCTION_INCLUDE_SPLIT'
    exporting
    program = wa_tfdir-pname
    importing
    group = w_area.
    concatenate 'L' w_area 'U' wa_tfdir-include into w_include.
    i_fmodule-pname = w_include.
    i_fmodule-pname2 = wa_tfdir-pname.
    modify i_fmodule.
    read report i_fmodule-pname into sourcetab.
    if sy-subrc = 0.
    scan abap-source sourcetab tokens into i_stoken
    statements into i_sstmnt
    keywords from keywords
    with includes.
    if sy-subrc > 0.
    message e130(enhancement) raising syntax_error.
    endif.
    check i_stoken for entries
    clear w_linnum.
    describe table i_stoken lines w_linnum.
    if w_linnum gt 0.
    w_level = '1'.
    w_prog = i_fmodule-pname2.
    w_incl = i_fmodule-pname.
    perform data_search tables i_stoken using w_level w_prog w_incl.
    endif.
    endif.
    endloop.
    sort funtion groups
    sort i_devclass.
    delete adjacent duplicates from i_devclass.
    sort i_enlfdir.
    delete adjacent duplicates from i_enlfdir.
    endform. "GET_FM_DATA
    & Form GET_SUBMIT_DATA &
    form get_submit_data.
    data selection message to sap gui
    call function 'SAPGUI_PROGRESS_INDICATOR'
    destination 'SAPGUI'
    keeping logical unit of work
    exporting
    text = 'Get submit data' "#EC NOTEXT
    exceptions
    system_failure
    communication_failure
    . "#EC *
    sort i_submit.
    delete adjacent duplicates from i_submit comparing pname.
    w_level = '0'.
    loop at i_submit where done ne 'X'.
    check i_submit-pname ne p_pname. " ensure not the same as origianl program
    clear: i_stoken, i_sstmnt, sourcetab.
    refresh: i_stoken, i_sstmnt, sourcetab.
    read report i_submit-pname into sourcetab.
    if sy-subrc <> 0.
    delete i_submit.
    continue.
    else.
    scan abap-source sourcetab tokens into i_stoken
    statements into i_sstmnt
    keywords from keywords
    with includes.
    if sy-subrc > 0.
    continue.
    endif.
    check i_stoken for entries
    clear w_linnum.
    describe table i_stoken lines w_linnum.
    if w_linnum gt 0.
    w_prog = i_submit-pname.
    w_incl = ''.
    perform data_search tables i_stoken using w_level w_prog w_incl.
    endif.
    endif.
    restrict number of submit program selected for processing
    describe table i_submit lines w_linnum.
    if w_linnum ge p_limit.
    w_level = '1'.
    endif.
    i_submit-done = 'X'.
    modify i_submit.
    endloop.
    sort i_submit.
    delete adjacent duplicates from i_submit comparing pname.
    endform. "GET_SUBMIT_DATA
    & Form DATA_SEARCH &
    form data_search tables p_stoken structure stoken
    using p_level p_prog p_incl.
    loop at p_stoken.
    clear i_userexit.
    tabix = sy-tabix + 1.
    i_userexit-level = p_level.
    if i_userexit-level = '0'.
    if p_incl is initial.
    i_userexit-pname = p_pname.
    else.
    concatenate p_pname '/' p_incl into i_userexit-pname.
    endif.
    else.
    if p_incl is initial.
    i_userexit-pname = p_prog.
    else.
    concatenate p_prog '/' p_incl into i_userexit-pname.
    endif.
    endif.
    Include
    if p_stoken-str eq 'INCLUDE'.
    check p_level eq '0'. " do not perform for function modules (2nd pass)
    w_index = sy-tabix + 1.
    read table p_stoken index w_index into wa_stoken.
    check not wa_stoken-str cs 'STRUCTURE'.
    check not wa_stoken-str cs 'SYMBOL'.
    read table i_submit with key pname = wa_stoken-str.
    if sy-subrc <> 0.
    i_submit-pname = wa_stoken-str.
    i_submit-level = p_level.
    append i_submit.
    endif.
    endif.
    Enhancements
    if p_stoken-str eq 'CUSTOMER-FUNCTION'.
    clear w_funcname.
    read table p_stoken index tabix.
    translate p_stoken-str using ''' '.
    condense p_stoken-str.
    if p_prog is initial.
    concatenate 'EXIT' p_pname p_stoken-str into w_funcname
    separated by '_'.
    else.
    concatenate 'EXIT' p_prog p_stoken-str into w_funcname
    separated by '_'.
    endif.
    select single member from modsap into wa_modsap-member
    where member = w_funcname.
    if sy-subrc = 0. " check for valid enhancement
    i_userexit-type = 'Enhancement'.
    i_userexit-txt = w_funcname.
    append i_userexit.
    else.
    clear wa_d010inc.
    select single master into wa_d010inc-master
    from d010inc
    where include = p_prog.
    concatenate 'EXIT' wa_d010inc-master p_stoken-str into w_funcname
    separated by '_'.
    i_userexit-type = 'Enhancement'.
    i_userexit-txt = w_funcname.
    endif.
    endif.
    BADIs
    if p_stoken-str cs 'cl_exithandler='.
    w_index = sy-tabix + 4.
    read table p_stoken index w_index into wa_stoken.
    i_userexit-txt = wa_stoken-str.
    replace all occurrences of '''' in i_userexit-txt with space.
    i_userexit-type = 'BADI'.
    append i_userexit.
    endif.
    Business transaction events
    if p_stoken-str cs 'OPEN_FI_PERFORM'.
    i_userexit-type = 'BusTrEvent'.
    i_userexit-txt = p_stoken-str.
    replace all occurrences of '''' in i_userexit-txt with space.
    i_userexit-modname = i_userexit-txt+16(8).
    case i_userexit-txt+25(1).
    when 'E'.
    clear wa_tbe01t.
    select single text1 into wa_tbe01t-text1 from tbe01t
    where event = i_userexit-txt+16(8)
    and spras = sy-langu.
    if wa_tbe01t-text1 is initial.
    i_userexit-modtext = ''. "#EC NOTEXT
    else.
    i_userexit-modtext = wa_tbe01t-text1.
    endif.
    i_userexit-modname+8 = '/P&S'. "#EC NOTEXT
    when 'P'.
    clear wa_tps01t.
    select single text1 into wa_tps01t-text1 from tps01t
    where procs = i_userexit-txt+16(8)
    and spras = sy-langu.
    i_userexit-modtext = wa_tps01t-text1.
    i_userexit-modname+8 = '/Process'.
    endcase.
    append i_userexit.
    endif.
    Program exits
    if p_stoken-str cs 'USEREXIT_'.
    i_userexit-type = 'Program Exit'.
    i_userexit-txt = p_stoken-str.
    replace all occurrences of '''' in i_userexit-txt with space.
    append i_userexit.
    endif.
    Submit programs
    if p_stoken-str cs 'SUBMIT'.
    check p_level eq '0'. " do not perform for function modules (2nd pass)
    check not p_stoken-str cs '_'. " ensure not SUBMIT_XXX
    w_index = sy-tabix + 1.
    read table p_stoken index w_index into wa_stoken.
    check not wa_stoken-str cs '_'. " ensure not SUBMIT_XXX
    replace all occurrences of '''' in wa_stoken-str with space.
    read table i_submit with key pname = wa_stoken-str.
    if sy-subrc <> 0.
    i_submit-pname = wa_stoken-str.
    i_submit-level = p_level.
    append i_submit.
    endif.
    endif.
    Perform routines (which reference external programs)
    if p_stoken-str cs 'PERFORM'.
    check p_level eq '0'. " do not perform for function modules (2nd pass)
    w_index = sy-tabix + 1.
    read table p_stoken index w_index into wa_stoken.
    if not wa_stoken-ovfl is initial.
    w_off = wa_stoken-off1 + 10.
    w_str = c_overflow+w_off(30).
    find ')' in w_str match offset w_off.
    w_off = w_off + 1.
    wa_stoken-str = w_str(w_off).
    endif.
    check wa_stoken-str cs '('.
    w_off = 0.
    while sy-subrc = 0.
    if wa_stoken-str+w_off(1) eq '('.
    replace section offset w_off length 1 of wa_stoken-str with ''.
    replace all occurrences of ')' in wa_stoken-str with space.
    read table i_submit with key pname = wa_stoken-str.
    if sy-subrc <> 0.
    i_submit-pname = wa_stoken-str.
    append i_submit.
    endif.
    exit.
    else.
    replace section offset w_off length 1 of wa_stoken-str with ''.
    shift wa_stoken-str left deleting leading space.
    endif.
    endwhile.
    endif.
    Function modules
    if p_stoken-str cs 'FUNCTION'.
    clear i_fmodule.
    check p_level eq '0'. " do not perform for function modules (2nd pass)
    w_index = sy-tabix + 1.
    read table p_stoken index w_index into wa_stoken.
    if wa_stoken-str cs 'WF_'.
    if wa_stoken-str cs 'IDOC'.
    break-point.
    endif.
    if wa_stoken-str cs 'BAPI'.
    i_fmodule-bapi = 'X'.
    endif.
    replace first occurrence of '''' in wa_stoken-str with space.
    replace first occurrence of '''' in wa_stoken-str with space.
    if sy-subrc = 4. " didn't find 2nd quote (ie name truncated)
    clear wa_tfdir.
    concatenate wa_stoken-str '%' into wa_stoken-str.
    select single funcname into wa_tfdir-funcname from tfdir
    where funcname like wa_stoken-str.
    if sy-subrc = 0.
    i_fmodule-name = wa_tfdir-funcname.
    else.
    continue.
    endif.
    else.
    i_fmodule-name = wa_stoken-str.
    endif.
    read table i_fmodule with key name = i_fmodule-name.
    if sy-subrc <> 0.
    i_fmodule-level = p_level.
    append i_fmodule.
    endif.
    endif.
    endloop.
    endform. "DATA_SEARCH
    & Form GET_ADDITIONAL_DATA &
    form get_additional_data.
    data selection message to sap gui
    call function 'SAPGUI_PROGRESS_INDICATOR'
    destination 'SAPGUI'
    keeping logical unit of work
    exporting
    text = 'Get additional data' "#EC NOTEXT
    exceptions
    system_failure
    communication_failure
    . "#EC *
    loop at i_userexit.
    Enhancement data
    if i_userexit-type cs 'Enh'.
    clear: wa_modsapa.
    select single name into wa_modsapa-name from modsap
    where member = i_userexit-txt.
    check sy-subrc = 0.
    i_userexit-modname = wa_modsapa-name.
    clear wa_modsapt.
    select single modtext into wa_modsapt-modtext from modsapt
    where name = wa_modsapa-name
    and sprsl = sy-langu.
    i_userexit-modtext = wa_modsapt-modtext.
    MOH - enhancement to get the project name
    clear w_mod.
    select single modactmember modactname modattr~status
    modattranam modattradat
    into w_mod
    from modact
    inner join modattr
    on modattrname = modactname
    where modact~member = wa_modsapa-name
    and modact~typ = space.
    i_userexit-modattr = w_mod.
    MOH - eoe
    endif.
    BADI data
    if i_userexit-type eq 'BADI'.
    clear wa_sxs_attr.
    select single exit_name into wa_sxs_attr-exit_name from sxs_attr
    where exit_name = i_userexit-txt.
    if sy-subrc = 0.
    i_userexit-modname = i_userexit-txt.
    else.
    i_userexit-modname = 'Dynamic call'. "#EC NOTEXT
    endif.
    clear wa_sxs_attrt.
    select single text into wa_sxs_attrt-text from sxs_attrt
    where exit_name = wa_sxs_attr-exit_name
    and sprsl = sy-langu.
    i_userexit-modtext = wa_sxs_attrt-text.
    endif.
    modify i_userexit.
    endloop.
    get enhancements via program package
    clear wa_tadir.
    select single devclass into wa_tadir-devclass from tadir
    where pgmid = 'R3TR'
    and object = 'PROG'
    and obj_name = p_pname.
    if sy-subrc = 0.
    clear: wa_modsapa, wa_modsapt.
    select name from modsapa into wa_modsapa-name
    where devclass = wa_tadir-devclass.
    select single modtext from modsapt into wa_modsapt-modtext
    where name = wa_modsapa-name
    and sprsl = sy-langu.
    read table i_userexit with key modname = wa_modsapa-name.
    if sy-subrc <> 0.
    i_userexit-modtext = wa_modsapt-modtext.
    i_userexit-type = 'Enhancement'. "#EC NOTEXT
    i_userexit-modname = wa_modsapa-name.
    i_userexit-txt = 'Determined from program DevClass'."#EC NOTEXT
    i_userexit-pname = 'Unknown'. "#EC NOTEXT
    append i_userexit.
    endif.
    endselect.
    endif.
    Get IDOCs
    loop at i_devclass.
    endloop.
    endform. "GET_ADDITIONAL_DATA
    & Form DATA_DISPLAY &
    form data_display.
    data selection message to sap gui
    call function 'SAPGUI_PROGRESS_INDICATOR'
    destination 'SAPGUI'
    keeping logical unit of work
    exporting
    text = 'Prepare screen for display' "#EC NOTEXT
    exceptions
    system_failure
    communication_failure
    . "#EC *
    sort i_userexit by type txt modname.
    delete adjacent duplicates from i_userexit comparing txt modname.
    format headings
    write: 'Enhancements from main program'. "#EC NOTEXT
    write: /.
    uline.
    format color col_heading.
    write: / sy-vline,
    (12) c_col1, "Enhanmt Type
    sy-vline,
    (40) c_col2, "Enhancement
    sy-vline,
    (30) c_col3, "Program/Include
    sy-vline,
    (20) c_col4, "Enhancement name
    sy-vline,
    (60) c_col5, "Enhancement description
    sy-vline,
    (8) c_col6, "Project
    sy-vline,
    (1) c_col7, "S
    sy-vline,
    (12) c_col8, "ChangeName
    sy-vline,
    (10) c_col9, "ChangeDate
    sy-vline.
    format reset.
    uline.
    format lines
    loop at i_userexit.
    set line colour
    case i_userexit-type.
    when 'Enhancement'.
    format color 3 intensified off.
    when 'BADI'.
    format color 4 intensified off.
    when 'BusTrEvent'.
    format color 5 intensified off.
    when 'Program Exit'.
    format color 6 intensified off.
    when others.
    format reset.
    endcase.
    write: / sy-vline,
    i_userexit-type,
    sy-vline,
    i_userexit-txt(40),
    sy-vline,
    i_userexit-pname(30),
    sy-vline,
    i_userexit-modname(20),
    sy-vline,
    i_userexit-modtext(60),
    sy-vline,
    i_userexit-modattr-name,
    sy-vline,
    i_userexit-modattr-status,
    sy-vline,
    i_userexit-modattr-anam,
    sy-vline,
    i_userexit-modattr-adat no-zero,
    sy-vline.
    hide: i_userexit-type,
    i_userexit-txt,
    i_userexit-pname,
    i_userexit-modname,
    i_userexit-modtext.
    endloop.
    format reset.
    uline.
    user-exits from development class of function modules
    if p_devc = 'X'.
    write: /.
    write: / 'User-exits from function module development class'."#EC NOTEXT
    write: 157''.
    uline (90).
    write: 157''.
    loop at i_devclass.
    clear wa_modsapa.
    select name from modsapa into wa_modsapa
    where devclass = i_devclass-clas.
    select single name modtext into corresponding fields of wa_modsapt
    from modsapt
    where name = wa_modsapa-name
    and sprsl = sy-langu.
    format color 3 intensified off.
    write: / sy-vline,
    (12) 'Enhancement',
    sy-vline,
    wa_modsapa-name,
    sy-vline,
    wa_modsapt-modtext,
    sy-vline.
    endselect.
    endloop.
    uline (90).
    format reset.
    endif.
    describe table i_fmodule lines w_linnum.
    write: / c_fmod , at 35 w_linnum. "#EC NOTEXT
    write: 157''.
    if p_func = 'X'.
    display fuction modules used in program
    uline (38).
    write: 157''.
    loop at i_fmodule.
    write: sy-vline,
    i_fmodule-name,
    sy-vline,
    i_fmodule-bapi,
    sy-vline.
    write: 157''.
    endloop.
    uline (38).
    write: 157''.
    endif.
    describe table i_submit lines w_linnum.
    write: / c_subm , at 35 w_linnum. "#EC NOTEXT
    write: 157''.
    if p_subm = 'X'.
    display submit programs used in program
    uline (44).
    write: 157''.
    loop at i_submit.
    write: sy-vline,
    i_submit-pname,
    sy-vline.
    write: 157''.
    endloop.
    uline (44).
    endif.
    issue message with number of user-exits displayed
    describe table i_userexit lines w_linnum.
    message s697(56) with w_linnum.
    endform. "DATA_DISPLAY
    & User Selection Processing &
    at line-selection.
    get cursor field w_fsel.
    case w_fsel.
    when 'I_USEREXIT-MODNAME'.
    case i_userexit-type.
    when 'Enhancement'.
    set parameter id 'MON' field i_userexit-modname.
    call transaction 'SMOD' and skip first screen.
    when 'BADI'.
    check i_userexit-modname ne 'Dynamic call'.
    set parameter id 'EXN' field i_userexit-modname.
    call transaction 'SE18' and skip first screen.
    when 'BusTrEvent'.
    submit rfopfi00 with attr_typey_selm = 'A'
    with event = i_userexit-modname(8)
    via selection-screen
    and return.
    when others.
    endcase.
    when 'I_USEREXIT-PNAME'.
    check i_userexit-modname ne 'Unknown'.
    w_off = 0.
    find '/' in i_userexit-pname match offset w_off.
    if w_off = 0.
    set parameter id 'RID' field i_userexit-pname.
    call transaction 'SE38' and skip first screen.
    else.
    w_off = w_off + 1.
    w_prog = i_userexit-pname+w_off.
    set parameter id 'RID' field w_prog.
    call transaction 'SE38' and skip first screen.
    endif.
    when others.
    endcase.
    Feel free to revert back.
    --Ragu

  • BADI / USER EXIT for MB01 - after posting GR.

    Hi,
    We have some requirement, where we need to create the Goods Issue using bdc after posting the GR in MB01. can anybody give the user exit / BADI for this.
    i have used BADI - MB_DOCUMENT_BADI : It is triggering while click on the Save button in the MB01, but it is calling before post the GR. the customization part should trigger after the GR post.
    Regards,
    Sree

    Hi Sree,
    Do it the other manner. Store the GR in a Z-table and do the BDC or use the BAPI as suggest Keshav in a periodic job, or call it with a job (OPEN_JOB, CLOSE_JOB,...) in a function module, always with the option IN UPDATE TASK. Think that you have the number of document in this BADI and you must wait some time (1, 2 or 5 seconds) until the database save all data.
    Be careful with this badi (MB_DOCUMENT_BADI), see Note 92550 - Stock inconsistency due to customer enhancement (exit, BAdI) to understand the reasons.
    Regards,
    Eduardo
    Edited by: E_Hinojosa on Feb 2, 2011 2:20 PM

  • User-Exit/BADI/BTE Search

    Guys,
    Got fed-up trying all the other programs which (unsucessfully) try to find user-exits etc.
    Here is my attempt...
    Any comments would be most welcome..
    *& Report  ZPJA_PM002 (V2)                                            &*
    *& Text Elements:                                                     &*
    *& P_DEVC Show user-exits from development class                      &*
    *& P_LIMIT Limit submit program selection                             &*
    *& P_FUNC Show function modules                                       &*
    *& P_SUBM Show submit programs                                        &*
    *& S01    Selection data (TCode takes precedence  over program name)  &*
    report  zpja_pm002
      no standard page heading
      line-size 158.
    *tables: enlfdir.     "Additional Attributes for Function Modules
    data: tabix      like sy-tabix,
          w_linnum   type i,
          w_off      type i,
          w_index    like sy-tabix,
          w_include  like trdir-name,
          w_prog     like trdir-name,
          w_incl     like trdir-name,
          w_area     like rs38l-area,
          w_level,
          w_str(50)  type c,
          w_funcname like tfdir-funcname.
    constants: c_fmod(40) type c value 'Function modules selected: ',
               c_subm(40) type c value 'Submit programs selected: ',
               c_col1(12) type c value 'Enhanmt Type',
               c_col2(40) type c value 'Enhancement',
               c_col3(30) type c value 'Program/Include',
               c_col4(20) type c value 'Enhancement Name',
               c_col5(40) type c value 'Enhancement Description'.
    * Work Areas: ABAP Workbench
    data: begin of wa_d010inc.
    data: master type d010inc-master.
    data: end of wa_d010inc.
    data: begin of wa_tfdir.
    data: funcname type tfdir-funcname,
          pname    type tfdir-pname,
          include  type tfdir-include.
    data: end of wa_tfdir.
    data: begin of wa_tadir.
    data: devclass type tadir-devclass.
    data: end of wa_tadir.
    data: begin of wa_tstc.
    data: pgmna type tstc-pgmna.
    data: end of wa_tstc.
    data: begin of wa_tstcp.
    data: param type tstcp-param.
    data: end of wa_tstcp.
    data: begin of wa_enlfdir.
    data: area type enlfdir-area.
    data: end of wa_enlfdir.
    * Work Areas: BADIs
    data: begin of wa_sxs_attr.
    data: exit_name type sxs_attr-exit_name.
    data: end of wa_sxs_attr.
    data: begin of wa_sxs_attrt.
    data: text type sxs_attrt-text.
    data: end of wa_sxs_attrt.
    * Work Areas: Enhancements
    data: begin of wa_modsap.
    data: member type modsap-member.
    data: end of wa_modsap.
    data: begin of wa_modsapa.
    data: name type modsapa-name.
    data: end of wa_modsapa.
    data: begin of wa_modsapt.
    data: modtext type modsapt-modtext.
    data: end of wa_modsapt.
    * Work Areas: Business Transaction Events
    data: begin of wa_tbe01t.
    data: text1 type tbe01t-text1.
    data: end of wa_tbe01t.
    data: begin of wa_tps01t.
    data: text1 type tps01t-text1.
    data: end of wa_tps01t.
    * user-exits
    types: begin of t_userexit,
          type(12) type c,
          pname    like trdir-name,
          txt(300),
          level    type c,
          modname(30) type c,
          modtext(40) type c,
    end of t_userexit.
    data: i_userexit type standard table of t_userexit with header line.
    * Function module developmnet classes
    types: begin of t_devclass,
          clas   like trdir-clas,
    end of t_devclass.
    data: i_devclass type standard table of t_devclass with header line.
    * Submit programs
    types: begin of t_submit,
          pname     like trdir-name,
          level,
          done,
    end of t_submit.
    data: i_submit type standard table of t_submit with header line.
    * Source code
    types: begin of t_sourcetab,                        "#EC * (SLIN lügt!)
            line(200),                                  "#EC * (SLIN lügt!)
          end of t_sourcetab.                           "#EC * (SLIN lügt!)
    data: sourcetab type standard table of t_sourcetab with header line.
    data c_overflow(30000) type c.
    * Description of an ABAP/4 source analysis token
    data: i_stoken type standard table of stokex with header line.
    data wa_stoken like i_stoken.
    * Description of an ABAP/4 source analysis statement
    data: i_sstmnt type standard table of sstmnt with header line."#EC NEEDED
    * keywords for searching ABAP code
    types: begin of t_keywords,
          word(30),
    end of t_keywords.
    data: keywords type standard table of t_keywords with header line.
    * function modules within program
    types: begin of t_fmodule,
          name   like rs38l-name,
          pname  like trdir-name,
          pname2 like trdir-name,
          level,
          bapi,
          done,
    end of t_fmodule.
    data: i_fmodule type standard table of t_fmodule with header line.
    *& Selection Options                                                  &*
    selection-screen begin of block selscr1 with frame title text-s01.
    parameter: p_pname like trdir-name memory id rid,
               p_tcode like syst-tcode,
               p_limit(4) type n default 100,
               p_devc  like rihea-dy_ofn default ' ',
               p_func  like rihea-dy_ofn default ' ',
               p_subm  like rihea-dy_ofn default ' '.
    selection-screen end of block selscr1.
    *& START-OF-SELECTION                                                 &*
    start-of-selection.
      if p_pname is initial and p_tcode is initial.
        message e008(hrfpm).  "Make entry on the selection screen
        stop.
      endif.
    * ensure P_LIMIT is not zero.
      if p_limit = 0.
        p_limit = 1.
      endif.
      perform data_select.
      perform get_submit_data.
      perform get_fm_data.
      perform get_additional_data.
      perform data_display.
    *& Form DATA_SELECT                                                   &*
    form data_select.
    * data selection message to sap gui
      call function 'SAPGUI_PROGRESS_INDICATOR'
        destination 'SAPGUI'
        keeping logical unit of work
        exporting
          text                  = 'Get programs/includes'       "#EC NOTEXT
        exceptions
          system_failure
          communication_failure
        .                                                       "#EC *
    * determine search words
      keywords-word = 'CALL'.
      append keywords.
      keywords-word = 'FORM'.
      append keywords.
      keywords-word = 'PERFORM'.
      append keywords.
      keywords-word = 'SUBMIT'.
      append keywords.
      keywords-word = 'INCLUDE'.
      append keywords.
      if not p_tcode is initial.
    * get program name from TCode
        select single pgmna from tstc into wa_tstc-pgmna
                     where tcode eq p_tcode.
        if not wa_tstc-pgmna is initial.
          p_pname = wa_tstc-pgmna.
    * TCode does not include program name, but does have refereve TCode
        else.
          select single param from tstcp into wa_tstcp-param
                       where tcode eq p_tcode.
          if sy-subrc = 0.
            check wa_tstcp-param(1)   = '/'.
            check wa_tstcp-param+1(1) = '*'.
            if wa_tstcp-param ca ' '.
            endif.
            w_off = sy-fdpos + 1.
            subtract 2 from sy-fdpos.
            if sy-fdpos gt 0.
              p_tcode = wa_tstcp-param+2(sy-fdpos).
            endif.
            select single pgmna from tstc into wa_tstc-pgmna
                   where tcode eq p_tcode.
            p_pname = wa_tstc-pgmna.
            if sy-subrc <> 0.
              message e110(/saptrx/asc) with 'No program found for: ' p_tcode."#EC NOTEXT
              stop.
            endif.
          else.
            message e110(/saptrx/asc) with 'No program found for: ' p_tcode."#EC NOTEXT
            stop.
          endif.
        endif.
      endif.
    * Call customer-function aus Program coding
      read report p_pname into sourcetab.
      if sy-subrc > 0.
        message e017(enhancement) with p_pname raising no_program."#EC *
      endif.
      scan abap-source sourcetab tokens     into i_stoken
                                 statements into i_sstmnt
                                 keywords   from keywords
                                 overflow into c_overflow
                                 with includes.
      if sy-subrc > 0. "keine/syntakt. falsche Ablauflog./Fehler im Skanner
        message e130(enhancement) raising syntax_error.         "#EC *
      endif.
    * check I_STOKEN for entries
      clear w_linnum.
      describe table i_stoken lines w_linnum.
      if w_linnum gt 0.
        w_level = '0'.
        w_prog = ''.
        w_incl = ''.
        perform data_search tables i_stoken using w_level w_prog w_incl.
      endif.
    endform.                        "DATA_SELECT
    *& Form GET_FM_DATA                                                   &*
    form get_fm_data.
    * data selection message to sap gui
      call function 'SAPGUI_PROGRESS_INDICATOR'
        destination 'SAPGUI'
        keeping logical unit of work
        exporting
          text                  = 'Get function module data'    "#EC NOTEXT
        exceptions
          system_failure
          communication_failure
        .                                                       "#EC *
    * Function module data
      sort i_fmodule by name.
      delete adjacent duplicates from i_fmodule comparing name.
      loop at i_fmodule where done  ne 'X'.
        clear:   i_stoken, i_sstmnt, sourcetab, wa_tfdir, w_include .
        refresh: i_stoken, i_sstmnt, sourcetab.
        clear wa_tfdir.
        select single funcname pname include from tfdir into wa_tfdir
                                where funcname = i_fmodule-name.
        check sy-subrc = 0.
        call function 'FUNCTION_INCLUDE_SPLIT'
          exporting
            program = wa_tfdir-pname
          importing
            group   = w_area.
        concatenate 'L' w_area 'U' wa_tfdir-include into w_include.
        i_fmodule-pname  = w_include.
        i_fmodule-pname2 = wa_tfdir-pname.
        modify i_fmodule.
        read report i_fmodule-pname into sourcetab.
        if sy-subrc = 0.
          scan abap-source sourcetab tokens     into i_stoken
                                     statements into i_sstmnt
                                     keywords   from keywords
                                     with includes.
          if sy-subrc > 0.
            message e130(enhancement) raising syntax_error.
          endif.
    * check i_stoken for entries
          clear w_linnum.
          describe table i_stoken lines w_linnum.
          if w_linnum gt 0.
            w_level = '1'.
            w_prog  = i_fmodule-pname2.
            w_incl =  i_fmodule-pname.
            perform data_search tables i_stoken using w_level w_prog w_incl.
          endif.
        endif.
      endloop.
      if p_devc = 'X'.
        loop at i_fmodule.
          clear: wa_tadir, wa_enlfdir.
          select single area from enlfdir into wa_enlfdir-area
                                where funcname = i_fmodule-name.
          check not wa_enlfdir-area is initial.
          select single devclass into wa_tadir-devclass
                          from tadir where pgmid    = 'R3TR'
                                       and object   = 'FUGR'
                                       and obj_name = wa_enlfdir-area.
          check not wa_tadir-devclass is initial.
          move wa_tadir-devclass to i_devclass-clas.
          append i_devclass.
          i_fmodule-done = 'X'.
          modify i_fmodule.
        endloop.
        sort i_devclass.
        delete adjacent duplicates from i_devclass.
      endif.
    endform.                        "GET_FM_DATA
    *& Form GET_SUBMIT_DATA                                               &*
    form get_submit_data.
    * data selection message to sap gui
      call function 'SAPGUI_PROGRESS_INDICATOR'
        destination 'SAPGUI'
        keeping logical unit of work
        exporting
          text                  = 'Get submit data'             "#EC NOTEXT
        exceptions
          system_failure
          communication_failure
        .                                                       "#EC *
      sort i_submit.
      delete adjacent duplicates from i_submit comparing pname.
      w_level = '0'.
      loop at i_submit where done ne 'X'.
        clear:   i_stoken, i_sstmnt, sourcetab.
        refresh: i_stoken, i_sstmnt, sourcetab.
        read report i_submit-pname into sourcetab.
        if sy-subrc = 0.
          scan abap-source sourcetab tokens     into i_stoken
                                     statements into i_sstmnt
                                     keywords   from keywords
                                     with includes.
          if sy-subrc > 0.
    *        message e130(enhancement) raising syntax_error.
            continue.
          endif.
    * check i_stoken for entries
          clear w_linnum.
          describe table i_stoken lines w_linnum.
          if w_linnum gt 0.
            w_prog  = i_submit-pname.
            w_incl = ''.
            perform data_search tables i_stoken using w_level w_prog w_incl.
          endif.
        endif.
    * restrict number of submit program selected for processing
        describe table i_submit lines w_linnum.
        if w_linnum ge p_limit.
          w_level = '1'.
        endif.
        i_submit-done = 'X'.
        modify i_submit.
      endloop.
    endform.                       "GET_SUBMIT_DATA
    *& Form DATA_SEARCH                                                   &*
    form data_search tables p_stoken structure stoken
                            using p_level p_prog p_incl.
      loop at p_stoken.
        clear i_userexit.
        tabix = sy-tabix + 1.
        i_userexit-level = p_level.
        if i_userexit-level = '0'.
          if p_incl is initial.
            i_userexit-pname = p_pname.
          else.
            concatenate  p_pname '/' p_incl into i_userexit-pname.
          endif.
        else.
          if p_incl is initial.
            i_userexit-pname = p_prog.
          else.
            concatenate  p_prog '/' p_incl into i_userexit-pname.
          endif.
        endif.
    * Include
        if p_stoken-str eq 'INCLUDE'.
          check p_level eq '0'.    " do not perform for function modules (2nd pass)
          w_index = sy-tabix + 1.
          read table p_stoken index w_index into wa_stoken.
          check not wa_stoken-str cs 'STRUCTURE'.
          check not wa_stoken-str cs 'SYMBOL'.
          read table i_submit with key pname = wa_stoken-str.
          if sy-subrc <> 0.
            i_submit-pname = wa_stoken-str.
            i_submit-level = p_level.
            append i_submit.
          endif.
        endif.
    * Enhancements
        if p_stoken-str eq 'CUSTOMER-FUNCTION'.
          clear w_funcname.
          read table p_stoken index tabix.
          translate p_stoken-str using ''' '.
          condense p_stoken-str.
          if p_prog is initial.
            concatenate 'EXIT' p_pname p_stoken-str into w_funcname
                         separated by '_'.
          else.
            concatenate 'EXIT' p_prog p_stoken-str into w_funcname
                   separated by '_'.
          endif.
          select single member from modsap into wa_modsap-member
                where member = w_funcname.
          if sy-subrc = 0.   " check for valid enhancement
            i_userexit-type = 'Enhancement'.
            i_userexit-txt  = w_funcname.
            append i_userexit.
          else.
            clear wa_d010inc.
            select single master into wa_d010inc-master
                  from d010inc
                     where include = p_prog.
            concatenate 'EXIT' wa_d010inc-master p_stoken-str into w_funcname
                   separated by '_'.
            i_userexit-type = 'Enhancement'.
            i_userexit-txt  = w_funcname.
          endif.
        endif.
    * BADIs
        if p_stoken-str cs 'cl_exithandler='.
          w_index = sy-tabix + 4.
          read table p_stoken index w_index into wa_stoken.
          i_userexit-txt = wa_stoken-str.
          replace all occurrences of '''' in i_userexit-txt with space.
          i_userexit-type = 'BADI'.
          append i_userexit.
        endif.
    * Business transaction events
        if p_stoken-str cs 'OPEN_FI_PERFORM'.
          i_userexit-type = 'BusTrEvent'.
          i_userexit-txt = p_stoken-str.
          replace all occurrences of '''' in i_userexit-txt with space.
          i_userexit-modname =  i_userexit-txt+16(8).
          case i_userexit-txt+25(1).
            when 'E'.
              clear wa_tbe01t.
              select single text1 into wa_tbe01t-text1 from tbe01t
                               where event = i_userexit-txt+16(8)
                                 and spras = sy-langu.
              if wa_tbe01t-text1 is initial.
                i_userexit-modtext = '<Not active>'.            "#EC NOTEXT
              else.
                i_userexit-modtext = wa_tbe01t-text1.
              endif.
              i_userexit-modname+8 = '/P&S'.                    "#EC NOTEXT
            when 'P'.
              clear wa_tps01t.
              select single text1 into wa_tps01t-text1 from tps01t
                               where procs = i_userexit-txt+16(8)
                                 and spras = sy-langu.
              i_userexit-modtext = wa_tps01t-text1.
              i_userexit-modname+8 = '/Process'.
          endcase.
          append i_userexit.
        endif.
    * Program exits
        if p_stoken-str cs 'USEREXIT_'.
          i_userexit-type = 'Program Exit'.
          i_userexit-txt = p_stoken-str.
          replace all occurrences of '''' in i_userexit-txt with space.
          append i_userexit.
        endif.
    * Submit programs
        if p_stoken-str cs 'SUBMIT'.
          check p_level eq '0'.    " do not perform for function modules (2nd pass)
          check not p_stoken-str cs '_'.   " ensure not SUBMIT_XXX
          w_index = sy-tabix + 1.
          read table p_stoken index w_index into wa_stoken.
          check not wa_stoken-str cs '_'.   " ensure not SUBMIT_XXX
          replace all occurrences of '''' in wa_stoken-str with space.
          read table i_submit with key pname = wa_stoken-str.
          if sy-subrc <> 0.
            i_submit-pname = wa_stoken-str.
            i_submit-level = p_level.
            append i_submit.
          endif.
        endif.
    * Perform routines (which reference external programs)
        if p_stoken-str cs 'PERFORM'.
          check p_level eq '0'.    " do not perform for function modules (2nd pass)
          w_index = sy-tabix + 1.
          read table p_stoken index w_index into wa_stoken.
          if not wa_stoken-ovfl is initial.
            w_off = wa_stoken-off1 + 10.
            w_str = c_overflow+w_off(30).
            find ')' in w_str match offset w_off.
            w_off = w_off + 1.
            wa_stoken-str = w_str(w_off).
          endif.
          check wa_stoken-str cs '('.
          w_off = 0.
          while sy-subrc  = 0.
            if wa_stoken-str+w_off(1) eq '('.
              replace section offset w_off length 1 of wa_stoken-str with ''.
              replace all occurrences of ')' in wa_stoken-str with space.
              read table i_submit with key pname = wa_stoken-str.
              if sy-subrc <> 0.
                i_submit-pname = wa_stoken-str.
                append i_submit.
              endif.
              exit.
            else.
              replace section offset w_off length 1 of wa_stoken-str with ''.
              shift wa_stoken-str left deleting leading space.
            endif.
          endwhile.
        endif.
    * Function modules
        if p_stoken-str cs 'FUNCTION'.
          clear i_fmodule.
          check p_level eq '0'.    " do not perform for function modules (2nd pass)
          w_index = sy-tabix + 1.
          read table p_stoken index w_index into wa_stoken.
    **      if wa_stoken-str cs 'WF_'.
    *      if wa_stoken-str cs 'IF_'.
    *        break-point.
    *      endif.
          if wa_stoken-str cs 'BAPI'.
            i_fmodule-bapi = 'X'.
          endif.
          replace first occurrence of '''' in wa_stoken-str with space.
          replace first occurrence of '''' in wa_stoken-str with space.
          if sy-subrc = 4.   " didn't find 2nd quote (ie name truncated)
            clear wa_tfdir.
            concatenate wa_stoken-str '%' into wa_stoken-str.
            select single funcname into wa_tfdir-funcname from tfdir
                         where funcname like wa_stoken-str.
            if sy-subrc = 0.
              i_fmodule-name = wa_tfdir-funcname.
            else.
              continue.
            endif.
          else.
            i_fmodule-name = wa_stoken-str.
          endif.
          i_fmodule-level = p_level.
          append i_fmodule.
        endif.
      endloop.
    endform.                        "DATA_SEARCH
    *& Form GET_ADDITIONAL_DATA                                           &*
    form get_additional_data.
    * data selection message to sap gui
      call function 'SAPGUI_PROGRESS_INDICATOR'
        destination 'SAPGUI'
        keeping logical unit of work
        exporting
          text                  = 'Get additional data'         "#EC NOTEXT
        exceptions
          system_failure
          communication_failure
        .                                                       "#EC *
      loop at i_userexit.
    * Enhancement data
        if  i_userexit-type cs 'Enh'.
          clear: wa_modsapa.
          select single name into wa_modsapa-name from modsap
                            where member = i_userexit-txt.
          check sy-subrc = 0.
          i_userexit-modname = wa_modsapa-name.
          clear wa_modsapt.
          select single modtext into wa_modsapt-modtext from modsapt
                            where name = wa_modsapa-name
                                         and sprsl = sy-langu.
          i_userexit-modtext = wa_modsapt-modtext.
        endif.
    * BADI data
        if  i_userexit-type eq 'BADI'.
          clear wa_sxs_attr.
          select single exit_name into wa_sxs_attr-exit_name from sxs_attr
                                        where exit_name = i_userexit-txt.
          if sy-subrc = 0.
            i_userexit-modname = i_userexit-txt.
          else.
            i_userexit-modname = 'Dynamic call'.                "#EC NOTEXT
          endif.
          clear wa_sxs_attrt.
          select single text into wa_sxs_attrt-text from sxs_attrt
                                         where exit_name = wa_sxs_attr-exit_name
                                           and sprsl = sy-langu.
          i_userexit-modtext = wa_sxs_attrt-text.
        endif.
        modify i_userexit.
      endloop.
    * get enhancements via program package
      clear wa_tadir.
      select single devclass into wa_tadir-devclass from tadir
                                 where pgmid    = 'R3TR'
                                   and object   = 'PROG'
                                   and obj_name = p_pname.
      if sy-subrc = 0.
        clear: wa_modsapa, wa_modsapt.
        select name from modsapa into wa_modsapa-name
                              where devclass = wa_tadir-devclass.
          select single modtext from modsapt into wa_modsapt-modtext
                              where name = wa_modsapa-name
                                and sprsl = sy-langu.
          read table i_userexit with key modname = wa_modsapa-name.
          if sy-subrc <> 0.
            i_userexit-modtext = wa_modsapt-modtext.
            i_userexit-type = 'Enhancement'.                    "#EC NOTEXT
            i_userexit-modname  = wa_modsapa-name.
            i_userexit-txt = 'Determined from program DevClass'."#EC NOTEXT
            i_userexit-pname = 'Unknown'.                       "#EC NOTEXT
            append i_userexit.
          endif.
        endselect.
      endif.
    endform.                        "GET_ADDITIONAL_DATA
    *& Form DATA_DISPLAY                                                  &*
    form data_display.
    * data selection message to sap gui
      call function 'SAPGUI_PROGRESS_INDICATOR'
        destination 'SAPGUI'
        keeping logical unit of work
        exporting
          text                  = 'Prepare screen for display'  "#EC NOTEXT
        exceptions
          system_failure
          communication_failure
        .                                                       "#EC *
      sort i_userexit by type txt modname.
      delete adjacent duplicates from i_userexit comparing txt modname.
    * format headings
      write: 'Enhancements from main program'.                  "#EC NOTEXT
      write: /.
      uline.
      format color col_heading.
      write: /    sy-vline,
             (12) c_col1,                    "Enhanmt Type
                  sy-vline,
             (40) c_col2,                    "Enhancement
                  sy-vline,
             (30) c_col3,                    "Program/Include
                  sy-vline,
             (20) c_col4,                    "Enhancement name
                  sy-vline,
             (40) c_col5,                    "Enhancement description
                  sy-vline.
      format reset.
      uline.
    * format lines
      loop at i_userexit.
    * set line colour
        case i_userexit-type.
          when 'Enhancement'.
            format color 3 intensified off.
          when 'BADI'.
            format color 4 intensified off.
          when 'BusTrEvent'.
            format color 5 intensified off.
          when 'Program Exit'.
            format color 6 intensified off.
          when others.
            format reset.
        endcase.
        write: / sy-vline,
                 i_userexit-type,
                 sy-vline,
                 i_userexit-txt(40),
                 sy-vline,
                 i_userexit-pname(30),
                 sy-vline,
                 i_userexit-modname(20),
                 sy-vline,
                 i_userexit-modtext(40),
                 sy-vline.
      endloop.
      format reset.
      uline.
    * user-exits from development class of function modules
      if p_devc = 'X'.
        write: /.
        write: / 'User-exits from function module development class'."#EC NOTEXT
        write: 157''.
        uline (90).
        write: 157''.
        loop at i_devclass.
          clear wa_modsapa.
          select name from modsapa into wa_modsapa
                       where devclass = i_devclass-clas.
            select single name modtext into corresponding fields of wa_modsapt
                                       from modsapt
                                         where name  = wa_modsapa-name
                                           and sprsl = sy-langu.
            format color 3 intensified off.
            write: / sy-vline,
                     (12) 'Enhancement',
                     sy-vline,
                    wa_modsapa-name,
                    sy-vline,
                    wa_modsapt-modtext,
                    sy-vline.
          endselect.
        endloop.
        uline (90).
        format reset.
      endif.
      describe table i_fmodule lines w_linnum.
      write: / c_fmod , at 35 w_linnum.                         "#EC NOTEXT
      write: 157''.
      if p_func = 'X'.
    * display fuction modules used in program
        uline (38).
        write: 157''.
        loop at i_fmodule.
          write: sy-vline,
                 i_fmodule-name,
                 sy-vline,
                 i_fmodule-bapi,
                 sy-vline.
          write: 157''.
        endloop.
        uline (38).
      endif.
      describe table i_submit lines w_linnum.
      write: / c_subm , at 35 w_linnum.                         "#EC NOTEXT
      write: 157''.
      if p_subm = 'X'.
    * display submit programs used in program
        uline (44).
        write: 157''.
        loop at i_submit.
          write: sy-vline,
                 i_submit-pname,
                 sy-vline.
          write: 157''.
        endloop.
        uline (44).
      endif.
    * issue message with number of user-exits displayed
      describe table i_userexit lines w_linnum.
      message s697(56) with w_linnum.
    endform.                        "DATA_DISPLAY

    HI Peter,
      did you try this code t find the 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.
    regards
    satesh

  • User Exit or Enhancement or BADI for CA03 & MM03

    Hi Experts,
    I had a scenario like validate the Material No for CA03 & MM03. When ever we give 'material no' in the MM03 or CA03 ans press
    enter I need to validate that material no. I don't see any proper user exit or badi for these tcodes to validate material no.
    I used this  enhancement  MGA00003 - EXIT_SAPLOMCV_001 - INCLUDE ZXMG0U08 my own logic which is
    calling a RFC function module here. It send values to this FM in turn this FM is sending the values to (third party - thru WSDL) Proxy . Here I am having the problem. When we give material no in MM03 or CA03 and press enter this enhancement got
    triggered and it is going into dump. in my custom RFC FM we have 3 methods in WSDL I.e. Connect,Query,Close. When ever
    it comes to the statement 'Connect' this dump is triggered. I am unable to find the exact problem because in the debugging mode
    it is not showing constantly in one place...if I run for first time it is showing at one point , for second time if I run it is showing
    at some other place. I can't predict correctly like where exactly we r getting dump.
    Can any one please let me know any other user exit or BADI or enhancement points... exist to vlaidate Material No.
    Can any one please let me know the procedure how to do if enhancement points exists?
    Error :  RPERF_ILLEGAL_STATEMENT
    Short text
        Statement "RFC-SYSTEM RFC_ID id RFC_VALUE value" is not allowed in this form.
    Error analysis
        There is probably an error in the program
        "SAPLSHTTP".
        The program was probably called in a conversion exit
        or in a field exit. These are implemented by
        function modules called CONVERSION_EXIT_xxxxx_INPUT/OUTPUT or
        USER_EXIT_xxxxx_INPUT.
        Conversion exits are triggered during screen field transports or
        WRITE statements, field exits during field transports from the
        screen to the ABAP/4 program.
        In this connection, the following ABAP/4 statements are not allowed:
        -  CALL SCREEN
        -  CALL DIALOG
        -  CALL TRANSACTION
        -  SUBMIT
        -  MESSAGE W... and MESSAGE I...
        -  COMMIT WORK, ROLLBACK WORK
    Thanks in Advance,
    Yamini.

    Hi,
    How did you resolve that issue?

Maybe you are looking for

  • Is there any way to go back to a previous version? this one is not compatable with hardly any of the plugins i had/need.

    i need this plug in in order to use features offered by dish network. everytime I go to the site it tells me i need a plug in in order to watch tv/movies online. it goes through the download process and then at the end tells me it couldn't download t

  • Can't partition during Boot Camp for Windows 8?

    I am trying to install Windows 8 on my early/mid-2011 MacBook Pro. I am using the Boot Camp Installation & Setup Guide, but when I get to the area of partitioning the hard drive, I am choosing around 60GB and clicking next. After a minute or so, it i

  • Connecting a Synthesizer to a Sequencer

    Hey everyone. Is it possible to connect a synthesizer.getTransmitter() to a sequencer.getReceiver() , in order to play notes in the synthesizer and have them recorded by the sequencer? Another question, can i create midi messages programatically, add

  • Collaboration Room  - Edit Locally Cache Issue

    Hello, We have a situation where 2 users try to edit word file locally. For one user (A) everything works fine. The changes are uploaded and can be seen after Check In is done. For the other user (B), the changes are visible when he clicks on the fil

  • N8 music widget bug

    Music widget bug: -link- And how to fix without restarting phone? Nokia Please Help N9 live! Please Fix: Browser Downloads Video Call Voice Deal Fm Radio