Tip

Popup an instant message on a set of users' screen

Popup an instant message on a set of users' screen.
By Sudarshan Karkada

This tip comes from Sudarshan Karkada's website.

The code below shows how to popup a message box on a group of currently logged on users'

    Requires Free Membership to View

monitor. Primarily, the code demonstrates the following techniques:
  • 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


REPORT YPOPUP_MSG NO STANDARD PAGE HEADING.
INCLUDE .

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
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_L_MSG  text                                                *
*----------------------------------------------------------------------*
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

Did you like this tip? Hate it? Send us an email to let us know your thoughts.

This was first published in July 2001

There are Comments. Add yours.

 
TIP: Want to include a code block in your comment? Use <pre> or <code> tags around the desired text. Ex: <code>insert code</code>

REGISTER or login:

Forgot Password?
By submitting you agree to receive email from TechTarget and its partners. If you reside outside of the United States, you consent to having your personal data transferred to and processed in the United States. Privacy
Sort by: OldestNewest

Forgot Password?

No problem! Submit your e-mail address below. We'll send you an email containing your password.

Your password has been sent to:

Disclaimer: Our Tips Exchange is a forum for you to share technical advice and expertise with your peers and to learn from other enterprise IT professionals. TechTarget provides the infrastructure to facilitate this sharing of information. However, we cannot guarantee the accuracy or validity of the material submitted. You agree that your use of the Ask The Expert services and your reliance on any questions, answers, information or other materials received through this Web site is at your own risk.