Pop a Message to specific SAP users

Pop a Message to specific SAP users

Is there anyway to popup a window on particular users screens though abap program?

*
* Pop a Message to specific SAP users
*
* How to get a list of all the currently logged on users?
* How to popup an instant message on a user's monitor?
* How to get a specific user's details?
* Usage of 'POPUP_GET_VALUES' function module to get data from user
* without having to write GUI code
*
* Submitted by : SAP Basis, ABAP Programming and Other IMG Stuff
* http://www.sap-img.com
*
REPORT ZPOPUP NO STANDARD PAGE HEADING.
INCLUDE <ICON>.

DATA: BEGIN OF USR_TABL OCCURS 0.
 INCLUDE STRUCTURE UINFO.
DATA: END OF USR_TABL.

DATA: L_LENGTH TYPE I,
 T_ABAPLIST LIKE ABAPLIST OCCURS 0 WITH HEADER LINE,
 BEGIN OF T_USER OCCURS 0,
 COUNTER TYPE I,
 SELECTION TYPE C,
 MANDT LIKE SY-MANDT,
 BNAME LIKE SY-UNAME,
 NAME_FIRST LIKE V_ADRP_CP-NAME_FIRST,
 NAME_LAST LIKE V_ADRP_CP-NAME_LAST,
 DEPARTMENT LIKE V_ADRP_CP-DEPARTMENT,
 TEL_NUMBER LIKE V_ADRP_CP-TEL_NUMBER,
 END OF T_USER,
 L_CLIENT LIKE SY-MANDT,
 L_USERID LIKE UINFO-BNAME,
 L_OPCODE TYPE X,
 L_FUNCT_CODE(1) TYPE C,
 L_TEST(200) TYPE C.

L_OPCODE = 2.
CALL 'ThUsrInfo' ID 'OPCODE' FIELD L_OPCODE
 ID 'TAB' FIELD USR_TABL-*SYS*.

CLEAR T_USER. REFRESH T_USER.
LOOP AT USR_TABL.
 T_USER-MANDT = USR_TABL-MANDT.
 T_USER-BNAME = USR_TABL-BNAME.
 APPEND T_USER.
ENDLOOP.

SORT T_USER.
DELETE ADJACENT DUPLICATES FROM T_USER.
LOOP AT T_USER.
 T_USER-COUNTER = SY-TABIX.
 SELECT V~NAME_FIRST

 V~NAME_LAST
 V~DEPARTMENT
 V~TEL_NUMBER
 INTO (T_USER-NAME_FIRST,
 T_USER-NAME_LAST,
 T_USER-DEPARTMENT,
 T_USER-TEL_NUMBER)
 FROM USR21 AS U
 JOIN V_ADRP_CP AS V
 ON U~PERSNUMBER = V~PERSNUMBER AND
 U~ADDRNUMBER = V~ADDRNUMBER
 WHERE U~BNAME = T_USER-BNAME.
 ENDSELECT.
 MODIFY T_USER.
ENDLOOP.
SORT T_USER BY NAME_LAST NAME_FIRST.
PERFORM DISPLAY_LIST.

TOP-OF-PAGE.
 PERFORM DISPLAY_MENU.
* End of top-of-page

TOP-OF-PAGE DURING LINE-SELECTION.
 PERFORM DISPLAY_MENU.
* End of top-of-page during line-selection


AT LINE-SELECTION.
 IF SY-CUROW = 2.
 IF SY-CUCOL < 19.
 T_USER-SELECTION = 'X'.
 MODIFY T_USER TRANSPORTING SELECTION WHERE SELECTION = ''.
 PERFORM DISPLAY_LIST.
 ELSEIF SY-CUCOL < 36.
 CLEAR T_USER-SELECTION.
 MODIFY T_USER TRANSPORTING SELECTION WHERE SELECTION = 'X'.
 PERFORM DISPLAY_LIST.
 ELSEIF SY-CUCOL < 50.
 PERFORM TRANSFER_SELECTION.
 PERFORM POPUP_MSG.
 ELSEIF SY-CUCOL < 67.
 PERFORM TRANSFER_SELECTION.
 SORT T_USER BY NAME_LAST.
 PERFORM DISPLAY_LIST.
 ELSEIF SY-CUCOL < 81.
 PERFORM TRANSFER_SELECTION.
 SORT T_USER BY NAME_FIRST.
 PERFORM DISPLAY_LIST.
 ELSEIF SY-CUCOL < 93.
 PERFORM TRANSFER_SELECTION.
 SORT T_USER BY MANDT.
 PERFORM DISPLAY_LIST.
 ENDIF.
 ENDIF.
* End of line-selection

*&---------------------------------------------------------------------*
*& Form DISPLAY_LIST
*&---------------------------------------------------------------------*
FORM DISPLAY_LIST.
SY-LSIND = 0.
FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
LOOP AT T_USER.
 WRITE: / SY-VLINE, T_USER-SELECTION AS CHECKBOX,
 SY-VLINE, T_USER-MANDT,
 SY-VLINE, T_USER-BNAME,
 SY-VLINE, T_USER-NAME_FIRST(15),
 SY-VLINE, T_USER-NAME_LAST(15),
 SY-VLINE, T_USER-DEPARTMENT(20),
 SY-VLINE, T_USER-TEL_NUMBER(20), SY-VLINE.
 HIDE: T_USER-COUNTER, T_USER-SELECTION.
ENDLOOP.
FORMAT COLOR OFF.
WRITE: /(108) SY-ULINE.
ENDFORM. " DISPLAY_LIST

*&---------------------------------------------------------------------*
*& Form DISPLAY_MENU
*&---------------------------------------------------------------------*
FORM DISPLAY_MENU.
 FORMAT COLOR COL_HEADING HOTSPOT.
 WRITE: (91) SY-ULINE,
 / SY-VLINE NO-GAP, (4) ICON_SELECT_ALL NO-GAP, 'Select All',
 SY-VLINE NO-GAP, (4) ICON_DESELECT_ALL NO-GAP, 'Deselect All',
 SY-VLINE NO-GAP, (4) ICON_SHORT_MESSAGE NO-GAP, 'Send Popup',
 SY-VLINE NO-GAP, (4) ICON_SORT_UP NO-GAP, 'Last Name' NO-GAP,
 SY-VLINE NO-GAP, (4) ICON_SORT_UP NO-GAP, 'First Name' NO-GAP,
 SY-VLINE NO-GAP, (4) ICON_SORT_UP NO-GAP, 'Client' NO-GAP,
 SY-VLINE,
 /(91) SY-ULINE,
 /(108) SY-ULINE.
 FORMAT HOTSPOT OFF.

 WRITE: / SY-VLINE, ' ',
 SY-VLINE, 'Cli',
 SY-VLINE, 'User ',
 SY-VLINE, 'First Name ',
 SY-VLINE, 'Last Name ',
 SY-VLINE, 'Department ',
 SY-VLINE, 'Telephone ',
 SY-VLINE,
 /(108) SY-ULINE.
 FORMAT COLOR OFF.
ENDFORM. " DISPLAY_MENU

*&---------------------------------------------------------------------*
*& Form TRANSFER_SELECTION
*&---------------------------------------------------------------------*
FORM TRANSFER_SELECTION.
 DO.
 READ LINE SY-INDEX FIELD VALUE T_USER-SELECTION.
 IF SY-SUBRC <> 0.
 EXIT.
 ENDIF.
 MODIFY T_USER TRANSPORTING SELECTION
 WHERE COUNTER = T_USER-COUNTER.
 ENDDO.
 CLEAR T_USER.
ENDFORM. " TRANSFER_SELECTION

*&---------------------------------------------------------------------*
*& Form POPUP_MSG
*&---------------------------------------------------------------------*
FORM POPUP_MSG.
 DATA: L_MSG LIKE SM04DIC-POPUPMSG VALUE 'Experimental Message',
 L_LEN TYPE I,
 L_RET TYPE C.

 LOOP AT T_USER WHERE SELECTION = 'X'.
 PERFORM GET_MESSAGE CHANGING L_MSG L_RET.
 EXIT.
 ENDLOOP.
 IF L_RET = 'A'. "User cancelled the message
 EXIT.
 ENDIF.
* Get the message text
 L_LEN = STRLEN( L_MSG ).
 LOOP AT T_USER WHERE SELECTION = 'X'.
 CALL FUNCTION 'TH_POPUP'
 EXPORTING
 CLIENT = T_USER-MANDT
 USER = T_USER-BNAME
 MESSAGE = L_MSG
 MESSAGE_LEN = L_LENGTH
* CUT_BLANKS = ' '
 EXCEPTIONS
 USER_NOT_FOUND = 1
 OTHERS = 2.
 IF SY-SUBRC <> 0.
 WRITE: 'User ', T_USER-BNAME, 'not found.'.
 ENDIF.
 ENDLOOP.
 IF SY-SUBRC <> 0.
* Big error! No user has been selected.
 MESSAGE ID 'AT' TYPE 'E' NUMBER '315' WITH
 'No user selected!'.
 EXIT.
 ENDIF.
ENDFORM. " POPUP_MSG
*&---------------------------------------------------------------------*
*& Form GET_MESSAGE
*&---------------------------------------------------------------------*
FORM GET_MESSAGE CHANGING P_L_MSG LIKE SM04DIC-POPUPMSG
 P_RETURNCODE TYPE C.
DATA: BEGIN OF FIELDS OCCURS 1.
 INCLUDE STRUCTURE SVAL.
DATA: END OF FIELDS,
 RETURNCODE TYPE C.

 FIELDS-TABNAME = 'SM04DIC'.
 FIELDS-FIELDNAME = 'POPUPMSG'.
 FIELDS-FIELDTEXT = 'Message :'.
 CONCATENATE ' - Msg from' SY-UNAME '.' INTO FIELDS-VALUE SEPARATED
 BY ' '.
 APPEND FIELDS.

 CALL FUNCTION 'POPUP_GET_VALUES'
 EXPORTING POPUP_TITLE = 'Supply the popup message'

 IMPORTING RETURNCODE = P_RETURNCODE
 TABLES FIELDS = FIELDS.

 IF P_RETURNCODE = 'A'.
 EXIT.
 ELSE.
 READ TABLE FIELDS INDEX 1.
 P_L_MSG = FIELDS-VALUE.
 ENDIF.
ENDFORM. " GET_MESSAGE
*-- End of Program

你可能感兴趣的:(C++,c,C#,UP)