ALE function module to process Change Pointers
Note: ABAP/4 is the proprietary programming language of SAP™.
This function module has been modeled after standard SAP™ function modules for processing master data
change pointers, such as MASTERIDOC_CREATE_SMD_DEBMAS. This function module was used as a skeleton for the
following function module for processing customer hierarchy change pointers.
FUNCTION ZMASTERIDOC_CREATE_SMD_ZDEBHI.
*"———————————————————————
*"*"Local interface:
*" IMPORTING
*" VALUE(MESSAGE_TYPE) LIKE TBDME-MESTYP
*"———————————————————————
*
************************MODIFICATION************************************
* Programmer : Rajeev Kasturi *
* Date : Feb. 1998 *
* Description : This function module has been created anew for *
* generating Customer Hierarchy IDOCs used in ALE distribution of *
* changes (creates/changes/deletes) of SD Customer Hierarchy. The new *
* message type for this purpose is ZDEBHI, and the custom "Basic IDOC" *
* type is ZKNVHM01. *
************************************************************************
DATA: BEGIN OF F_KNVHKEY,
MANDT LIKE KNVH-MANDT,
HITYP LIKE KNVH-HITYP,
KUNNR LIKE KNVH-KUNNR,
VKORG LIKE KNVH-VKORG,
VTWEG LIKE KNVH-VTWEG,
SPART LIKE KNVH-SPART,
DATAB LIKE KNVH-DATAB,
END OF F_KNVHKEY.
*
DATA: BEGIN OF F_KNVH.
INCLUDE STRUCTURE ZKNVHKEY.
DATA: END OF F_KNVH.
*
DATA: BEGIN OF T_KNVHKEY OCCURS 10.
INCLUDE STRUCTURE ZKNVHKEY.
DATA: END OF T_KNVHKEY.
*
DATA: BEGIN OF T_CHGPTRS OCCURS 10.
INCLUDE STRUCTURE BDCP.
DATA: END OF T_CHGPTRS.
DATA: BEGIN OF T_CPIDENT OCCURS 10,
CPIDENT LIKE BDCP-CPIDENT,
END OF T_CPIDENT.
DATA: BEGIN OF T_CPIDENT_KNVH OCCURS 10,
MANDT LIKE KNVH-MANDT,
HITYP LIKE KNVH-HITYP,
KUNNR LIKE KNVH-KUNNR,
VKORG LIKE KNVH-VKORG,
VTWEG LIKE KNVH-VTWEG,
SPART LIKE KNVH-SPART,
DATAB LIKE KNVH-DATAB,
CPIDENT LIKE BDCP-CPIDENT,
END OF T_CPIDENT_KNVH.
* created idocs
* SAP created variables – does not follow naming stds.
DATA: CREATED_M_IDOCS LIKE SY-TABIX.
DATA: CREATED_COMM_IDOCS LIKE SY-TABIX.
DATA: CREATED_C_IDOCS LIKE SY-TABIX.
DATA: DONE_SINCE_COMMIT LIKE SY-TABIX.
* read all not processed change pointers for the given messagetype,
* object class KUNHIER
* return code is not checked for since no exception is raised by
* the function module.
CALL FUNCTION 'CHANGE_POINTERS_READ'
EXPORTING
CHANGE_DOCUMENT_OBJECT_CLASS = 'KUNHIER'
MESSAGE_TYPE = MESSAGE_TYPE
READ_NOT_PROCESSED_POINTERS = 'X'
TABLES
CHANGE_POINTERS = T_CHGPTRS.
*
REFRESH T_KNVHKEY.
*
* create all keys from the change pointers
LOOP AT T_CHGPTRS.
* table KNVH
* table KNVH of the change document equals the table KNVH
PERFORM MOVE_X_TO_Y USING T_CHGPTRS-TABKEY+0(3)
F_KNVHKEY-MANDT.
IF F_KNVHKEY-MANDT = SPACE.
F_KNVHKEY-MANDT = T_CHGPTRS-MANDT.
ENDIF.
*
PERFORM MOVE_X_TO_Y USING T_CHGPTRS-TABKEY+3(1)
F_KNVHKEY-HITYP.
*
PERFORM MOVE_X_TO_Y USING T_CHGPTRS-TABKEY+4(10)
F_KNVHKEY-KUNNR.
*
PERFORM MOVE_X_TO_Y USING T_CHGPTRS-TABKEY+14(4)
F_KNVHKEY-VKORG.
*
PERFORM MOVE_X_TO_Y USING T_CHGPTRS-TABKEY+18(2)
F_KNVHKEY-VTWEG.
*
PERFORM MOVE_X_TO_Y USING T_CHGPTRS-TABKEY+20(2)
F_KNVHKEY-SPART.
*
PERFORM MOVE_X_TO_Y USING T_CHGPTRS-TABKEY+22(8)
F_KNVHKEY-DATAB.
*
READ TABLE T_KNVHKEY WITH KEY F_KNVHKEY.
*
MOVE F_KNVHKEY-MANDT TO T_KNVHKEY-MANDT.
MOVE F_KNVHKEY-HITYP TO T_KNVHKEY-HITYP.
MOVE F_KNVHKEY-KUNNR TO T_KNVHKEY-KUNNR.
MOVE F_KNVHKEY-VKORG TO T_KNVHKEY-VKORG.
MOVE F_KNVHKEY-VTWEG TO T_KNVHKEY-VTWEG.
MOVE F_KNVHKEY-SPART TO T_KNVHKEY-SPART.
MOVE F_KNVHKEY-DATAB TO T_KNVHKEY-DATAB.
*
PERFORM CONVERT_CDCHGID_TO_MSGFN USING T_CHGPTRS-CDCHGID
T_KNVHKEY-MSGFN.
IF SY-SUBRC <> 0.
APPEND T_KNVHKEY.
ELSE.
MODIFY T_KNVHKEY INDEX SY-TABIX.
ENDIF.
*
* add pointer to processed pointers
MOVE-CORRESPONDING F_KNVHKEY TO T_CPIDENT_KNVH.
MOVE T_CHGPTRS-CPIDENT TO T_CPIDENT_KNVH-CPIDENT.
APPEND T_CPIDENT_KNVH.
ENDLOOP.
*
SORT T_KNVHKEY BY MANDT HITYP KUNNR VKORG VTWEG SPART DATAB.
SORT T_CPIDENT_KNVH BY MANDT HITYP KUNNR VKORG VTWEG SPART DATAB.
*
* initialize counter variables for created idocs
CREATED_M_IDOCS = 0.
CREATED_C_IDOCS = 0.
DONE_SINCE_COMMIT = 0.
CLEAR T_CPIDENT. REFRESH T_CPIDENT.
* call of the idoc creator
LOOP AT T_KNVHKEY WHERE MANDT = SY-MANDT.
CLEAR F_KNVH.
MOVE-CORRESPONDING T_KNVHKEY TO F_KNVH.
* return code is not checked for since no exception is raised by
* the function module.
*
CALL FUNCTION 'ZMASTERIDOC_CREATE_ZDEBHI'
EXPORTING
KNVHKEY = F_KNVH
RCVPFC = ' '
RCVPRN = ' '
RCVPRT = ' '
SNDPFC = ' '
SNDPRN = ' '
SNDPRT = ' '
MESSAGE_TYPE = MESSAGE_TYPE
IMPORTING
CREATED_COMM_IDOCS = CREATED_COMM_IDOCS.
*
CREATED_M_IDOCS = CREATED_M_IDOCS + 1.
CREATED_C_IDOCS = CREATED_C_IDOCS + CREATED_COMM_IDOCS.
DONE_SINCE_COMMIT = DONE_SINCE_COMMIT + 1.
*
* append all processed pointer
LOOP AT T_CPIDENT_KNVH WHERE MANDT = F_KNVH-MANDT
AND HITYP = F_KNVH-HITYP
AND KUNNR = F_KNVH-KUNNR
AND VKORG = F_KNVH-VKORG
AND VTWEG = F_KNVH-VTWEG
AND SPART = F_KNVH-SPART
AND DATAB = F_KNVH-DATAB.
*
T_CPIDENT-CPIDENT = T_CPIDENT_KNVH-CPIDENT.
APPEND T_CPIDENT.
*
ENDLOOP.
IF DONE_SINCE_COMMIT >= C_IDOCS_BEFORE_COMMIT.
DONE_SINCE_COMMIT = 0.
*
* write status of all processed pointers
* return code is not checked for since no exception is raised by
* the function module.
CALL FUNCTION 'CHANGE_POINTERS_STATUS_WRITE'
EXPORTING
MESSAGE_TYPE = MESSAGE_TYPE
TABLES
CHANGE_POINTERS_IDENTS = T_CPIDENT.
*
COMMIT WORK.
* return code is not checked for since no exception is raised by
* the function module.
CALL FUNCTION 'DEQUEUE_ALL'.
*
CLEAR T_CPIDENT. REFRESH T_CPIDENT.
*
ENDIF.
*
ENDLOOP. "at t_knvhkey
*
* commit if necessary
IF DONE_SINCE_COMMIT > 0.
*
* write status of all processed pointers
* return code is not checked for since no exception is raised by
* the function module.
CALL FUNCTION 'CHANGE_POINTERS_STATUS_WRITE'
EXPORTING
MESSAGE_TYPE = MESSAGE_TYPE
TABLES
CHANGE_POINTERS_IDENTS = T_CPIDENT.
*
COMMIT WORK.
* return code is not checked for since no exception is raised by
* the function module.
CALL FUNCTION 'DEQUEUE_ALL'.
*
ENDIF.
*
MESSAGE ID 'B1' TYPE 'I' NUMBER '038'
WITH CREATED_M_IDOCS MESSAGE_TYPE.
MESSAGE ID 'B1' TYPE 'I' NUMBER '039'
WITH CREATED_C_IDOCS MESSAGE_TYPE.
ENDFUNCTION.
*&———————————————————————*
*& Form MOVE_X_TO_Y
*&———————————————————————*
* text
*———————————————————————-*
* –>P_T_CHGPTRS-TABKEY+20(2) text *
* –>P_F_KNVHKEY-SPART text *
*———————————————————————-*
FORM MOVE_X_TO_Y USING X Y.
*
Y = X.
*
ENDFORM. " MOVE_X_TO_Y
*&———————————————————————*
*& Form CONVERT_CDCHGID_TO_MSGFN
*&———————————————————————*
* text
*———————————————————————-*
* –>P_T_CHGPTRS-CDCHGID text *
* –>P_T_KNVHKEY-MSGFN text *
*———————————————————————-*
FORM CONVERT_CDCHGID_TO_MSGFN USING CDCHGID LIKE BDCP-CDCHGID
MSGFN LIKE Z1KNVHM-MSGFN.
*
MSGFN = SPACE.
*
CASE CDCHGID.
WHEN 'I'.
MSGFN = C_MSGFN_I.
WHEN 'U'.
MSGFN = C_MSGFN_U.
WHEN ' '.
MSGFN = C_MSGFN_R.
WHEN 'D'.
MSGFN = C_MSGFN_D.
WHEN 'E'.
MSGFN = C_MSGFN_D.
WHEN 'S'.
MSGFN = C_MSGFN_S.
ENDCASE.
*
ENDFORM. " CONVERT_CDCHGID_TO_MSGFN
*&———————————————————————*
*& Form FILL_SEGMENT_Z1KNVHM
*&———————————————————————*
* text
*———————————————————————-*
* –>P_KNVHKEY-MSGFN text *
*———————————————————————-*
FORM FILL_SEGMENT_Z1KNVHM USING MSGFN.
*
CLEAR Z1KNVHM.
*
Z1KNVHM-MSGFN = MSGFN.
Z1KNVHM-HITYP = KNVH-HITYP.
Z1KNVHM-KUNNR = KNVH-KUNNR.
Z1KNVHM-VKORG = KNVH-VKORG.
Z1KNVHM-VTWEG = KNVH-VTWEG.
Z1KNVHM-SPART = KNVH-SPART.
Z1KNVHM-DATAB = KNVH-DATAB.
Z1KNVHM-DATBI = KNVH-DATBI.
Z1KNVHM-HKUNNR = KNVH-HKUNNR.
Z1KNVHM-HVKORG = KNVH-HVKORG.
Z1KNVHM-HVTWEG = KNVH-HVTWEG.
Z1KNVHM-HSPART = KNVH-HSPART.
Z1KNVHM-GRPNO = KNVH-GRPNO.
Z1KNVHM-BOKRE = KNVH-BOKRE.
Z1KNVHM-PRFRE = KNVH-PRFRE.
Z1KNVHM-HZUOR = KNVH-HZUOR.
*
ENDFORM. " FILL_SEGMENT_Z1KNVHM
May 30, 2010
В·
admin В·
One Comment
Tags: ALE function module to process Change Pointers В· Posted in: ABAP Tutorials

One Response
Webmaster - June 10, 2010
Please e-mail me your contacts. I have a question webmaster@spottovo.ru” rel=”nofollow”>……
Thank you!!!…
Leave a Reply