REPORT YMASTCP .
* This program raise an event START_MCP to start an automatic
* master client copy if there are no users in the system and
* there is no sceduled background job for the time when the client
* copy is running. The time period can be changed (syuzeit), and all
* the background jobs starting with @ are avoided. During this time
* the users get a system message in case of login attempt.
* The event should be specified in CCMS and a event driven client
* copy should be scheduled by SCC0.
TABLES: UINFO, TBTCO.
DATA: SYUZEIT TYPE T, SYDATUM TYPE D, LIN TYPE N, OPCODE TYPE X VALUE 2,
FLAG, STCR.
DATA: BEGIN OF ITAB OCCURS 10,
JOBNAME LIKE TBTCO-JOBNAME,
SDLSTRTDT LIKE TBTCO-SDLSTRTDT,
SDLSTRTTM LIKE TBTCO-SDLSTRTTM,
EVENTID LIKE TBTCO-EVENTID,
END OF ITAB.
DATA: BEGIN OF BDC_TAB OCCURS 5.
INCLUDE STRUCTURE BDCDATA.
DATA: END OF BDC_TAB.
DATA: BEGIN OF DATUM,
1(2),
2 VALUE '.',
3(2),
4 VALUE '.',
5(4),
END OF DATUM.
DATA: BEGIN OF TIME,
1(2),
2 VALUE ':',
3(2),
4 VALUE ':',
5(2),
END OF TIME.
DATA: BEGIN OF USR_TABL OCCURS 10.
INCLUDE STRUCTURE UINFO.
DATA: END OF USR_TABL.
* Count date and time for system message
SYDATUM = SY-DATUM.
SYUZEIT = SY-UZEIT + 7200. "MAX 12 hours overflow!!!!!
IF SY-UZEIT > SYUZEIT. SYDATUM = SY-DATUM + 1.ENDIF.
DATUM-5 = SYDATUM. DATUM-3 = SYDATUM+4(2). DATUM-1 = SYDATUM+6(2).
TIME-1 = SYUZEIT. TIME-3 = SYUZEIT+2(2). TIME-5 = SYUZEIT(2).
WRITE: / SY-DATUM, SY-UZEIT.
WRITE: / DATUM, TIME.
* Check active users
CALL 'ThUsrInfo' ID 'OPCODE' FIELD OPCODE
ID 'TAB' FIELD USR_TABL-*SYS*.
SORT USR_TABL BY BNAME.
DESCRIBE TABLE USR_TABL LINES LIN.
IF LIN > 0.
SKIP.
WRITE: / LIN, 'ACTIVE USER IS IN THE SYSTEM'.
SKIP.
LOOP AT USR_TABL.
WRITE: /2 USR_TABL-MANDT, 15 USR_TABL-BNAME.
ENDLOOP.
SKIP.
WRITE: / 'MASTER CLIENT COPY ABORTED!!!'.
EXIT.
ENDIF.
* Are there scheduled jobs ?
IF SYDATUM = SY-DATUM.
SELECT * FROM TBTCO WHERE STATUS = 'S' AND SDLSTRTTM <> ' '
AND SDLSTRTTM > SY-UZEIT AND SDLSTRTTM < SYUZEIT
AND SDLSTRTDT = SYDATUM.
MOVE-CORRESPONDING TBTCO TO ITAB.
APPEND ITAB.
ENDSELECT.
ELSE.
SELECT * FROM TBTCO WHERE STATUS = 'S' AND SDLSTRTTM <> ' '
AND ( ( ( SDLSTRTDT = SY-DATUM ) AND ( SDLSTRTTM > SYUZEIT ) ) OR
( ( SDLSTRTDT = SYDATUM ) AND ( SDLSTRTTM < SYUZEIT ) ) ).
MOVE-CORRESPONDING TBTCO TO ITAB.
APPEND ITAB.
ENDSELECT.
ENDIF.
DESCRIBE TABLE ITAB LINES LIN.
IF LIN > 0.
LOOP AT ITAB.
STCR = ITAB-JOBNAME.
IF STCR <> '@'.
FLAG = 'R'.
WRITE: / ITAB.
ENDIF.
ENDLOOP.
IF FLAG = 'R'.
SKIP.
WRITE: / 'MASTER CLIENT COPY ABORTED!!!'.
EXIT.
ENDIF.
ENDIF.
* Enter system message: Do not work in client 21!!!
BDC_TAB-PROGRAM = 'SAPMSSY0'.
BDC_TAB-DYNPRO = '0120'.
BDC_TAB-DYNBEGIN = 'X'.
APPEND BDC_TAB.
CLEAR BDC_TAB.
BDC_TAB-FNAM = 'BDC_OKCODE'.
BDC_TAB-FVAL = '/5'.
APPEND BDC_TAB.
CLEAR BDC_TAB.
BDC_TAB-PROGRAM = 'SAPMSEM1'.
BDC_TAB-DYNPRO = '4400'.
BDC_TAB-DYNBEGIN = 'X'.
APPEND BDC_TAB.
CLEAR BDC_TAB.
BDC_TAB-FNAM = 'EMLINE1'.
BDC_TAB-FVAL = 'DO NOT LOG IN TO CLIENT 21!!!!'.
APPEND BDC_TAB.
CLEAR BDC_TAB.
BDC_TAB-FNAM = 'EMLINE2'.
BDC_TAB-FVAL = 'OTHERWISE YOU MIGHT DAMAGE CLIENT 21 and 999!!!!'.
APPEND BDC_TAB.
CLEAR BDC_TAB.
BDC_TAB-FNAM = 'TEMSG-DATDEL'.
BDC_TAB-FVAL = DATUM.
APPEND BDC_TAB.
CLEAR BDC_TAB.
BDC_TAB-FNAM = 'TEMSG-TIMDEL'.
BDC_TAB-FVAL = TIME.
APPEND BDC_TAB.
CLEAR BDC_TAB.
BDC_TAB-PROGRAM = 'SAPMSYST'.
BDC_TAB-DYNPRO = '0040'.
BDC_TAB-DYNBEGIN = 'X'.
APPEND BDC_TAB.
CLEAR BDC_TAB.
BDC_TAB-FNAM = 'BDC_OKCODE'.
BDC_TAB-FVAL = '/3'.
APPEND BDC_TAB.
CLEAR BDC_TAB.
CALL TRANSACTION 'SM02' USING BDC_TAB MODE 'N'.
CALL FUNCTION 'BP_EVENT_RAISE'
EXPORTING
EVENTID = 'START_MCP'.
SKIP.
WRITE: / 'EVENT: START_MCP RAISED'.