REPORT ZRDCATF NO STANDARD PAGE HEADING.
************************************************************************
* Central user maintenance from one SAP system for a set of systems.
* (Like in UNIX: NIS, TIVOLI or OMNIGUARD)
*
* The program first calls SU01 to create, delete or modify an SAP user
* in the local system. Everything looks normal, but in the background
* it captures the entered data using RS_CATT_MAINTAIN.
* Then it converts the CATF table to a regular BDC table.
* As a third step it reads the type 3 RFC destinations from the table
* RFCDES with the format: SID_user_CLIENT (where SID and CLIENT are
* variables), and displays a selection screen (interactive list) with
* checkboxes.
* Then runs SU01 in the selected remote systems, with the captured
* parameters.
* The catf/bdf conversion is somewhat simplifyed, uses only the varf1,
* but it can do the job.
************************************************************************
TABLES: CATF, CATR, CATG, CATV, CATU, CATP, CATX, CATA.
TABLES: BDCDATA, RFCDES.
DATA: FIRST(2), SECOND(2), FNAM(30), FVAL(50).
DATA: TRNAM LIKE CATF-TCODE.
DATA: ABLNR LIKE CATF-ABLNR.
DATA: BEGIN OF BDC_TAB OCCURS 5.
INCLUDE STRUCTURE BDCDATA.
DATA: END OF BDC_TAB.
DATA: MARK, GOMB(13).
DATA: BEGIN OF MESSG.
INCLUDE STRUCTURE MESSAGEINF.
DATA: END OF MESSG.
* Call SU01 and capture the input data in the CATT tables
CALL FUNCTION 'RS_CATT_MAINTAIN'
EXPORTING
AKTION = 'GENR'
CONFIRMATION = ' '
TCODE = 'SU01'
IMPORTING
ABLNR = ABLNR.
* Create a BDC table based upon the data in catf
CLEAR BDC_TAB.
REFRESH BDC_TAB.
SELECT * FROM CATF WHERE ABLNR = ABLNR.
IF NOT CATF-TCODE IS INITIAL.
TRNAM = CATF-TCODE.
ENDIF.
BDC_TAB-PROGRAM = CATF-MPOOL.
BDC_TAB-DYNPRO = CATF-DYNNR.
BDC_TAB-DYNBEGIN = 'X'.
APPEND BDC_TAB.
CLEAR BDC_TAB.
DO.
FIRST = CATF-VARF1.
SHIFT CATF-VARF1 LEFT BY 2 PLACES.
SECOND = CATF-VARF1.
SHIFT CATF-VARF1 LEFT BY 2 PLACES.
IF FIRST IS INITIAL.EXIT. ENDIF.
FNAM = CATF-VARF1(FIRST).
SHIFT CATF-VARF1 LEFT BY FIRST PLACES.
FVAL = CATF-VARF1(SECOND).
SHIFT CATF-VARF1 LEFT BY SECOND PLACES.
BDC_TAB-FNAM = FNAM.
BDC_TAB-FVAL = FVAL.
APPEND BDC_TAB.
CLEAR BDC_TAB.
ENDDO.
ENDSELECT.
* Clean the CATT tables
DELETE FROM CATF WHERE ABLNR = ABLNR.
DELETE FROM CATR WHERE ABLNR = ABLNR.
DELETE FROM CATG WHERE ABLNR = ABLNR.
DELETE FROM CATV WHERE ABLNR = ABLNR.
DELETE FROM CATU WHERE ABLNR = ABLNR.
DELETE FROM CATP WHERE ABLNR = ABLNR.
DELETE FROM CATX WHERE ABLNR = ABLNR.
DELETE FROM CATA WHERE ABLNR = ABLNR.
COMMIT WORK.
* Display the list of systems and clients defined with SM59
WRITE: / 'SELECT ONE OR MORE SYSTEMS AND CLIENTS ' COLOR 4.
WRITE: / 'DOUBLECLICK ON PROCEED TO MIGRATE THE CHANGES ' COLOR 4.
WRITE: / 'DOUBLECLICK ON EXIT TO LEAVE WITHOUT MIGRATION' COLOR 4.
SKIP.
SELECT * FROM RFCDES WHERE RFCTYPE = '3' AND RFCDEST LIKE '%user%'.
WRITE:/1(3) RFCDES-RFCDEST, 9 RFCDES-RFCDEST+9(3), MARK AS CHECKBOX.
HIDE: RFCDES-RFCDEST, MARK.
ENDSELECT.
SKIP.
GOMB = 'PROCEED'.
WRITE: / GOMB COLOR 6. HIDE GOMB.
SKIP.
GOMB = 'EXIT'.
WRITE: / GOMB COLOR 6. HIDE GOMB.
CLEAR GOMB.
* When EXIT or PROCEED is choosed
AT LINE-SELECTION.
IF GOMB = 'EXIT'.
LEAVE PROGRAM.
ELSEIF GOMB = 'PROCEED'.
DO.
CLEAR MARK.CLEAR RFCDES-RFCDEST.
READ LINE SY-INDEX FIELD VALUE MARK.
IF SY-SUBRC NE 0. EXIT. ENDIF.
IF RFCDES-RFCDEST IS INITIAL.CONTINUE.ENDIF.
* For all the marked entries: run su01 in the remote system
IF MARK = 'X'.
CALL FUNCTION 'RFC_CALL_TRANSACTION' DESTINATION RFCDES-RFCDEST
EXPORTING
TRANCODE = TRNAM
IMPORTING
MESSG = MESSG
TABLES
BDCTABLE = BDC_TAB.
* Write the log
WRITE: / RFCDES-RFCDEST, MESSG-MSGTX.
ENDIF.
ENDDO.
ENDIF.