As a Developer you should know the concept and idea behind change pointers. I know when I say change pointers 40% readers mind will trigger two words:
BDCPS (or BDCP2).
Yes, you are right all the change pointers stored inside these tables. The main hero behind this is SMD (Shared Master Data)
The SMD tool is connected to the change document interface. If the master data changes are to be distributed, the application writes a change document. The contents of this are passed to the SMD tool. The tool writes change pointers, reads the application data and creates the master IDoc.
In simple word if you change anything in SAP, like material master, vendor info… etc. it will create an entry in change pointers table (BDCP, BDCPS). After that We mostly run RBDMIDOC to pick up these change pointers and send the IDOC to other systems so that the changes can be reflected properly.
Sometimes you might come across requirement wherein you need to manually make entries into these tables which can be achieved by standard function module for this check out the Function group BD01 where you will find Function modules like CHANGE_POINTERS_READ, CHANGE_POINTERS_DELETE, CHANGE_POINTERS_CREATE etc…
oh…. Wait I am getting a call from my Girl Friend…
My GF: “Hello. Sweetie Pie”
(She only talks in sweet way, when she needs help).
Me: Ya Tell Me Dear.
My GF: I need to de-activate creation of change pointers for message type MATMAS what should I do?
Me: To activate or deactivate a change pointer you can use transaction BD50:
You can also activate or deactivate the change pointers at single go using transaction code : BD61 (Don’t play with the Transaction code else you managers will play with you J )
Huuhhhhhh… this was a simple question she asked else I would have stuck for the whole day…
( call dropped )
Ohhhh man…she is calling…
My GF: I want to kick your ass…
Me: Oh please… What did I do??
My GF: You told me you can use transaction code BD50 to restrict the change pointer creation.
ME : Ya i said you can de-activate the change pointers for the particular message type using it.
My GF: let me Tell you clearly what is the requirement:
“I want that, for the MATMAS massage type it should not create a change pointers when material number is starting with “NON””.
Me : Darling you did not inform me this.
My GF : I did. Now give me solution for this…
(Any way I know all have the same problem That is why we called such creature as sweet poison )
Luckily we have a Business addins called BDCP_BEFORE_WRITE .
This Badi will be called just before the creation of the change pointers. So if someone wants to restrict the change pointer creation for a particular condition he/she can create an implementation of this Badi with the required message type as a filter condition e.g. MATMAS.
So now what one need to do is create a Badi implementation using MATMAS as a filter criterion.
Put a condition to check whether material is starting with the “NON” or not. If it is non just delete that entry from the change_pointers internal table.
You can use change_document_header to find out the material number. And you can put the filter as per your requirement.
So now the Question is how the IDOC is generated using change pointers???
For this We use Report program RBDMIDOC
This will pick up the Change pointers from the BDCP(2) tables and mark it as processed if IDOCs are created for the same.
Unfortunately, this is the End of life for our change pointers. Mostly basis people deletes all the processed change pointers as it is of no use from the BDCP, BDCP2/BDCPs tables.
Check the Below Image to see the Birdseye view of whole process: