Difficulties using change pointers

Hi all.
We are currently working on a project where we will have SAP HR as the master HR table, and distribute changes to connected systems. To to this we will use change pointers to track and collect changes to master data, and create IDoc for distribution. I have a question regarding the validity-periods for all objects in SAP.
Say I activate change pointers to track changes to master data. Is the IDoc always created when you enter the information in SAP (which not necessarily is the same date as valid-from date)? This would allow the receiving system to perform other related tasks, such as setting up email accounts for a new hire, before the actual change is implemented in the receiving system. On the other hand, the receiving system does not support the valid-from date concept, so we cannot transfer the IDoc to the receiving system until the change is actually effective. A solution here would be to create an email when the data is entered in SAP, and send the email to the receiving system instead of the Idoc, stating what action occured. This would allow the receiving system owner to perform these related tasks. Is this possible? If so, it brings me to my next question.
Is it possible to create IDoc for transfer from SAP when a valid-from date becomes effective? Since the receiving system does not support valid-from dates the IDoc can only be sent when the data is actually effective.
Any help on this issue is highly appreciated.

Hi all.
We are currently working on a project where we will have SAP HR as the master HR table, and distribute changes to connected systems. To to this we will use change pointers to track and collect changes to master data, and create IDoc for distribution. I have a question regarding the validity-periods for all objects in SAP.
Say I activate change pointers to track changes to master data. Is the IDoc always created when you enter the information in SAP (which not necessarily is the same date as valid-from date)? This would allow the receiving system to perform other related tasks, such as setting up email accounts for a new hire, before the actual change is implemented in the receiving system. On the other hand, the receiving system does not support the valid-from date concept, so we cannot transfer the IDoc to the receiving system until the change is actually effective. A solution here would be to create an email when the data is entered in SAP, and send the email to the receiving system instead of the Idoc, stating what action occured. This would allow the receiving system owner to perform these related tasks. Is this possible? If so, it brings me to my next question.
Is it possible to create IDoc for transfer from SAP when a valid-from date becomes effective? Since the receiving system does not support valid-from dates the IDoc can only be sent when the data is actually effective.
Any help on this issue is highly appreciated.

Similar Messages

  • Trigger IDOC using change pointers

    Dear All,
    We are using change pointers for triggering IDOC's when a cost centere is creaed/changed/deleted.
    We are using message type COSMAS for the same.
    I have  maintained all the necessary settings including Distrubution model.
    When a cost centre is created or changed the IDOC is getting triggered ( After executing prgroam RBDMIDOC ).
    But when we delete an cost centre the IDOC is not getting triggered.
    I am able to see the releated entries in BDCP and BDCPV tables as well as CDHDR and CDPOS tables.
    Can any one say how this can be achieved? When a cost centre is deleted then also IDOC should get triggered.
    Regards,
    SRavan

    When we remove an Cost center it physically gets deleted from the data base.There is no delete indicator as such

  • Can anyone send me link of IDOC gentn using change pointers!

    Hey guys I need to learn IDOC generation using change pointers.Please send me some help notes and link  and sample program on that !

    Hi,
    Change pointers are the mechanism through which you can send data to another SAP system or external system if there is a change happening to specific fields of master data.
    For more information, please check this link.
    http://www.angeli.biz/www5/cookbooks/workflow/workflow_30/docu.htm
    http://help.sap.com/saphelp_nw04/helpdata/en/12/83e03c19758e71e10000000a114084/content.htm
    Regards,

  • Using change pointers for Process orders

    Hi Experts,
    We have a requirement where we need to send idocs when a process order is changed. Since process order data is a transactional data, can we still use change pointers?
    We tried using the message type LOIPRO and it is giving an error saying that this message type cannot be sent with change pointers.
    Can anyone guide me with the process and steps to get this done?
    Thanks.

    For change pointer, you would have to deligate the business object with t.code SWO1. To handle it, it would take too much time to explaint.
    If you use the BAdI, and call function in this way : "  CALL FUNCTION 'FUNCTION_NAME' IN BACKGROUND TASK AS SEPARATE UNIT EXPORTING ....." the function would executed only after commit (when you call the funtion, it holds in a queue for commit. In roll back, it get disapeared).
    User method in_update from the BAdI.
    Edited by: Lior Tabib on Oct 19, 2010 4:18 PM
    Edited by: Lior Tabib on Oct 22, 2010 7:27 PM

  • BATMAS IDocs not gettting generated using Change Pointers

    Hi,
    I have scenario where I am supposed to replicate Batch between R/3 & Ware House Systems. So, for this I am using the standard BAPI to generate IDocs correctly for the batch.
    Now, when I go and change the document flow i.e. make changes to the Batch using transaction MSC2N and saving a new document is getting generated.
    Change Pointers are active globally and also on the message type. Now when I use the transaction BD21 to generate IDocs, they are getting created successfully for the distribution model that is existing. Now, when I add a filter in my distribution model based on Plant IDocs are not getting generated.
    Can any one let me know if I missed out any configuration step or else what needs to be done in order to solve this issue.
    Raghuram.

    Is this thread still valid? If not, please close the thread.
    If so, as no response has been submitted, please rephrase your question and/or provide further information to describe your requirement.
    Thanks
    Jason
    SDN SRM Moderator Team

  • Use change pointers to send complete employee in HRMD_A

    Hi
    I need to distribute employee data from my SAP system. I want to send a Idoc every time a record in PA30 is changed. But know it only sends out a IDoc with the infotype that is changed, I need to distribute all infotype's.
    Example: One person is changed in infotype IT0002. I need to send out not only IT0002 but also IT0006 and IT0008.
    Is there a way to solve this?
    Best Regards,
    Morten

    Hello Morten,
    Yes, you can do it. I have done same thing in one of my interface. You need to write code into BADI.
    BADI : BDCP_BEFORE_WRITE   
    Method : FILTER_BDCPV_BEFORE_WRITE
    Basic idea is to populate internal table change_pointers with remaining infotype details.
    Refer following code for reference....
    BADI implemented in order to send customised data as
    maintained in the distribution mdoel
    METHOD if_ex_bdcp_before_write~filter_bdcpv_before_write.
    Type Declaration
      TYPES : BEGIN OF ts_range,
                sign    TYPE tvarv-sign,
                option  TYPE tvarv-opti,
                low     TYPE tvarv-low,
                high    TYPE tvarv-high,
              END OF ts_range.
      TYPES : BEGIN OF ts_group,
                int_grp     TYPE zthr_infty_subty-int_grp,
              END OF ts_group.
    Internal table
      DATA:
        lt_zthr_infty_subty TYPE TABLE OF zthr_infty_subty,
        lt_dist_infty_subty TYPE TABLE OF t788u,
        lt_groups           TYPE TABLE OF ts_group.
      DATA:
        lt_changed_objects  TYPE TABLE OF hrobjinfty.
      DATA :
        lr_infty    TYPE RANGE OF t591s-infty,  " Range for infotypes
        lr_subty    TYPE RANGE OF t591s-subty.  " Range for subtypes.
    Work Areas
      DATA:
        lw_change_pointers   TYPE  bdcpv,
        lw_change_pointers1  TYPE  bdcpv,
        lw_text(254)         TYPE  c,
        lw_infty             TYPE  ts_range,
        lw_subty             TYPE  ts_range,
        lw_groups            TYPE  ts_group.
      DATA:
        lw_zthr_infty_subty  TYPE zthr_infty_subty,   "Infotype & Subtype
        lw_zthr_infty_subty1 TYPE zthr_infty_subty,   "Infotype & Subtype
        lw_dist_infty_subty  TYPE t788u.              "Infotypes
      DATA:
        lw_changed_objects   TYPE  hrobjinfty,
        lw_changed_objects1  TYPE  hrobjinfty,
        lw_changed_objects2  TYPE  hrobjinfty.
    Local Variables
      DATA:
        lv_tabix      TYPE sy-tabix,      " Table index
        lv_cpident    TYPE cpident,       " Change pointer no.
        lv_pernr      TYPE pa0000-pernr,  " Employee Number
        lv_tabname    TYPE dd02t-tabname, " Table Name
        lv_abkrs      TYPE pa0001-abkrs,  " Payroll Area
        lv_infty(4)   TYPE n.             " Infotype Number
    Local Constants
      CONSTANTS:
        lc_e       TYPE t591s-sprsl   VALUE  'E',
        lc_i       TYPE tvarv-sign    VALUE  'I',
        lc_x       TYPE c             VALUE  'X',
        lc_7       TYPE c             VALUE  '7',
        lc_p       TYPE otype         VALUE  'P',
        lc_zhrmd   TYPE edi_mestyp    VALUE  'ZHRMD_A',
        lc_eq      TYPE tvarv-opti    VALUE  'EQ',
        lc_pa(2)   TYPE c             VALUE  'PA',
        lc_begda   TYPE sy-datum      VALUE  '19000101',
        lc_02      TYPE pa0001-abkrs  VALUE  '02',
        lc_1000(4) TYPE n             VALUE  '1000',
        lc_2000(4) TYPE n             VALUE  '2000'.
    Clear all local variables / internal tables / Work Areas
      REFRESH : lt_groups,
                lr_infty,
                lr_subty,
                lt_changed_objects.
      CLEAR : lv_tabix,
              lv_abkrs,
              lw_change_pointers,
              lw_dist_infty_subty,
              lv_tabname,
              lw_groups.
    Select only otypes and infotypes from distribution model
    Read change infotype / subtype data
      IF NOT change_pointers[] IS INITIAL.
        LOOP AT change_pointers INTO lw_change_pointers.
          lw_changed_objects = lw_change_pointers-tabkey.
    Filter CE Employee if Pay-Area not '02'          ***
          IF flt_val EQ  lc_zhrmd.    " Check for CE emploeyee
            SELECT abkrs
              INTO lv_abkrs
              FROM pa0001 UP TO 1 ROWS
            WHERE pernr EQ lw_changed_objects-objid
              AND endda GE sy-datum
              AND begda LE sy-datum
              AND abkrs EQ lc_02.
            ENDSELECT.
            IF sy-subrc EQ 0.
              APPEND lw_changed_objects TO lt_changed_objects.
            ELSE.
              DELETE change_pointers.
            ENDIF.
          ELSE.
            APPEND lw_changed_objects TO lt_changed_objects.
          ENDIF.    " IF flt_val EQ  lc_zhrmd.
        ENDLOOP.  " LOOP AT change_pointers INTO lw_change_pointers.
        lv_cpident =  lw_change_pointers-cpident.
      ENDIF.  "IF NOT change_pointers[] IS INITIAL.
    Select only otypes and infotypes from distribution model**
    Select corresponding infotypes / subtypes from table    **
    ZTHR_INFTY_SUBTY to create change pointers              **
      CALL FUNCTION 'RH_DISTRIBUTED_INFOTYPES'
        EXPORTING
          message_type            = flt_val
          check_model             = lc_x
        TABLES
          distributed_infty_subty = lt_dist_infty_subty.
      IF NOT lt_dist_infty_subty[] IS INITIAL.
    Read table ZTHR_INFTY_SUBTY
        SELECT mandt                         "  Client
               mestyp                        "  Message Type
               infty                         "  Infotype
               subty                         "  Info Subtype
               int_grp                       "  Change pointer group
          INTO TABLE lt_zthr_infty_subty
          FROM zthr_infty_subty AS a
          FOR ALL ENTRIES IN lt_dist_infty_subty
          WHERE mestyp EQ flt_val
            AND infty EQ lt_dist_infty_subty-infty.
        IF sy-subrc EQ 0.
          CLEAR : lw_changed_objects.
          LOOP AT lt_changed_objects INTO lw_changed_objects.
            MOVE : lw_changed_objects TO lw_changed_objects2.
            AT NEW objid.
    Read all groups belongs to infotype.
              CLEAR  : lw_groups.
              REFRESH: lt_groups.
              LOOP AT lt_zthr_infty_subty INTO lw_zthr_infty_subty
                      WHERE infty = lw_changed_objects2-infty
                        AND subty = lw_changed_objects2-subty.
                lw_groups = lw_zthr_infty_subty-int_grp.
                APPEND lw_groups TO lt_groups.
              ENDLOOP.  " LOOP AT lt_zthr_infty_subty INTO ....
    Do not create change pointer if infotype not maintained in
    table 'ZTHR_INFTY_SUBTY'.
              IF sy-subrc NE 0.
                DELETE change_pointers WHERE
                            tabkey+12(4) = lw_changed_objects2-infty
                        AND tabkey+16(4) = lw_changed_objects2-subty.
              ENDIF.  " IF sy-subrc NE 0.
    Read all infotypes belongs to all above groups.
              LOOP AT lt_groups INTO lw_groups.
                LOOP AT lt_zthr_infty_subty INTO lw_zthr_infty_subty
                              WHERE int_grp EQ lw_groups-int_grp.
    Check if change pointer already present
                  READ TABLE lt_changed_objects INTO lw_changed_objects1
                      WITH KEY infty = lw_zthr_infty_subty-infty
                               subty = lw_zthr_infty_subty-subty.
                  IF sy-subrc NE 0.
    Check if data exist for infotype / subtype
                    IF lw_changed_objects-otype EQ lc_p.
                      CONCATENATE : lc_pa lw_zthr_infty_subty-infty
                             INTO   lv_tabname.
                      SELECT SINGLE pernr
                        INTO lv_pernr
                        FROM (lv_tabname)
                       WHERE subty EQ lw_zthr_infty_subty-subty
                         AND pernr EQ lw_changed_objects2-objid.
                      IF sy-subrc EQ 0.    " Change pointer for employee
    Create change pointer for infotype / subtype combination
                        ADD 1 TO lv_cpident.
                        lw_change_pointers-cpident      = lv_cpident.
                lw_change_pointers-tabkey+12(4) = lw_zthr_infty_subty-infty.
                lw_change_pointers-tabkey+16(4) = lw_zthr_infty_subty-subty.
                        lw_change_pointers-tabkey+20(8) = lc_begda.
                        APPEND lw_change_pointers TO change_pointers.
                      ENDIF.  " IF sy-subrc EQ 0.
                    ELSE.
    Create change pointer for Org Data
                      ADD 1 TO lv_cpident.
                      lw_change_pointers-cpident      = lv_cpident.
                lw_change_pointers-tabkey+12(4) = lw_zthr_infty_subty-infty.
                lw_change_pointers-tabkey+16(4) = lw_zthr_infty_subty-subty.
                      lw_change_pointers-tabkey+20(8) = lc_begda.
                      APPEND lw_change_pointers TO change_pointers.
                    ENDIF.  " IF lw_changed_objects-objtyp EQ lc_p.
                  ENDIF.  " IF sy-sybrc NE 0.
                ENDLOOP.  " LOOP AT lt_zthr_infty_subty INTO..
              ENDLOOP.  " LOOP AT lt_groups INTO lw_groups.
            ENDAT.  " AT NEW objid.
          ENDLOOP.  " LOOP AT lt_changed_objects INTO lw_changed_objects.
        ENDIF.  " IF sy-subrc EQ 0.
      ENDIF.  " IF NOT lt_dist_infty_subty[] IS INITIAL.
    ENDMETHOD.
    But make sure you maintained remaining infotypes in distribution model. I have created table zthr_infty_subty twhere I am keeping track of all infotype and subtype for which I have to send a data.. You can hardcode values in u r program if you want / if you know the all infotype for which you have to send data.
    if you still have any doubt / issues let me know your email id will mail you badi-code.
    Cheers,
    Nilesh

  • Needs to update Infotype using ALE-Change Pointers-ECC 6.0

    HR Experts,
    We are using ECC 6.0. There are two SAP-HR systems.. for e.g system A and B.
    We would like to send data from system A to B.
    If there are any changes in system A for Infotype-0, 1, 2, 6, 8, the IDOC should be generated and it should deliver and update the infotypes in system B.
    What message type I have to use?
    Do I have to use change pointers?
    If there is only change in any one of the above infotypes then it will generate IDOC for all above infotypes or just the changed one?
    Thanks in advance for your help..
    MP

    Hi Frank,
    Thanks for your quick reply!
    I rewarded you with the points
    How I have to choose which infotypes I have to transfer in message type HRMD_A, What tcode I have to use to configure this?
    Do you know the BADI or User-Exit for enhancement of custom fields?
    How I have to configure to transfer only the changed records OR transfer complete data? Where should I go to do this?
    Thanks for your help in advance...
    MP

  • Change pointers

    HI All,
    Can you guys plz help me on change pointers.
    I have activated change pointers for CREMAS and I am running program RBDMIDOC in background. But it is generating idocs properly when ever vendor is created or changed.
    Change pointer is triggering for all vendors when ever vendor is created or changed.
    Here my problem is that i don't want to generate all  idocs i want to generate idocs for some specifi vendors only (Here we are having different types of vendors depend upon Account group.)
    How can I generate specific venodr Idocs using change pointers.
    Thanks & Regards
    Praveen

    Hi Praveen,
    There are two filtering in IDoc.
    <b>Segment Filtering</b>:
    Segment filtering can be achieved using T/Code BD56. Here you can suppress a whole segment irrespective of data inside it . You have to give Message Type / Sender Prrtner / Receiver Partner.
    <b>Data Filtering</b>:
    Data filtering can be done in dustribution model where you can restrict whole IDOCS or partials IDOCS to be send based on data in fields inside IDOC depending on whether the segment in which you filter is at the highest level or at a lower level. For example in MATMAS if you put a filter of E1MARCM for a particular plant , only data for this plant will go and other plants will be ignored.
    For your case, you can use <b>segment filter</b> to send only to specific vendor(s). 
    Please check this link for detail information.
    http://help.sap.com//saphelp_470/helpdata/EN/0b/2a611c507d11d18ee90000e8366fc2/frameset.htm
    Hope this will help.
    Regards,
    Ferry Lianto

  • Change pointers for DELVRY03 Idoc

    Hi,
    I need to trigger DELVRY03 idoc whenever a delivery document is changed. I understand that one cud trigger a idoc on creation of delivery document using change pointers. But is it possible to use change pointers on edit of del. doc as well??
    Also i guess delivery document is transactional data, hence message control might have to be used, but I am not aware how to configure the same for delivery documents.
    If anyone could give me the steps to configure message control then it would be helpful.
    Thanks in advance
    Anand Chavan

    HI Anand
    Same kind of problem discussed here...
    Change pointers
    Hope it will helps you...
    Cheers..
    Vasu
    <i>** REward Points if found useful **</i>

  • How to send  changes in the Database Table Periodically using Change Pointe

    Hi,
           How to send  changes in the Database Table to the external system Periodically using Change Pointers.
    Thanks & Regards,
    Gopi.

    That depends on what table you are referring to.

  • CHANGE POINTERS-IDOC,BADI

    For Transaction code XD01 we have implemented BADI for definition CUSTOMER_ADD_DATA_BI.In this implementation we are retrieving Email address from database. This whole Process is going in OUTBOUND PROCESS.
    I am sending data by using CHANGE POINTERS method.
    How can I implement BADI for INBOUND process?
    As I know that INBOUNDPROCESS is automatic how it updates the data in Inbound Process.

    You have to run the back ground job through the program RBDAPP01 (Transaciton BD20) to process the IDocs which you have created.
    Reward if it is useful.
    Thanks,
    Srinivasa Rada

  • CHANGE POINTERS -IDOC

    For Transaction code XD01 we have implemented BADI for definition CUSTOMER_ADD_DATA_BI.In this implementation we are retrieving Email address from database. This whole Process is going in OUTBOUND PROCESS.
    I am sending data by using CHANGE POINTERS method.
    How can I implement BADI for INBOUND process?
    As I know that INBOUNDPROCESS is automatic how it updates the data in Inbound Process.

    HI,
    Please go through the following links for change pointers.
    [http://help.sap.com/saphelp_nw04/helpdata/en/12/83e03c19758e71e10000000a114084/content.htm]
    [http://abapprogramming.blogspot.com/2008/01/ale-change-pointers.html]
    Reward points if helpful.
    Thanks and Regards.

  • Transfering data from ztable across the r/3 systems by using change pointer

    hi all,
    what we have to do at the field of domain level when we are transfering data from custom table across the r/3 systems by using change pointers.

    Hi Deepak,
    Check this blog.. it gives a very good explanation on extraction of data through function modules...
    /people/siegfried.szameitat/blog/2005/09/29/generic-extraction-via-function-module
    Hope it helps..
    Regards
    Manick
    Message was edited by:
            Manickavasagan M

  • Regd. change pointers and notifications

    Hi,
    The question might sound a little too broad.
    But bear with me...Just give me a brief overview,
    of how do I go about using change pointers....
    Just correct me if I am wrong.
    We create a change document object in the system, or use an existing one. About pointers I am not sure.
    Then, through SPRO and ALE we activate the change pointer for some message type. then....??

    Hi,
    I haven't done this in a while, so please check my answer!
    1) You activate change pointers in general in one transaction (I think it was BD61, but I'm not sure)
    2) Then you activate them for certain master data (i. e. material, customer, ...) in another transaction which I don't recall atm.
    3) Every time one of those master data objects is changed, the system generates a "change pointer", which you can basically just think of as an entry in a transparent table, which includes the type and key of your master data object (such as e. g. the material number).
    4) You plan a background job which will go through those change pointers and which will generate a master IDoc (e. g. MATMASxx) for this data object. The change pointers are then reset (i. e. every item will only be sent once).
    5) Depending on your ALE customization this master IDoc will be sent to a remote system.
    You can refine this scenario using quite a bunch of different techniques. One of them is filtering (e. g. only materials with a certain material group, or based on classification etc.). Other options are reducing the Master IDoc, e. g. sending only relevant data instead of the whole master IDoc. There are even a few customer exits, if that doesn't suffice.
    Hope that helps (please reward me if it does)!
    Regards, Joerg

  • Change pointers and RFC

    Hi All,
    Is it possible to implement change pointers without creating idocs, but with only RFC's.
    Actaully i am goign through aproject document which says the interfaces are implemented using change pointers and BADI's.I was in a understandign that there would be idocs created to communicate the master data changes to other systems.
    But one of the person who involved in the interface development said that there are no idocs related involved related to the interfaces, its all RFC's enabled.
    Can anyone please let me know if change pointers can also be implemented using RFC.
    Thanks in advcane.

    Hi,
    this is described sufficiently in SAPHELP - in a nutshell:
    Changepointers - as the name says - point at changes (change documents). Therefore the creation is together with change documents (at the end of FM CHANGEDOCUMENT_CLOSE.
    Chane pointers are created for ALE message types (tcode WE81). This does not mean, that any ALE message has to follow - there might be another subsequent action.
    Writing of CP must be enabled with BD50. With BD52 the tables/fields are customized. Precondition is, that the data element of the table field is enabled for change documents and that change documents are created. BADI
    BDCP_BEFORE_WRITE allows further refinement (or any other action triggerd by the change). Note that both - change documents and CP - are created in update task - so you have to activate update debugging to see it in debug.
    Storage of CP is in table BDCP2 (since release 7.00 former releases use BDCP and BDCPS). Read pointers with FM CHANGE_POINTERS_READ and set them to processed with CHANGE_POINTERS_STATUS_WRITE. If more than aprox. 1 Mio. pointers are read an overflow may occur - use CHANGE_POINTERS_READ_MODE_SET to set an appropriate block size and CHANGE_POINTERS_READ_INFO_GET to stirr the further processing. All FM are documented sufficiently.
    Have fun!
    hp
    Edited by: Holger Pakirnus on Sep 14, 2011 3:58 PM

Maybe you are looking for