REPORT ZUSRLOAD LINE-SIZE 128.
*******************************************
* This is a refined version of program #22.
* It loads SAP users using a text file
* with changing field lengths. The
* fields are separated by @.
* It creates the non existing users.
* When processing a record for a user
* that already exists, the program
* just adds the profile.
* The record structure of the file:
*
* FIRST_NAME
* MIDDLE_NAME
* LAST_NAME
* USER_ID
* STREET
* LOCATION
* TELEPHONE
* GROUP
* PROFILE.
*
* The program also sets the following
* constants:
*
* INI_PWD
* DIALOG
* PRINT_IMMED
* DELETE_AFTER_OUTPUT
* DATE_FORMAT
* PERIOD
* PARAMETER1 PAR_VAL1
* PARAMETER2 PAR_VAL2
* PARAMETER3 PAR_VAL3
* PARAMETER4 PAR_VAL4
*
******************************************
*Tables
TABLES: USR02.
DATA: BEGIN OF BDC_TAB1 OCCURS 5.
INCLUDE STRUCTURE BDCDATA.
DATA: END OF BDC_TAB1.
DATA: BEGIN OF DATA_TAB OCCURS 5,
LINE(128),
END OF DATA_TAB.
*Constant values
DATA: INI_PWD(8) VALUE 'INITPASS',
DIALOG VALUE 'X',
PRINT_IMMED VALUE 'X',
DELETE_AFTER_OUTPUT VALUE 'X',
DATE_FORMAT VALUE 'X',
PERIOD VALUE 'X',
PARAMETER1(3) VALUE 'GR0',
PAR_VAL1(18) VALUE 'NOGR',
PARAMETER2(3) VALUE 'GR1',
PAR_VAL2(18) VALUE 'NOGR',
PARAMETER3(3) VALUE 'MOL',
PAR_VAL3(18) VALUE '10',
PARAMETER4(3) VALUE 'UGR',
PAR_VAL4(18) VALUE '10'.
*Other data
DATA: FILE LIKE RLGRAP-FILENAME.
DATA: PROCESSING(24) VALUE 'Processing:'.
DATA: NEWLY_CREATED TYPE I.
*Variable values
DATA: FIRST_NAME(30),
MIDDLE_NAME(30),
LAST_NAME(30),
WHOLE_NAME(30),
LONG_WHOLE_NAME(90),
USER(12),
OLD_USER(12),
STREET(30),
LOCATION(25),
TELEPHONE(16),
GROUP(12),
PROFILE(12).
*Parameters
PARAMETERS: MODIFY AS CHECKBOX.
START-OF-SELECTION.
*Get the filename
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
DEF_FILENAME = ''
DEF_PATH = 'c:\'
MASK = ',*.txt,*.txt.' "',*.*,*.*.'
MODE = 'O'
TITLE = 'Please specify the locaton of the file'
IMPORTING
FILENAME = FILE
EXCEPTIONS
INV_WINSYS = 1
NO_BATCH = 2
SELECTION_CANCEL = 3
SELECTION_ERROR = 4
OTHERS = 5.
*Read the file to an internal table
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
FILENAME = FILE
TABLES
DATA_TAB = DATA_TAB.
*Get the user
LOOP AT DATA_TAB.
SPLIT DATA_TAB AT '@' INTO
FIRST_NAME
MIDDLE_NAME
LAST_NAME
USER
STREET
LOCATION
TELEPHONE
GROUP
PROFILE.
*Status information
PROCESSING+12(12) = USER.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
PERCENTAGE = ''
TEXT = PROCESSING.
*Transform the input data
LONG_WHOLE_NAME = FIRST_NAME.
LONG_WHOLE_NAME+30(30) = MIDDLE_NAME.
LONG_WHOLE_NAME+60(30) = LAST_NAME.
CONDENSE LONG_WHOLE_NAME.
WHOLE_NAME = LONG_WHOLE_NAME.
TRANSLATE USER TO UPPER CASE.
******************************Check if the user already exist
IF USER = OLD_USER. "Not first such record
IF NEWLY_CREATED = '1'. "A newly created user: add profile
PERFORM ADD_PROFILE.
ELSE. "A user that existed before
IF MODIFY = 'X'. "Adding profiles permitted
PERFORM ADD_PROFILE.
ENDIF.
ENDIF.
ELSE. "First such a record
OLD_USER = USER.
NEWLY_CREATED = '0'.
SELECT SINGLE * FROM USR02 WHERE BNAME = USER.
IF SY-SUBRC = 0. "Exist in db
IF MODIFY = 'X'. "Adding profiles permitted
PERFORM ADD_PROFILE.
ENDIF.
ELSE. "Not in db
PERFORM ADD_USER.
NEWLY_CREATED = '1'.
ENDIF.
ENDIF.
ENDLOOP.
*---------------------------------------------------------------------*
* FORM ADD_USER *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM ADD_USER.
PERFORM CREATE_USER.
CALL TRANSACTION 'SU01' USING BDC_TAB1 MODE 'N' UPDATE 'S'.
IF SY-SUBRC = 0.
WRITE: / USER, 'created'.
ELSE.
WRITE: / 'ERROR:', USER, 'creation'.
ENDIF.
PERFORM ADD_ADDRESS_DATA.
CALL TRANSACTION 'SU01' USING BDC_TAB1 MODE 'N' UPDATE 'S'.
IF SY-SUBRC = 0.
WRITE: / USER, 'address data created'.
WRITE: / USER, 'defaults created'.
WRITE: / USER, 'parameters created'.
ELSE.
WRITE: / 'ERROR:', USER, 'address data creation'.
WRITE: / 'ERROR:', USER, 'defaults creation'.
WRITE: / 'ERROR:', USER, 'parameter creation'.
ENDIF.
PERFORM ADD_DEFAULTS.
CALL TRANSACTION 'SU01' USING BDC_TAB1 MODE 'N' UPDATE 'S'.
PERFORM ADD_PARAMS.
CALL TRANSACTION 'SU01' USING BDC_TAB1 MODE 'N' UPDATE 'S'.
ENDFORM.
*---------------------------------------------------------------------*
* FORM CREATE_USER *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM CREATE_USER.
REFRESH BDC_TAB1.
CLEAR BDC_TAB1.
**************************************************1
MOVE: 'SAPMS01J' TO BDC_TAB1-PROGRAM,
'200' TO BDC_TAB1-DYNPRO,
'X' TO BDC_TAB1-DYNBEGIN.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'XU200-XUSER' TO BDC_TAB1-FNAM,
USER TO BDC_TAB1-FVAL.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'BDC_OKCODE' TO BDC_TAB1-FNAM,
'/6' TO BDC_TAB1-FVAL.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
**************************************************2
MOVE: 'SAPLSUSB' TO BDC_TAB1-PROGRAM,
'0705' TO BDC_TAB1-DYNPRO,
'X' TO BDC_TAB1-DYNBEGIN.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'XU213-DIA' TO BDC_TAB1-FNAM,
DIALOG TO BDC_TAB1-FVAL.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'XU213-PROFILE(1)' TO BDC_TAB1-FNAM,
PROFILE TO BDC_TAB1-FVAL.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'XU213-BCODE' TO BDC_TAB1-FNAM,
INI_PWD TO BDC_TAB1-FVAL.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'XU213-BCODE2' TO BDC_TAB1-FNAM,
INI_PWD TO BDC_TAB1-FVAL.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'USR02-CLASS' TO BDC_TAB1-FNAM,
GROUP TO BDC_TAB1-FVAL.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'BDC_OKCODE' TO BDC_TAB1-FNAM,
'/5' TO BDC_TAB1-FVAL.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
**************************************************3
MOVE: 'SAPLSUSB' TO BDC_TAB1-PROGRAM,
'701' TO BDC_TAB1-DYNPRO,
'X' TO BDC_TAB1-DYNBEGIN.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'BDC_OKCODE' TO BDC_TAB1-FNAM,
'CONT' TO BDC_TAB1-FVAL.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
**************************************************4
MOVE: 'SAPLSUSB' TO BDC_TAB1-PROGRAM,
'702' TO BDC_TAB1-DYNPRO,
'X' TO BDC_TAB1-DYNBEGIN.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'BDC_OKCODE' TO BDC_TAB1-FNAM,
'CONT' TO BDC_TAB1-FVAL.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
**************************************************5
MOVE: 'SAPLSUSB' TO BDC_TAB1-PROGRAM,
'703' TO BDC_TAB1-DYNPRO,
'X' TO BDC_TAB1-DYNBEGIN.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'BDC_OKCODE' TO BDC_TAB1-FNAM,
'/12' TO BDC_TAB1-FVAL.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
**************************************************6
MOVE: 'SAPMS01J' TO BDC_TAB1-PROGRAM,
'200' TO BDC_TAB1-DYNPRO,
'X' TO BDC_TAB1-DYNBEGIN.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'BDC_OKCODE' TO BDC_TAB1-FNAM,
'/3' TO BDC_TAB1-FVAL.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
ENDFORM.
*---------------------------------------------------------------------*
* FORM ADD_ADDRESS_DATA *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM ADD_ADDRESS_DATA.
REFRESH BDC_TAB1.
CLEAR BDC_TAB1.
**************************************************1
MOVE: 'SAPMS01J' TO BDC_TAB1-PROGRAM,
'200' TO BDC_TAB1-DYNPRO,
'X' TO BDC_TAB1-DYNBEGIN.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'XU200-XUSER' TO BDC_TAB1-FNAM,
USER TO BDC_TAB1-FVAL.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'BDC_OKCODE' TO BDC_TAB1-FNAM,
'/18' TO BDC_TAB1-FVAL.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
**************************************************2
MOVE: 'SAPMS01J' TO BDC_TAB1-PROGRAM,
'320' TO BDC_TAB1-DYNPRO,
'X' TO BDC_TAB1-DYNBEGIN.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'USR03-NAME1' TO BDC_TAB1-FNAM,
WHOLE_NAME TO BDC_TAB1-FVAL.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'USR03-STRAS' TO BDC_TAB1-FNAM,
STREET TO BDC_TAB1-FVAL.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'USR03-ORT02' TO BDC_TAB1-FNAM,
LOCATION TO BDC_TAB1-FVAL.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'USR03-TELNR' TO BDC_TAB1-FNAM,
TELEPHONE TO BDC_TAB1-FVAL.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'BDC_OKCODE' TO BDC_TAB1-FNAM,
'/11' TO BDC_TAB1-FVAL.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'SAPMS01J' TO BDC_TAB1-PROGRAM,
'320' TO BDC_TAB1-DYNPRO,
'X' TO BDC_TAB1-DYNBEGIN.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'BDC_OKCODE' TO BDC_TAB1-FNAM,
'/3' TO BDC_TAB1-FVAL.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
**************************************************3
MOVE: 'SAPMS01J' TO BDC_TAB1-PROGRAM,
'200' TO BDC_TAB1-DYNPRO,
'X' TO BDC_TAB1-DYNBEGIN.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'BDC_OKCODE' TO BDC_TAB1-FNAM,
'/3' TO BDC_TAB1-FVAL.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
ENDFORM.
*---------------------------------------------------------------------*
* FORM ADD_DEFAULTS *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM ADD_DEFAULTS.
REFRESH BDC_TAB1.
CLEAR BDC_TAB1.
**************************************************1
MOVE: 'SAPMS01J' TO BDC_TAB1-PROGRAM,
'200' TO BDC_TAB1-DYNPRO,
'X' TO BDC_TAB1-DYNBEGIN.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'XU200-XUSER' TO BDC_TAB1-FNAM,
USER TO BDC_TAB1-FVAL.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'BDC_OKCODE' TO BDC_TAB1-FNAM,
'/17' TO BDC_TAB1-FVAL.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
**************************************************2
MOVE: 'SAPMS01J' TO BDC_TAB1-PROGRAM,
'310' TO BDC_TAB1-DYNPRO,
'X' TO BDC_TAB1-DYNBEGIN.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'XU310-SPDB1' TO BDC_TAB1-FNAM,
PRINT_IMMED TO BDC_TAB1-FVAL.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'XU310-SPDA1' TO BDC_TAB1-FNAM,
DELETE_AFTER_OUTPUT TO BDC_TAB1-FVAL.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'XU310-DATFM2' TO BDC_TAB1-FNAM,
DATE_FORMAT TO BDC_TAB1-FVAL.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'XU310-DCPFM2' TO BDC_TAB1-FNAM,
PERIOD TO BDC_TAB1-FVAL.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'BDC_OKCODE' TO BDC_TAB1-FNAM,
'/11' TO BDC_TAB1-FVAL.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'SAPMS01J' TO BDC_TAB1-PROGRAM,
'320' TO BDC_TAB1-DYNPRO,
'X' TO BDC_TAB1-DYNBEGIN.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'BDC_OKCODE' TO BDC_TAB1-FNAM,
'/3' TO BDC_TAB1-FVAL.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
**************************************************3
MOVE: 'SAPMS01J' TO BDC_TAB1-PROGRAM,
'200' TO BDC_TAB1-DYNPRO,
'X' TO BDC_TAB1-DYNBEGIN.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'BDC_OKCODE' TO BDC_TAB1-FNAM,
'/3' TO BDC_TAB1-FVAL.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
ENDFORM.
*---------------------------------------------------------------------*
* FORM ADD_PARAMS *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM ADD_PARAMS.
REFRESH BDC_TAB1.
CLEAR BDC_TAB1.
**************************************************1
MOVE: 'SAPMS01J' TO BDC_TAB1-PROGRAM,
'200' TO BDC_TAB1-DYNPRO,
'X' TO BDC_TAB1-DYNBEGIN.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'XU200-XUSER' TO BDC_TAB1-FNAM,
USER TO BDC_TAB1-FVAL.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'BDC_OKCODE' TO BDC_TAB1-FNAM,
'/19' TO BDC_TAB1-FVAL.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
**************************************************2
MOVE: 'SAPMS01J' TO BDC_TAB1-PROGRAM,
'350' TO BDC_TAB1-DYNPRO,
'X' TO BDC_TAB1-DYNBEGIN.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'XU350-PARID(1)' TO BDC_TAB1-FNAM,
PARAMETER1 TO BDC_TAB1-FVAL.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'XU350-PARVA(1)' TO BDC_TAB1-FNAM,
PAR_VAL1 TO BDC_TAB1-FVAL.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'XU350-PARID(2)' TO BDC_TAB1-FNAM,
PARAMETER2 TO BDC_TAB1-FVAL.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'XU350-PARVA(2)' TO BDC_TAB1-FNAM,
PAR_VAL2 TO BDC_TAB1-FVAL.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'XU350-PARID(3)' TO BDC_TAB1-FNAM,
PARAMETER3 TO BDC_TAB1-FVAL.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'XU350-PARVA(3)' TO BDC_TAB1-FNAM,
PAR_VAL3 TO BDC_TAB1-FVAL.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'XU350-PARID(4)' TO BDC_TAB1-FNAM,
PARAMETER4 TO BDC_TAB1-FVAL.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'XU350-PARVA(4)' TO BDC_TAB1-FNAM,
PAR_VAL4 TO BDC_TAB1-FVAL.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'BDC_OKCODE' TO BDC_TAB1-FNAM,
'/11' TO BDC_TAB1-FVAL.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'SAPMS01J' TO BDC_TAB1-PROGRAM,
'320' TO BDC_TAB1-DYNPRO,
'X' TO BDC_TAB1-DYNBEGIN.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'BDC_OKCODE' TO BDC_TAB1-FNAM,
'/3' TO BDC_TAB1-FVAL.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
**************************************************3
MOVE: 'SAPMS01J' TO BDC_TAB1-PROGRAM,
'200' TO BDC_TAB1-DYNPRO,
'X' TO BDC_TAB1-DYNBEGIN.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'BDC_OKCODE' TO BDC_TAB1-FNAM,
'/3' TO BDC_TAB1-FVAL.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
ENDFORM.
*---------------------------------------------------------------------*
* FORM ADD_PROFILE *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM ADD_PROFILE.
REFRESH BDC_TAB1.
CLEAR BDC_TAB1.
**************************************************1
MOVE: 'SAPMS01J' TO BDC_TAB1-PROGRAM,
'200' TO BDC_TAB1-DYNPRO,
'X' TO BDC_TAB1-DYNBEGIN.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'XU200-XUSER' TO BDC_TAB1-FNAM,
USER TO BDC_TAB1-FVAL.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'BDC_OKCODE' TO BDC_TAB1-FNAM,
'/7' TO BDC_TAB1-FVAL.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
**************************************************2
MOVE: 'SAPMS01J' TO BDC_TAB1-PROGRAM,
'0213' TO BDC_TAB1-DYNPRO,
'X' TO BDC_TAB1-DYNBEGIN.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'XU213-PROFILE(1)' TO BDC_TAB1-FNAM,
PROFILE TO BDC_TAB1-FVAL.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'BDC_OKCODE' TO BDC_TAB1-FNAM,
'/11' TO BDC_TAB1-FVAL.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'SAPMS01J' TO BDC_TAB1-PROGRAM,
'0213' TO BDC_TAB1-DYNPRO,
'X' TO BDC_TAB1-DYNBEGIN.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'BDC_OKCODE' TO BDC_TAB1-FNAM,
'/3' TO BDC_TAB1-FVAL.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
**************************************************3
MOVE: 'SAPMS01J' TO BDC_TAB1-PROGRAM,
'200' TO BDC_TAB1-DYNPRO,
'X' TO BDC_TAB1-DYNBEGIN.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
MOVE: 'BDC_OKCODE' TO BDC_TAB1-FNAM,
'/3' TO BDC_TAB1-FVAL.
APPEND BDC_TAB1.CLEAR BDC_TAB1.
CALL TRANSACTION 'SU01' USING BDC_TAB1 MODE 'N' UPDATE 'S'.
IF SY-SUBRC = 0.
WRITE: / USER, 'got profile', PROFILE.
ELSE.
WRITE: / 'ERROR:', USER, 'did not get profile', PROFILE.
ENDIF.
ENDFORM.