问个发消息的问题

发表于:2007-06-08来源:作者:点击数: 标签:
我想做到SEND一个MSG给一个用户,让用户第一时间看到这个MSG 如果用SNDBRKMSG的话,如果这个用户不在线,当他登陆的时候,这条消息也不会弹出来,必须DSPMSG才能看到。 怎么样才能做到当这个用户登陆的时候,让这个消息第一时间弹

我想做到SEND一个MSG给一个用户,让用户第一时间看到这个MSG


如果用SNDBRKMSG的话,如果这个用户不在线,当他登陆的时候,这条消息也不会弹出来,必须DSPMSG才能看到。


怎么样才能做到当这个用户登陆的时候,让这个消息第一时间弹出来显示给用户??? :em06:  :em06:

 zzzddd 回复于:2005-03-21 15:27:19
改它的usrprf,让他的Delivery . . . . . . . . . . . . DLVRY          *BREAK ,这样就可以了!

 xuguopeng 回复于:2005-03-21 17:09:53
那个我已经试过了 不行的

如果这个用户他在系统里面,SNDBRKMSG他会马上看到

可如果他不在线,过后登陆到系统的时候,这条消息是不弹出来的

只能用DSPMSG看才行。。。。。。。。。

 Ginger 回复于:2005-03-21 18:49:08
[quote:0cd0f247ca="zzzddd"]改它的usrprf,让他的Delivery . . . . . . . . . . . . DLVRY          *BREAK ,这样就可以了![/quote:0cd0f247ca]

这样改了后,sndmsg后确实是可以了,但问题也来了,所有的消息都会弹出来,如JOB结束的MSG,这样会很烦~

PS: sndbrkmsg偶没有找到发送给USR的选项啊,好像是只能发给station吧,请教如用该CMD发给USR应如何操作?

TKS!

 mamei 回复于:2005-03-22 09:22:45
前段时间,我鼓捣过这个,

写了一个CL

回去我把源码给你参考一下!!

 xuguopeng 回复于:2005-03-22 10:08:19
我想能否设置发送MSG的Severity code呢??

如果可以设置Severity code的话 就可以更改Severity code filter来取得自己要的消息了。。。

 zzzddd 回复于:2005-03-22 11:03:28
应该可以的亚!你可以自己定义消息吧!

 xuguopeng 回复于:2005-03-22 11:34:38
知道了~ 发个消息还的建MSGF

 YZG 回复于:2005-03-23 12:04:03
我试做了一个.



命令界面




效果画面


 YZG 回复于:2005-03-23 12:16:28
第一步:修改用户登录的初始程序

初始程序代码如下:

/************************************************** */
/*        CLP - INTPGM - INITIAL PROGRAM                                       */
/************************************************** */
             PGM

             DCL        VAR(&MSGQ)    TYPE(*CHAR) LEN(10)
             DCL        VAR(&MSGQLIB) TYPE(*CHAR) LEN(10)

             RTVUSRPRF  MSGQ(&MSGQ) MSGQLIB(&MSGQLIB)

             CHGMSGQ    MSGQ(&MSGQLIB/&MSGQ) DLVRY(*BREAK) +
                                 PGM(YAOLIB/RCVBRKMSG)

             CALL       PGM(QSYS/QCMD)

             RETURN

             ENDPGM






 YZG 回复于:2005-03-23 12:23:28
第二步: 建立MESSAGE接受程序

代码如下:

/* ************************************************* */
/*        CLP - RCVBRKMSG - RECEIVE BREAK MESSAGE                    */
/* ************************************************* */

             PGM        PARM(&MSGQ &MSGQLIB &MSGKEY)

             DCL        VAR(&MSGQ   ) TYPE(*CHAR) LEN(10)
             DCL        VAR(&MSGQLIB) TYPE(*CHAR) LEN(10)
             DCL        VAR(&MSGKEY ) TYPE(*CHAR) LEN(4)
             DCL        VAR(&MSGDTA ) TYPE(*CHAR) LEN(200)
             DCL        VAR(&MSGID  ) TYPE(*CHAR) LEN(7)
             DCL        VAR(&MSGF   ) TYPE(*CHAR) LEN(10)
             DCL        VAR(&MSGFLIB) TYPE(*CHAR) LEN(10)
             DCL        VAR(&MSGTXT ) TYPE(*CHAR) LEN(200)

             DCL        VAR(&BLANK  ) TYPE(*CHAR) LEN(78)
             DCL        VAR(&INDEX  ) TYPE(*DEC)  LEN(2 0) VALUE(78)

             MONMSG     MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR))

/* ************************************************* */
/*  RECEIVE BREAK MESSAGE                                                         */
/* ************************************************* */

             RCVMSG     MSGQ(&MSGQLIB/&MSGQ)      +
                               MSGKEY(&MSGKEY)                 +
                               RMV(*YES)                              +
                               MSG(&MSGTXT)                       +
                               MSGDTA(&MSGDTA)                +
                               MSGID(&MSGID)                     +
                               MSGF(&MSGF)                        +
                               SNDMSGFLIB(&MSGFLIB)

/* ************************************************* */
/*  RECEIVE BREAK MESSAGE                                                         */
/* ************************************************* */

             IF         COND(&MSGID = ' ') THEN(DO)
             CHGVAR     VAR(&MSGID  ) VALUE('CPF9898')
             CHGVAR     VAR(&MSGFLIB) VALUE('QSYS')
             CHGVAR     VAR(&MSGF   ) VALUE('QCPFMSG')
             CHGVAR     VAR(&MSGDTA ) VALUE(&MSGTXT)
             ENDDO

/* ************************************************* */
/*  AS STATUS MESSAGE TO RESEND                                              */
/* ************************************************* */

 LOOP:       CHGVAR     VAR(&MSGDTA) VALUE(%SST(&BLANK 1 &INDEX) +
                          *CAT &MSGTXT)

             SNDPGMMSG  MSGID(&MSGID)                    +
                                   MSGF(&MSGFLIB/&MSGF)       +
                                   MSGDTA(&MSGDTA)               +
                                   TOPGMQ(*EXT)                      +
                                   MSGTYPE(*STATUS)

             CHGVAR     VAR(&INDEX) VALUE(&INDEX - 2)

             IF         COND(&INDEX *GT 0) THEN(GOTO CMDLBL(LOOP))

             SNDPGMMSG  MSGID(&MSGID)                     +
                                   MSGF(&MSGFLIB/&MSGF)       +
                                   MSGDTA(&MSGTXT)                +
                                   TOPGMQ(*EXT)                      + 
                                   MSGTYPE(*STATUS)

             RETURN

 ERROR:      RCVMSG     MSGDTA(&MSGDTA)            +
                                    MSGID(&MSGID)                  +
                                    MSGF(&MSGF)

             SNDPGMMSG  MSGID(&MSGID)                  +
                                   MSGF(&MSGF)                      +
                                   MSGDTA(&MSGDTA)             +
                                   MSGTYPE(*ESCAPE)
             ENDPGM

 YZG 回复于:2005-03-23 12:25:59
第三步:建立CMD

代码如下:

/* ************************************************************* */
/*        COMMAND - SNDCMSG - SEND COLOR MESSAGE                 */
/*                                                               */
/*   COPYRIHGT (C) 2005 YAO ZHONGGUANG.  ALL RIGHTS RESERVED.    */
/* ************************************************************* */

             CMD        PROMPT('Send Colored Message')

             PARM       KWD(USER)                  +
                        TYPE(*NAME)                +
                        LEN(10)                    +
                        PROMPT('User')

             PARM       KWD(MSG)                   +
                        TYPE(*CHAR)                +
                        LEN(80)                    +
                        PROMPT('Message')

             PARM       KWD(COLOR)                 +
                        TYPE(*CHAR)                +
                        LEN(1)                     +
                        RSTD(*YES)                 +
                        DFT(*WHITE)                +
                        SPCVAL((*GREEN     X'20')  +
                               (*WHITE     X'22')  +
                               (*RED       X'28')  +
                               (*TURQUOISE X'30')  +
                               (*YELLOW    X'32')  +
                               (*PINK      X'38')  +
                               (*BLUE      X'3A')) +
                        PROMPT('Color')

 YZG 回复于:2005-03-23 12:27:06
第四步:建立CMD所执行的CLP

代码如下:

/* ************************************************************* */
/*        CLP - SNDCMSGC - SEND COLOR MESSAGE                    */
/*                                                               */
/*   COPYRIHGT (C) 2005 YAO ZHONGGUANG.  ALL RIGHTS RESERVED.    */
/* ************************************************************* */

             PGM        PARM(&USER &MSG &COLOR)

             DCL        VAR(&USER  ) TYPE(*CHAR) LEN(10)
             DCL        VAR(&MSG   ) TYPE(*CHAR) LEN(80)
             DCL        VAR(&COLOR ) TYPE(*CHAR) LEN( 1)

             DCL        VAR(&MSGF  ) TYPE(*CHAR) LEN(10)
             DCL        VAR(&MSGID ) TYPE(*CHAR) LEN( 7)
             DCL        VAR(&MSGDTA) TYPE(*CHAR) LEN(80)
             DCL        VAR(&MSGTXT) TYPE(*CHAR) LEN(82)

             DCL        VAR(&WHITE ) TYPE(*CHAR) LEN( 1) VALUE(X'22')
             DCL        VAR(&NORMAL) TYPE(*CHAR) LEN( 1) VALUE(X'20')

             MONMSG     MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR))

/* ************************************************************* */
/*                                                               */
/* ************************************************************* */
             CHKOBJ     OBJ(&USER) OBJTYPE(*USRPRF)

             CHGVAR     VAR(&MSGTXT) VALUE(&MSG)

             IF         COND(&COLOR *NE &WHITE) THEN(DO)

             CHGVAR     VAR(&MSGTXT)                              +
                        VALUE(&COLOR *TCAT &MSGTXT)
             ENDDO

             SNDMSG     MSG(&MSGTXT) TOUSR(&USER)

             RETURN

/* ************************************************************* */
/*                                                               */
/* ************************************************************* */
 ERROR:      RCVMSG     MSGDTA(&MSGDTA)            +
                        MSGID(&MSGID)              +
                        MSGF(&MSGF)

             SNDPGMMSG  MSGID(&MSGID)              +
                        MSGF(&MSGF)                +
                        MSGDTA(&MSGDTA)            +
                        MSGTYPE(*ESCAPE)

             ENDPGM


 YZG 回复于:2005-03-23 12:35:08
以下是用户登录成功后的画面.






 qingzhou 回复于:2005-03-23 12:56:41
[quote:c3bb799d6c="xuguopeng"]知道了~ 发个消息还的建MSGF[/quote:c3bb799d6c]

1、ADDLIBLE   LIB_Name

2、WRKMSGF USRMSG

3、12=Work with message description

4、F6=Add 

5、Input :
 ●Message identifier;
 ●First-level message text;
 ●Severity code

 xuguopeng 回复于:2005-03-23 13:11:40
YGZ和QINGZHOU说的都不错

YGZ的CLP不错,但我的要求没那么烦琐拉~  建一个MSGF就搞定了。。。。。

我只是要通过WRKACTJOB的结果校验CPU的使用以及PGM的状态

如果PGM有MSGW时,发出BREAK消息,并写JOBLOG

同时也CHECK QSYSOPR中的*INQ的MSG

我试过用API获得CPU的使用率,但好象返回的结果都不理想,基本都是0

原文转自:http://www.ltesting.net