0% found this document useful (0 votes)
241 views4 pages

Zcustcontact Link Check Report

This report checks for invalid links between business partner GUIDs, person GUIDs, and customer contact numbers in the CVICUSTCTLINK table. It retrieves the data from that table, looks up additional data from other tables, and identifies any invalid links to delete. If run in test mode, it just displays the invalid links, otherwise it deletes the links from the CVICUSTCTLINK table and commits the changes.

Uploaded by

nstomar
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
241 views4 pages

Zcustcontact Link Check Report

This report checks for invalid links between business partner GUIDs, person GUIDs, and customer contact numbers in the CVICUSTCTLINK table. It retrieves the data from that table, looks up additional data from other tables, and identifies any invalid links to delete. If run in test mode, it just displays the invalid links, otherwise it deletes the links from the CVICUSTCTLINK table and commits the changes.

Uploaded by

nstomar
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 4

*&---------------------------------------------------------------------*

*& Report ZCUSTCONTACT_LINK_CHECK_REPORT


*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT ZCUSTCONTACT_LINK_CHECK_REPORT.
* Local type
types: begin of lty_bp_cust_contact_ids,
partner_guid type bu_partner_guid,
person_guid type bu_partner_guid,
customer_cont type parnr,
del_flag type boole-boole,
end of lty_bp_cust_contact_ids.

* Local data declarations


DATA:
lv_msg type char255,
lv_dbcnt type char10,
* lv_parnr type knvk-parnr,
lv_person type bu_partner,
lv_partner type bu_partner,
lv_partnertmp type bu_partner,
lv_partner_guid type but000-partner_guid,
lv_person_guid type but000-partner_guid,
db_cust_contact type cursor,
ls_bp_cust_contact_ids type lty_bp_cust_contact_ids,
lt_bp_cust_contact_ids type table of lty_bp_cust_contact_ids,
ls_entries_to_delete like cvi_cust_ct_link,
lt_entries_to_delete like table of ls_entries_to_delete.

TYPES: BEGIN OF ty_but000,


partner TYPE bu_partner,
partner_guid TYPE bu_partner_guid,
END OF ty_but000.

DATA : lt_but000 TYPE STANDARD TABLE OF ty_but000,


lt_tmp_but000 TYPE STANDARD TABLE OF ty_but000,
ls_but000_partner TYPE ty_but000,
ls_but000_person TYPE ty_but000.

TYPES: BEGIN OF ty_knvk,


parnr TYPE parnr,
END OF ty_knvk.

DATA : lt_knvk TYPE STANDARD TABLE OF ty_knvk.

CONSTANTS: lc_x type boole-boole VALUE 'X',


lc_reltyp type char6 VALUE 'BUR001',
lc_pkg_size type char5 VALUE '10000'.

CLEAR: lv_msg,
lv_dbcnt,
ls_entries_to_delete.

PARAMETERS TESTMODE TYPE boole_d AS CHECKBOX DEFAULT 'X'.


REFRESH lt_entries_to_delete.

OPEN CURSOR db_cust_contact FOR


SELECT PARTNER_GUID PERSON_GUID CUSTOMER_CONT FROM cvi_cust_ct_link.

DO.
CLEAR ls_bp_cust_contact_ids.
REFRESH lt_bp_cust_contact_ids.
REFRESH: lt_but000, lt_tmp_but000, lt_knvk.

FETCH NEXT CURSOR db_cust_contact INTO CORRESPONDING FIELDS OF TABLE


lt_bp_cust_contact_ids
PACKAGE SIZE lc_pkg_size.

IF sy-subrc <> 0.
EXIT.
ELSE.
SELECT partner partner_guid FROM but000 INTO TABLE lt_tmp_but000 FOR ALL
ENTRIES IN lt_bp_cust_contact_ids WHERE partner_guid = lt_bp_cust_contact_ids-
partner_guid.
lt_but000[] = lt_tmp_but000[].

SELECT partner partner_guid FROM but000 INTO TABLE lt_tmp_but000 FOR ALL
ENTRIES IN lt_bp_cust_contact_ids WHERE partner_guid = lt_bp_cust_contact_ids-
person_guid.
APPEND LINES OF lt_tmp_but000 TO lt_but000.

SORT lt_but000 BY partner_guid.


DELETE ADJACENT DUPLICATES FROM lt_but000.

SELECT parnr FROM knvk INTO TABLE lt_knvk FOR ALL ENTRIES IN
lt_bp_cust_contact_ids WHERE parnr = lt_bp_cust_contact_ids-customer_cont.
SORT lt_knvk BY parnr.

LOOP AT lt_bp_cust_contact_ids INTO ls_bp_cust_contact_ids.


* clear lv_partner.
* select single partner FROM but000
* INTO lv_partner
* WHERE partner_guid = ls_bp_cust_contact_ids-
partner_guid.
READ TABLE lt_but000 WITH KEY partner_guid = ls_bp_cust_contact_ids-
partner_guid INTO ls_but000_partner BINARY SEARCH.
IF sy-subrc <> 0.
ls_bp_cust_contact_ids-del_flag = lc_x.
ELSE.
* clear lv_person.
* select single partner FROM but000
* INTO lv_person
* WHERE partner_guid = ls_bp_cust_contact_ids-
person_guid.
READ TABLE lt_but000 WITH KEY partner_guid = ls_bp_cust_contact_ids-
person_guid INTO ls_but000_person BINARY SEARCH.
IF sy-subrc <> 0.
ls_bp_cust_contact_ids-del_flag = lc_x.
ELSE.
clear: lv_partnertmp.
select single partner1 FROM but051
INTO lv_partnertmp
WHERE ( partner1 = ls_but000_partner-
partner "lv_partner
AND partner2 = ls_but000_person-partner
"lv_person
AND reltyp = lc_reltyp )
OR
( partner1 = ls_but000_person-partner
"lv_person
AND partner2 = ls_but000_partner-
partner "lv_partner
AND reltyp = lc_reltyp ).

IF sy-subrc <> 0.
ls_bp_cust_contact_ids-del_flag = lc_x.
ELSE.
* clear lv_parnr.
* select single parnr FROM knvk
* INTO lv_parnr
* WHERE parnr = ls_bp_cust_contact_ids-
customer_cont.
READ TABLE lt_knvk WITH KEY parnr = ls_bp_cust_contact_ids-
customer_cont TRANSPORTING NO FIELDS BINARY SEARCH.
IF sy-subrc <> 0.
ls_bp_cust_contact_ids-del_flag = lc_x.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
IF ls_bp_cust_contact_ids-del_flag = lc_x.
CLEAR ls_entries_to_delete.
ls_entries_to_delete-partner_guid = ls_bp_cust_contact_ids-partner_guid.
ls_entries_to_delete-person_guid = ls_bp_cust_contact_ids-person_guid.
ls_entries_to_delete-customer_cont = ls_bp_cust_contact_ids-
customer_cont.
APPEND ls_entries_to_delete TO lt_entries_to_delete.
ENDIF.
ENDLOOP.
ENDIF.
ENDDO.

CLOSE CURSOR db_cust_contact.

IF TESTMODE IS INITIAL.
IF lt_entries_to_delete is not initial.
DELETE cvi_cust_ct_link FROM TABLE lt_entries_to_delete.
WRITE : 'Non Test Run Mode'.
lv_dbcnt = sy-dbcnt.
lv_msg = text-002.
CONCATENATE lv_msg text-003 INTO lv_msg SEPARATED BY space.
CONCATENATE lv_msg lv_dbcnt INTO lv_msg SEPARATED BY space.
COMMIT WORK.
NEW-LINE.
ULINE.
WRITE : 'Business partner GUID'.
WRITE :36 'Business partner GUID'.
WRITE :36 'Customer Contact Number'.

LOOP AT lt_entries_to_delete into ls_entries_to_delete.


NEW-LINE.
WRITE: ls_entries_to_delete-partner_guid, space, ls_entries_to_delete-
partner_guid, space, ls_entries_to_delete-customer_cont.
CLEAR: ls_entries_to_delete.
ENDLOOP.
ELSE.
lv_msg = text-001.
ENDIF.
WRITE lv_msg.
ELSE.
IF lt_entries_to_delete is not initial.
WRITE : 'Test Run Mode'.
NEW-LINE.
ULINE.
WRITE : 'Business partner GUID'.
WRITE :36 'Business partner GUID'.
WRITE :71 'Customer Contact Number'.

LOOP AT lt_entries_to_delete into ls_entries_to_delete.


NEW-LINE.
WRITE: ls_entries_to_delete-partner_guid, space, ls_entries_to_delete-
partner_guid, space, ls_entries_to_delete-customer_cont.
CLEAR: ls_entries_to_delete.
ENDLOOP.
ENDIF.
ENDIF.

You might also like