BADI enhancement for ME21N

Hello experts,
I have a couple of queries regarding the BADI implementations ME_GUI_PO_CUST/ME_PROCESS_PO_CUST .
1. I want to add a new tab under the PO item <b>based on the PO item type</b>. E.g., If the PO item type is 'D' (service) then the new tab should be displayed otherwise not.
2. How can I disable the editing of a PO item field (say PO item number) or a PO header field (say Company code) in edit mode? I know its through fieldselection but a detailed example would be of great help.
Thanks for your help in advance.
Best regards,
Yuvaraj

Hi,
  FIrst you need to implement the 2 BADIs in SE19.
The BADI ME_GUI_PO_CUST is responsible for Screen display and data exchange b/n db and the screen.
The second BADI ME_PROCESS_PO_CUST is responsible for PO upadate.
To get the screen in the Transaction you need to code in the method SUBSCRIBE of the first BADI.
Example:
ls_subscriber-name = subscreen4.
    ls_subscriber-dynpro = 0700.
    ls_subscriber-program = prog_name.
    ls_subscriber-struct_name = structure.
    ls_subscriber-label = TEST.
    ls_subscriber-position = 4.
   ls_subscriber-height = 6.
    ls_subscriber-height = 8.                           
    append ls_subscriber to re_subscribers.
    clear ls_subscriber.
Plz go through the sample code provided by SAP for the BADIs in SE18.
Hope this will help..

Similar Messages

  • Enhancement for me21n New tab

    Dear Sdn'ers
    I am facing a problem while updating the data from newly created tab in header for ME21N . Let me clarify I have designed the screen for adding the tab in header of me21n . Tab is diplay is over but New field added is not updated while in debugging.
    badi : ME_GUI_PO_CUST
    Method : IF_EX_ME_GUI_PO_CUST~TRANSPORT_FROM_DYNP
    break-point.
    CASE IM_NAME.
        WHEN SUBSCREEN1.
          CALL FUNCTION 'ZMEPOBADIEX_POP'
            IMPORTING
              EX_DYNP_DATA = DYNP_DATA_PAI.             "
          IF DYNP_DATA_PAI NE DYNP_DATA_PBO.
    something has changed therefor we have to notify the framework
    to transport data to the model
            RE_CHANGED = MMPUR_YES.
          ENDIF.
        WHEN OTHERS.
    Regards
    Pradeep
      ENDCASE.

    DONE THROUGH USER EXIT

  • Exit/BADI/Enhancement for Payroll driver

    Dear Friends,
    When we run transaction pc00_m10_calc for US payroll driver for an employee for a period,we can see the renumeration statement in the output screen.
    I need to modify the internal table xrt to add the similar wage types in one period before it passes to form , which exit / BADI enhancement should for this purpose.
    Pls. advice.
    Thanks..
    Regards,Prashant

    Hi,
        Please check the below.
    Enhancement
    HRUSRCU0                                Enhancement for Customer Exit for RPCTRCU0.
    Business Add-in
    PC10_PAY0001                            User exit for base_wages in a gross up calculation
    PC10_PAY0002                            Exit to determine if negative taxables should be allowed
    PC10_PAY0003                            Exit to determine if distribution calc should be allowed
    PC10_PAY0004                            Work Tax Area Override Add-In: Activation
    PC10_PAY0005                            Work Tax Area Override Add-In: Default proration of wages
    PC10_PAY0006                            User exit for additional ESS W4 (PZ10) fields; before output
    PC10_PAY0007                            User exit for PZ10 and IT0210 fields; after input
    PC10_PAY0008                            More than 99 exemptions for US payroll withholding tax calc
    Regards,
    Srini.

  • BADI / Enhancement for WBS filtering

    Hi,
    I want to add my code to filter the IDOC PROJECT01 on 'Company code' via BAPI, BAPI_PROJECT_SAVEREPLICA. There are two BADIs but they are called before the standard code for filter objects.
    Kindly suggest a BADi / Enhancement to satisfy the above mentioned requirement.
    Thanks

    There is one Enhacement Spot (ES) that can solve ur purpose : ES_SAPL2002
    Hope That Helps
    Anirban M.

  • BADI/enhancement for CRMD_ORDER

    HI,
    In CRMD_ORDER transaction i want a BADI/enhancement in which i get both pricing structure and crmd_orderadm_h table .
    Actuallu my requirement is that i want to update the total pricing tax data calulated at each item level in the custom field of orderadm_h table.
    Iam calculating pricing tax data in PRC_DATA_SOURCE BADI.
    Thanking you.

    Thread closed

  • Enhancement for ME21N in MM Module

    Hi experts,
    My customer gives me a requirement is that when the end user uses ME21N to create a purchase order,he/she inputs the data and then click the button "save" to save the data,then it needs to check whether the vender is valid or not.If the vender is valid,then the end user can save data.Otherwise,we should not create the purchase order.
    I find out many customer functions and some BADIs,but I don't know which enhancement I should use.Could you please help me to find out which enhancement I should use??
    Thanks a lot.
    best regards,
    Villy,Lv

    Dear Villy,
    You should use BADI ME_PROCESS_PO_CUST mathod CHECK. This mathod is called before saving the PO and also if you press check button. This is best place to put your check.
    If you do not have this BADI (Below release 470) or you do not want to use BADI, a user exit will also give this opportunity.
    You may use EXIT_SAPMM06E_012 (Enhancement MM06E005).
    If you do not acess of required data for this check, please use set data / get data to bring data into the enhancement.
    I am sure this will meet the purpose.
    Sanjeev

  • Error in badi ME_GUI_PO_CUST for ME21n/22n/23n

    Dear All,
    I want to add 1 tab in ME21n/22n/23n.
    In that 2 field in EKKO table using ci_ekkodb include is add
    For that I use badi ME_GUI_PO_CUST.
    in that
    MAP_DYNPRO_FIELDS
    TRANSPORT_FROM_MODEL
    TRANSPORT_TO_DYNP
    TRANSPORT_FROM_DYNP
    TRANSPORT_TO_MODEL
    these method find error do to field name passing.
    method IF_EX_ME_GUI_PO_CUST~MAP_DYNPRO_FIELDS.
      FIELD-SYMBOLS: <mapping> LIKE LINE OF ch_mapping.
        LOOP AT ch_mapping ASSIGNING <mapping>.
          CASE <mapping>-fieldname.
            WHEN 'ZZDEPT'.                                            " Field Name
              <mapping>-metafield = mmmfd_cust_03.
            WHEN 'ZZPOGR'.                                            " Field Name
              <mapping>-metafield = mmmfd_cust_04.
          ENDCASE.
        ENDLOOP.
    endmethod.
    Referening **************** - Step by step guide on adding a new tab in ME21N using a BADI
    Replay is appreciable.
    Regards,
    Pooja

    First you go to se18 and read documentation of this badi.
    You have to implement BAdI ME_PROCESS_PO_CUST before implementing this BAdI.
    Sample code is available here.... goto->sample code->display
    In case any doubt u ask..
    Regards
    Sreekanth

  • BADI enhancement for Enjoy PO Tcodes at "header level".

    I could successfully add an item level tab to MEXXN PO tcodes. Somebody help me with the ME_GUI_PO_CUST and ME_PROCESS_PO implementations to add a customer field , say ZZ_ETYP in a separate header level tab "Expense type".
    Do I need to add subscreen2 attribute to the implementing class ?
    Will one structure do for both header and item level data ?
    Do I need to create a separate table ( like ZMEPO_BADI_EXAMPL for items ) for the header also ?
    It would be gr8 if i could get the code for the above BADIs and MEPOBADIEX's function modules.

    Dear Iyer,
    Kindly go through the code.. hope this will help you...
    <b>DETAILED DATABASE DESIGN SPECIFICATIONS</b>
    <b>1. ZTPTP_HEADER</b>
    Header: Expense Type
    Field Name     Field Type     Key Information     Field Description
    MANDT     MANDT     X     Client
    EBELN     EBELN     X     Purchasing Document Number
    ZZ_EXPTYPE     ZZEXPTYPE          Expense Type
    <b>2. ZTPTP_ITEM</b>
    Item: Retainage
    Field Name     Field Type     Key Information     Field Description
    MANDT     MANDT     X     Client
    EBELN     EBELN     X     Purchasing Document Number
    EBELP     EBELP     X     Item Number of Purchasing Document
    ZZ_RETAINAGE      ZZRETAINAGE           Retainage
    <b>3. ZSPTP_HEADER</b>
    PO Enhancement structure: Header
    Field Name     Field Type     Key Information     Field Description
    EBELN     EBELN          Purchasing Document Number
    ZZ_EXPTYPE     ZZEXPTYPE          Expense Type
    <b>4. ZSPTP_ITEM</b>
    PO Enhancement structure: Item
    Field Name     Field Type     Key Information     Field Description
    EBELN     EBELN          Purchasing Document Number
    EBELP     EBELP          Item Number of Purchasing Document
    ZZ_RETAINAGE      ZZRETAINAGE           Retainage
    Detailed logic
    <b>LZPTP_PORETAINAGETOP (TOP INCLUDE) FG: ZPTP_PORETAINAGE</b>
    persistent item data
    data: git_persistent_data type sorted table of ztptp_item
                             with unique key mandt ebeln ebelp,
    actual item data
          git_data            type sorted table of ztptp_item
                             with unique key mandt ebeln ebelp.
    persistent header data
    data: git_persistent_head type sorted table of ztptp_header
                             with unique key mandt ebeln ,
    actual header data
          git_head            type sorted table of ztptp_header
                             with unique key mandt ebeln .
    dynpro output structure
    tables: zsptp_item,
            zsptp_header.
    definitions required for dynpro/framework integration
    data: ok-code type sy-ucomm.
    Following is a SAP include.
    include lmeviewsf01.
    <b>1. ZPTP_COMMIT_HEADER FG: ZPTP_PORETAINAGE</b>
    Get the sample function module code from the standard FM: MEPOBADIEX_COMMIT. In this Function module we update the database table ZTPTP_HEADER i.e. as per a change / insert or delete command at the header level. This database table’s size will always be low. It just contains the PO s data just being edited or created.
    The interface would look like:
         TABLES
          IMT_DATA_NEWHD STRUCTURE ZTPTP_HEADER
          IMT_DATA_OLDHD STRUCTURE ZTPTP_HEADER
          Comparing the old and new data we update 3 different internal tables and using these we can update the internal tables ZTPTP_HEADER before actually updating the database table EKKO.A similar logic is coded in the sample FM : MEPOBADIEX_COMMIT
    <b>
    2. ZPTP_COMMIT_ITEM FG: ZPTP_PORETAINAGE</b>
    Get the sample function module code from the standard FM: MEPOBADIEX_COMMIT. In this Function module we update the database table ZTPTP_HEADER i.e. as per a change / insert or delete command at the item level. This database table’s size will always be low. It just contains the PO s latest data just being edited or created.
    The interface would look like :
         TABLES
           IMT_DATA_NEW STRUCTURE  ZTPTP_ITEM
      IMT_DATA_OLD STRUCTURE  ZTPTP_ITEM
          Comparing the old and new data we update 3 different internal tables and using these we can update the internal tables ZTPTP_HEADER before actually updating the database table EKPO. A similar logic is coded in the sample FM : MEPOBADIEX_COMMIT
    <b>3. ZPTP_GET_DATA_HEADER FG: ZPTP_PORETAINAGE</b>
    Get the sample function module code from the standard FM: MEPOBADIEX_GET_DATA. This FM is responsible for updating an internal table (git_head) which would hold the data the user has changed or created or displayed till the current point of time. It would also hold the latest customer header data that is to be displayed in case of a change transaction.
    The interface would be as follows:
    Local Interface:
    IMPORTING
         REFERENCE(IM_EBELN) TYPE  EBELN
         REFERENCE(IM_EBELP) TYPE  EBELP OPTIONAL
    EXPORTING
         REFERENCE(EX_HEAD) TYPE  ZTPTP_HEADER
    Read expense type from git_header. If not found, get expense value from EKKO.
    <b>4. ZPTP_GET_DATA_ITEM FG: ZPTP_PORETAINAGE</b>
    Get the sample function module code from the standard FM: MEPOBADIEX_GET_DATA. This FM is responsible for updating an internal table (git_data) which would hold the data the user has changed or created or displayed till the current point of time. It would also hold the latest customer item data that is to be displayed in case of a change transaction.
    The interface would be as follows:
    Local Interface:
      IMPORTING
         REFERENCE(IM_EBELN) TYPE  EBELN
         REFERENCE(IM_EBELP) TYPE  EBELP
      EXPORTING
         VALUE(EX_DATA) TYPE  ZTPTP_ITEM
    Read Retainage from git_data. If not found, get Retainage value from EKPO.
    <b>5.  ZPTP_INIT FG: ZPTP_PORETAINAGE</b>
    Get the sample function module code from the standard FM: MEPOBADIEX_INIT. This FM is responsible for clearing the header and item internal tables.
    clear: git_persistent_data[], git_data[],git_persistent_head[],git_head[].
    <b>6. ZPTP_OPEN FG: ZPTP_PORETAINAGE</b>
    Get the sample function module code from the standard FM: MEPOBADIEX_OPEN.  This FM is responsible for existing information from respective database tables.
    The interface would be as follows:
    Local Interface:
    IMPORTING
    REFERENCE(IM_EBELN) TYPE  EBELN
    Get Expense type and Retainage from customer created Tables and assign it to respective global internal tables.
    <b>7.  ZPTP_POP_HEADER FG: ZPTP_PORETAINAGE</b>
    Get the sample function module code from the standard FM: MEPOBADIEX_POP. This FM is responsible for getting header values from screen fields.
    The interface would be as follows:
    Local Interface:
    EXPORTING
       REFERENCE(EX_DYNP_DATAHD) TYPE  ZSPTP_HEADER
    get dynpro data
      ex_dynp_datahd = zsptp_header.
    <b>8.  ZPTP_POP_ITEM FG: ZPTP_PORETAINAGE</b>
    Get the sample function module code from the standard FM: MEPOBADIEX_POP. This FM is responsible for getting item values from screen fields.
    The interface would be as follows:
    Local Interface:
    EXPORTING
       REFERENCE(EX_DYNP_DATA) TYPE  ZSPTP_ITEM
    get dynpro data
      ex_dynp_data = zsptp_item.
    <b>9.  ZPTP_POST_HEADER FG: ZPTP_PORETAINAGE</b>
    Get the sample function module code from the standard FM: MEPOBADIEX_POST. This FM is responsible for preparing header data for posting.
    Local Interface:
    IMPORTING
       VALUE(IM_EBELN) TYPE  EBELN
    prepare customers data for posting
      check not im_ebeln is initial.
      lit_data_newhd[] = git_head.
      lit_data_oldhd[] = git_persistent_head.
      lwa_head-mandt = sy-mandt.
      lwa_head-ebeln = im_ebeln.
      modify lit_data_newhd from lwa_head transporting mandt ebeln where ebeln is initial.
    Commit data in Database ztptp_header.
      call function 'ZPTP_COMMIT_HEADER'
        tables
          imt_data_newhd = lit_data_newhd
          imt_data_oldhd = lit_data_oldhd.
    <b>10. ZPTP_POST_ITEM FG: ZPTP_PORETAINAGE</b>
    Get the sample function module code from the standard FM: MEPOBADIEX_POST. This FM is responsible for preparing item data for posting.
    "Local Interface:
    IMPORTING
        VALUE(IM_EBELN) TYPE  EBELN
      data: lwa_data like line of git_data,
            lit_data_new type standard table of ztptp_item,
            lit_data_old type standard table of ztptp_item.
    prepare customers data for posting
      check not im_ebeln is initial.
      lit_data_new[] = git_data.
      lit_data_old[] = git_persistent_data.
      lwa_data-mandt = sy-mandt.
      lwa_data-ebeln = im_ebeln.
      modify lit_data_new from lwa_data transporting mandt ebeln where ebeln is initial.
    Commit data in Database ztptp_item.
      call function 'ZPTP_COMMIT_ITEM' in update task
        tables
          imt_data_new = lit_data_new
          imt_data_old = lit_data_old.
    <b>11.  ZPTP_PUSH_HEADER FG: ZPTP_PORETAINAGE</b>
    Get the sample function module code from the standard FM: MEPOBADIEX_PUSH. This FM is responsible for populating header values to screen fields.
    Local Interface:
      IMPORTING
         REFERENCE(IM_DYNP_DATAHD) TYPE  ZSPTP_HEADER
    set dynpro data
      zsptp_header = im_dynp_datahd .
    <b>12.  ZPTP_PUSH_ITEM FG: ZPTP_PORETAINAGE</b>
    Get the sample function module code from the standard FM: MEPOBADIEX_PUSH. This FM is responsible for populating item values to screen fields.
    Local Interface:
    IMPORTING
       REFERENCE(IM_DYNP_DATA) TYPE  ZSPTP_ITEM
    set dynpro data
      zsptp_item = im_dynp_data .
    <b>13. ZPTP_SET_DATA_HEADER FG: ZPTP_PORETAINAGE</b>
    Get the sample function module code from the standard FM: MEPOBADIEX_SET_DATA. This FM is responsible for keep update header  information in git_header.
    delete a line from git_data
        delete table git_head with table key mandt = sy-mandt
                                            ebeln = im_datahd-ebeln.
    update customer data
        read table git_head assigning <lf_datahd> with table key
                                            mandt = sy-mandt
                                            ebeln = im_datahd-ebeln.
        if sy-subrc is initial.
    update existing data
          <lf_datahd>-zz_exptype = im_datahd-zz_exptype.
        else.
    make a new entry into the data table
          lwa_head = im_datahd.
          lwa_head-mandt = sy-mandt.
          insert lwa_head into table git_head.
        endif.
    <b>14. ZPTP_SET_DATA_ITEM FG: ZPTP_PORETAINAGE</b>
    Get the sample function module code from the standard FM: MEPOBADIEX_SET_DATA. This FM is responsible for keep update item information in git_data.
    delete a line from git_data
        delete table git_data with table key mandt = sy-mandt
                                            ebeln = im_data-ebeln
                                            ebelp = im_data-ebelp.
    update customer data
        read table git_data assigning <lf_data> with table key
                                            mandt = sy-mandt
                                            ebeln = im_data-ebeln
                                            ebelp = im_data-ebelp.
        if sy-subrc is initial.
    update existing data
          <lf_data>-zz_retainage = im_data-zz_retainage.
        else.
    make a new entry into the data table
          lwa_data = im_data.
          lwa_data-mandt = sy-mandt.
          insert lwa_data into table git_data.
        endif.
    <b>DETAILED SCREEN DESIGN SPECIFICATIONS</b>
    <b>screen 0002</b>
    Item Retainage
    ZSPTP_ITEM-ZZ_RETAINAGE     DEC     5     Retainage
    Screen Logic / Process before Output
      call method call_view->handle_event( 'PBO' ).
    Screen Logic / Process after Input
    call method call_view->handle_event( 'PAI' )
    <b>Screen 0003</b>
    Header: Expense type
    ZSPTP_HEADER-ZZ_EXPTYPE     NUMC     4     Expense Type
    Screen Logic / Process before Output
      call method call_view->handle_event( 'PBO' ).
    Screen Logic / Process after Input
    call method call_view->handle_event( 'PAI' )
    <b>DETAILED CLASS DESIGN SPECIFICATIONS</b>
    <b>A. ZCL_IM_ME_GUI_PO_CUST</b>
    Description
    Imp. Class ZME_GUI_PO_CUST
    Attributes
    Name     Level     Visibility     Type
    SUBSCREEN1     Constant     Public     MEPO_NAME
    SUBSCREEN2     Constant     Public     MEPO_NAME
    DYNP_DATA_PBO     Instance Attribute     Private     ZSPTP_ITEM
    DYNP_DATA_PAI     Instance Attribute     Private     ZSPTP_ITEM
    DYNP_DATA_PBOHD     Instance Attribute     Private     ZSPTP_HEADER
    DYNP_DATA_PAIHD     Instance Attribute     Private     ZSPTP_HEADER
    Methods
    Name     Level     Visibility
    IF_EX_ME_GUI_PO_CUST~SUBSCRIBE     Instance Attribute     Public
    IF_EX_ME_GUI_PO_CUST~MAP_DYNPRO_FIELDS     Instance Attribute     Public
    IF_EX_ME_GUI_PO_CUST~TRANSPORT_FROM_MODEL     Instance Attribute     Public
    IF_EX_ME_GUI_PO_CUST~TRANSPORT_TO_DYNP     Instance Attribute     Public
    IF_EX_ME_GUI_PO_CUST~TRANSPORT_FROM_DYNP     Instance Attribute     Public
    IF_EX_ME_GUI_PO_CUST~TRANSPORT_TO_MODEL     Instance Attribute     Public
    <b>1. SUBSCRIBE</b>
    Description
    Publisch Customer's Own Screens
    Detailed logic
      when lc_item.
    the name is a unique identifier for the subscreen and defined in this class definition
      lwa_subscriber-name = subscreen1.
    the dynpro number to use
      lwa_subscriber-dynpro = '0002'.
    the program where the dynpro can be found
      lwa_subscriber-program = 'SAPLZPTP_PORETAINAGE'.
    each subscreen needs his own DDIC-Structure
      lwa_subscriber-struct_name = 'ZSPTP_ITEM'.
    a label can be defined
      lwa_subscriber-label = text-001.
    the position within the tabstrib can be defined
      lwa_subscriber-position = 1.
      lwa_subscriber-height = 7.
      append lwa_subscriber to re_subscribers.
    Header subscreen
      when lc_header.
    the name is a unique identifier for the subscreen and defined in this class definition
      lwa_subscriber-name = subscreen2.
    the dynpro number to use
      lwa_subscriber-dynpro = '0003'.
    the program where the dynpro can be found
      lwa_subscriber-program = 'SAPLZPTP_PORETAINAGE'.
    each subscreen needs his own DDIC-Structure
      lwa_subscriber-struct_name = 'ZSPTP_HEADER'.
    a label can be defined
      lwa_subscriber-label = text-002.
    the position within the tabstrib can be defined
      lwa_subscriber-position = 1.
      lwa_subscriber-height = 7.
      append lwa_subscriber to re_subscribers.
      endcase.
    <b>2. MAP_DYNPRO_FIELDS</b>
    Description
    Build Up Field Catalog
    Detailed logic
      loop at ch_mapping assigning <lf_mapping>.
    *Assignment of metafields to the customer fields.
        case <lf_mapping>-fieldname.
          when 'EBELN'.       <lf_mapping>-metafield = mmmfd_preq_no_po.
          when 'EBELP'.       <lf_mapping>-metafield = mmmfd_preq_item_po.
          when 'ZZ_RETAINAGE'. <lf_mapping>-metafield = mmmfd_cust_01.
          when 'ZZ_EXPTYPE'.   <lf_mapping>-metafield = mmmfd_cust_02.
        endcase.
      endloop.
    <b>
    3. TRANSPORT_FROM_MODEL</b>
    Description
    Data Transport from Business Object
    Detailed logic
        when subscreen1.
    Get the item object
          mmpur_dynamic_cast lif_item im_model.
          check not lif_item is initial.
          lwa_mepoitem = lif_item->get_data( ).
    transport customer fields
          call function 'ZPTP_GET_DATA_ITEM'
            exporting
              im_ebeln = lwa_mepoitem-ebeln
              im_ebelp = lwa_mepoitem-ebelp
            importing
              ex_data  = lwa_customer.
    store info for later use
          move-corresponding lwa_mepoitem to dynp_data_pbo.
          move lwa_customer-zz_retainage to dynp_data_pbo-zz_retainage.
        when subscreen2.
    Get the header object
          mmpur_dynamic_cast lif_header im_model.
          check not lif_header is initial.
    transport standard fields
          lwa_mepohead = lif_header->get_data( ).
    transport customer fields
          call function 'ZPTP_GET_DATA_HEADER'
            exporting
              im_ebeln = lwa_mepohead-ebeln
            importing
              ex_head  = lwa_customerhd.
    store info for later use
          move-corresponding lwa_mepohead to dynp_data_pbohd.
          if not lwa_customerhd-zz_exptype is initial.
            move lwa_customerhd-zz_exptype to dynp_data_pbohd-zz_exptype.
          else.
            move dynp_data_paihd-zz_exptype to dynp_data_pbohd-zz_exptype.
          endif.
        when others.
      endcase.
    <b>4. TRANSPORT_TO_DYNP</b>
    Description
    Data Transport to Screen
    Detailed logic
    case im_name.
        when subscreen1 .
       Pushing item data to screen fields
          call function 'ZPTP_PUSH_ITEM'
            exporting
              im_dynp_data = dynp_data_pbo.
        when subscreen2 .
       Pushing header data to screen fields
          call function 'ZPTP_PUSH_HEADER'
            exporting
              im_dynp_datahd = dynp_data_pbohd.
        when others.
      endcase.
    <b>5. TRANSPORT_FROM_DYNP</b>
    Description
    Data Transport from Screen
    Detailed logic
    case im_name.
        when subscreen1.
    Getting item data from screen fields
          call function 'ZPTP_POP_ITEM'
            importing
              ex_dynp_data = dynp_data_pai.
          if dynp_data_pai ne dynp_data_pbo
           or dynp_data_paihd ne dynp_data_pbohd.
    If data  changed we have to notify the framework
    to transport data to the model
            re_changed = mmpur_yes.
        endif.
        when subscreen2.
    Getting header data from screen fields
          call function 'ZPTP_POP_HEADER'
            importing
              ex_dynp_datahd = dynp_data_paihd.
          if dynp_data_paihd ne dynp_data_pbohd
          or dynp_data_pai ne dynp_data_pbo.
    If data changed we have to notify the framework
    to transport data to the model
            re_changed = mmpur_yes.
          endif.
        when others.
      endcase.
    <b>6. TRANSPORT_TO_MODEL</b>
    Description
    Treatment of Function Codes
    Detailed logic
      case im_name.
        when subscreen1.
    is it an item? im_model can be header or item.
          mmpur_dynamic_cast lif_item im_model.
          check not lif_item is initial.
          lwa_mepoitem = lif_item->get_data( ).
    standard fields changed?
          if dynp_data_pbo-ebeln ne dynp_data_pai-ebeln  or
             dynp_data_pbo-ebelp ne dynp_data_pai-ebelp or
             dynp_data_pbo-zz_retainage ne dynp_data_pai-zz_retainage.
    update standard fields
            lwa_mepoitem-ebeln = dynp_data_pai-ebeln.
            lwa_mepoitem-ebelp = dynp_data_pai-ebelp.
            lwa_mepoitem-zzretainage = dynp_data_pai-zz_retainage.
            call method lif_item->set_data( lwa_mepoitem ).
          endif.
    customer fields changed?
          if dynp_data_pbo-zz_retainage ne dynp_data_pai-zz_retainage.
            call function 'ZPTP_GET_DATA_ITEM'
              exporting
                im_ebeln = lwa_mepoitem-ebeln
                im_ebelp = lwa_mepoitem-ebelp
              importing
                ex_data  = lwa_customer.
            lwa_customer-zz_retainage = dynp_data_pai-zz_retainage.
    Commit changes to database.
            call function 'ZPTP_SET_DATA_ITEM'
              exporting
                im_data = lwa_customer.
          endif.
        when subscreen2.
    is it an header? im_model can be header or item.
          mmpur_dynamic_cast lif_header im_model.
          check not lif_header is initial.
          lwa_mepohead = lif_header->get_data( ).
    standard fields changed?
          if dynp_data_pbohd-ebeln ne dynp_data_paihd-ebeln or
          dynp_data_pbohd-zz_exptype ne dynp_data_paihd-zz_exptype.
    update standard fields
            lwa_mepohead-ebeln = dynp_data_paihd-ebeln.
            lwa_mepohead-zzexptype = dynp_data_paihd-zz_exptype.
            call method lif_header->set_data( lwa_mepohead ).
          endif.
    customer fields changed?
          if dynp_data_pbohd-zz_exptype ne dynp_data_paihd-zz_exptype.
            call function 'ZPTP_GET_DATA_HEADER'
              exporting
                im_ebeln = lwa_mepohead-ebeln
              importing
                ex_head  = lwa_customerhd.
            lwa_customerhd-zz_exptype = dynp_data_paihd-zz_exptype.
    Commit changes to database.
            call function 'ZPTP_SET_DATA_HEADER'
              exporting
                im_datahd = lwa_customerhd.
          endif.
        when others.
      endcase.
    <b>
    B. ZCL_IM_ME_PROCESS_PO_CUST</b>
    Description
    Imp. Class for BAdI imp. ZME_PROCESS_PO_CUST
    Methods
    Name     Level     Visibility
    IF_EX_ME_PROCESS_PO_CUST~INITIALIZE     Instance Attribute     Public
    IF_EX_ME_PROCESS_PO_CUST~OPEN     Instance Attribute     Public
    IF_EX_ME_PROCESS_PO_CUST~PROCESS_HEADER     Instance Attribute     Public
    IF_EX_ME_PROCESS_PO_CUST~PROCESS_ITEM     Instance Attribute     Public
    IF_EX_ME_PROCESS_PO_CUST~POST     Instance Attribute     Public
    IF_EX_ME_PROCESS_PO_CUST~CLOSE     Instance Attribute     Public
    <b>
    1. INITIALIZE</b>
    Description
    Initializations (Invoked Once Only)
    Detailed logic
    initializations
      call function 'ZPTP_INIT'.
    <b>2. OPEN</b>
    Description
    Open a Purchase Order
    Detailed logic
    data: lwa_mepoheader type mepoheader.
    read customer data
    this has to be done when we open a persistent object
      check im_trtyp eq 'V' or im_trtyp eq 'A'.
      lwa_mepoheader = im_header->get_data( ).
    read customer data from database
      call function 'ZPTP_OPEN'
        exporting
          im_ebeln = lwa_mepoheader-ebeln.
    <b>3. PROCESS_HEADER</b>
    Description
    Processing of Header Data
    Detailed logic
    data: lwa_mepohead type mepoheader,
            lwa_customerhd type ztptp_header.
      include mm_messages_mac. "useful macros for message handling
    here we check customers data
      lwa_mepohead = im_header->get_data( ).
      if lwa_mepohead-loekz eq 'D'.
    a physical deletion of the header was carried out.
        lwa_customerhd-ebeln = lwa_mepohead-ebeln.
        call function 'ZPTP_SET_DATA_HEADER'
          exporting
            im_datahd                  = lwa_customerhd
            im_physical_delete_request = 'X'.
      endif.
    <b>4. PROCESS_ITEM</b>
    Description
    Processing of Item Data
    Detailed logic
    data: lwa_mepoitem type mepoitem,
            lwa_customer type ztptp_item.
      include mm_messages_mac. "useful macros for message handling
    here we check customers data
      lwa_mepoitem = im_item->get_data( ).
      if lwa_mepoitem-loekz eq 'D'.
    a physical deletion of the item was carried out. therrefor we have to
    delete customer data on the level of the item
        lwa_customer-ebeln = lwa_mepoitem-ebeln.
        lwa_customer-ebelp = lwa_mepoitem-ebelp.
        call function 'ZPTP_SET_DATA_ITEM'
          exporting
            im_data                    = lwa_customer
            im_physical_delete_request = 'X'.
      endif.
    <b>5. POST</b>
    Description
    Post
    Detailed logic
    *Posting header data
          call function 'ZPTP_POST_HEADER'
            exporting
              im_ebeln       = im_ebeln.
    *Posting item data
          call function 'ZPTP_POST_ITEM'
            exporting
              im_ebeln       = im_ebeln.
    <b>
    6. CLOSE</b>
    Description
    Closing Processing
    Detailed logic
    close customer data
      call function 'ZPTP_INIT'.

  • Enhancement for ME21N

    Hi experts,
        My customer gives me a requirement is that when the end user uses ME21N to create a purchase order,he/she inputs the data and then click the button "save" to save the data,then it needs to check whether the vender is valid or not.If the vender is valid,then the end user can save data.Otherwise,we should not create the purchase order.
        I find out many customer functions and some BADIs,but I don't know which enhancement I should use.Could you please help me to find out which enhancement I should use??
    Thanks a lot.
    best regards,
    Villy,Lv

    Hi guys,
    I find that I can use the enhancement MM06E005 to satisfy this requirement.There is a customer function EXIT_SAPMM06E_012 in this enhancement.SAP tips that this function can check customer-specific data before saving.
    Thanks guys,
    best regards,
    Villy,Lv

  • Enhancement for ME21N t-code ?

    Dear ABAP Experts..,
            I have a requirement that in ME21N t-code Delivery / Invoice tab there is a field called Payment Terms. If user select Payment Terms as '0010'
    then he wants to new screen which have different entries .
         How can i do this issue when the user is selected Payment Terms as '0010' to generate new Tab in header part ?
    Thaks & Regards.
    K. Chinna..!

    Hi,
      Use this user exit MM06E005 Or BADI
    ME_GUI_PO_CUST
    ME_PROCESS_PO_CUST
    and write your code based on requirement .
    Regards,
    kumar.

  • Is there any enhancement for me21n for controlling gl account field in po

    I got requirement that when iam creating a new PO in ME21n i want account gl value to be 5175, when i choose account assignment category as order.

    Hi Shrikant,
    Is it showing g/l acc in your PO after specifying the WBS element? If yes then there could be some wrong selection in your MIRO screen, if NO then you need to correct your PO 1st to check with your PS guy to assign a correct g/l acc to the WBS element.
    Regards
    Shiva

  • Enhancement for ME21N and ME22N

    Hi Expert,
    I need to change the delivery priority in STO, according to the data entered in the header(EKKO). But i am not able to find an exit or BAdi which is having the parameter delivery priority. The table and field names: ( EKPV LPRIO).
    In case anybody working similar requirements please let me know.
    Thanks and Regards
    Joby Jacob

    in method Post you can do this stuff like that
      DATA: ls_mepo TYPE mepoitem,
            ls_items TYPE purchase_order_item,
            lt_items TYPE purchase_order_items.
    lt_items = go_header->get_items( ).
      LOOP AT lt_items INTO ls_items.
        ls_mepo = ls_items-item->get_shipping_data( ).
    then set_shipping_data...
      ENDLOOP.

  • Enhancement for ME21N & ME22N new subscreen

    Hi all,
    I'm looking to ad a new subscreen using definition ME_GUI_PO_CUST. I looked at the example CL_EXM_IM_ME_GUI_PO_CUST to understand how it works. Do you know why in the example the include "LMEVIEWSF01" is used? How the logic in the PBA and PAI works with the new subscreen? And where to put the new logic?
    Thanks.

    DONE THROUGH USER EXIT

  • Custom screen for ME21n - BADI issue

    hi,
    I had implemented BADI ME_GUI_PO_CUST for ME21n/me22n. The control is going to Subscribe and Map Dynpro methods but the control is not going to other methods like TRANSPORT_FROM_MODEL, TRANSPORT_TO_DYNP, TRANSPORT_FROM_DYNP and TRANSPORT_TO_MODEL.
    Please explain how we can make the control to move to these methods. not sure what is missing in the implementation

    "Customer Data" on ME21N/ME22N uses the SMOD enhancement MM06E005. Screen 0101 is used for Header Customer Data. So, when you navigate through this screen it doesn't go through the TRANSPORT* methods.
    You can also use the BADI ME_GUI_PO_CUST to add your additional tabs in ME21N. You need to use the method SUBSCRIBE to set the Program, Subscreen number and other details. When you do the subscribe method, it would call the TRNSPORT* methods. Check the example code given in the class CL_EXM_IM_ME_GUI_PO_CUST.
    Regards,
    Naimesh Patel

  • BADI for ME21N

    Hi All,
       I have a doubt in BADI's for ME21N T'code i:e
    how to disible HOLD button on ME21n T'code screen and also how to handle that BADI in that ME21n T'code.
    Plz give me ASAP.
    Thanks.
    Srinivas.

    hi,
    Use the BADI
    ME_PROCESS_PO_CUST
    Other wise u can handle this by using SHDO recording.
    Regards

Maybe you are looking for

  • Problem using mDP-DVI-D adapter.

    Hi! This is my first post on this forum since I just bought my very first mac! Everything has been painless until today. Since I had a DVI-D - HDMI cable from before (which I used with my old PC to connect to my TV) I figured I'd go and buy myself th

  • Adobe Reader XI - javascript alert boxes appearing behind modal IE window

    Hi - I am experiencing the following issue: I am running Windows 7,  Internet Explorer 9 and Acrobat Reader XI. I am opening a pdf document in an IE modal dialog usiing the showModalDialog() function. My pdf document has a simple button which will di

  • From LabVIEW 2013 to 2012

    Convert from LV 2013 to LV2012 Solved! Go to Solution. Attachments: Generate_Voice_Event.vi ‏35 KB Main Voice.vi ‏35 KB Text Callback.vi ‏43 KB

  • Why is Photoshop CS5 scaling 11 x 8.5 images to 11.222 x 8.667 in Print?

    I have my document set for 11" x 8.5" paper. Anyone have an idea why Photoshop CS5 Extended would up scale 11" x 8.5" sheet to 11.222" x 8.667" ? I cannot find anything in CS5 Preferences or my Epson Printer that would do this. Under Print/Printer Se

  • Bar chart with dual axis plotting incorrectly

    Hi, I have created a BAR_VERT_CLUST2Y, which has 4 series of data. The problem I am experiencing is that when the data is charted, it appears that only the first series of data charts correctly (i.e. from the left axis). The second series of data cha