博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AX向在线用户发送消息
阅读量:4677 次
发布时间:2019-06-09

本文共 1694 字,大约阅读时间需要 5 分钟。

在AX3.0中管理员可以通过在线用户管理对在线用户进行发送信息,是通过ClientSessions::sendMessage(int _sessionId, str _title, str _message)来发送,但在AX4.0之后的版本中就没有这个方法了。

现在可以使用的也就只有下面两种方法了

1、修改预警的功能,将消息通过预警功能传递

2、如果是远程终端的话,直接在远程服务器的任务管理器发送

但也一些问题:

1、通过预警功能,用户端只是显示有预警消息,并没有直接一个BOX弹出,经常被用户忽略

2、远程服务器任务管理器发送,如果不是使用远程桌面终端登录的就无法接收消息

那还没有没有其他方法呢?

今天翻一下Class/info,看到了一个方法watchDog(),就是在AX启动登录后,运行并按一定时间间隔不断循环这个方法。

1 void watchDog() 2 { 3     int infologLine; 4     this.setTimeOut(methodstr(Info,watchDog), #watchdogInterval, false); 5  6     infologLine = this.line(); 7     try 8     { 9         SysUserLog::updateLogoutTime();10         SysUtilElementsLog::persistRegisteredUsages();11     }12     catch13     {14         //15         // Clean up any exception messages in the infolog, caused by logging.16         //17         this.clear(infologLine);18     }19 }

看到这个,问题就解决了,我也写个这样的方法readMessage(),然后添加张表SysUserMessage,字段UserId,消息字段Message,是否已读字段IsRead,将要发送的消息根据UserId保存到表中,最后在readMessage()中读取弹出一个BOX

1 void readMessage() 2 { 3     SysUserMessage      userMessage=SysUserMessage::findUserId(curuserid(),true); 4     ; 5     this.setTimeOut(methodstr(Info,readMessage), 3000, false); 6     if(userMessage && !userMessage.IsRead) 7     {   ttsbegin; 8         userMessage.IsRead=true; 9         userMessage.update();10         ttscommit;11         Box::info(userMessage.Message);12     }13 }

我默认设置的循环间隔是3秒,读取到消息后,更新消息已读取,用Box强制弹出。

这个方法的调用就放在startupPost()中

1 /*2 No SYS code must exist in this method3 */4 void startupPost()5 {6     this.setTimeOut(methodstr(Info,readMessage), 3000, false);7 }

最后来看看效果,简单做了个发送界面,将要发送的消息根据UserId保存到表SysUserMessage中就可以了

简简单单就实现了发送在线消息的功能

 

 

转载于:https://www.cnblogs.com/rumenren/archive/2013/05/16/3082436.html

你可能感兴趣的文章
Servlet监听器统计在线人数
查看>>
第2章 数字之魅——寻找发帖“水王”
查看>>
eclipse jsp html 格式化 format
查看>>
关于手机端IOS系统微信中虚拟键盘遮挡input输入框问题的解决方案 草稿
查看>>
css3背景、边框、和补丁相关属性 (二)
查看>>
Python--小功能应用
查看>>
别做操之过急的”无效将军”,做实实在在的”日拱一卒”
查看>>
js去除范围内所有标签并显示指定字符串
查看>>
结对项目进度2
查看>>
git + git flow 的简单介绍
查看>>
如果我们想要交换两个数字,就可以使用位运算
查看>>
求给出第 K个 N位二进制数,该二进制数不得有相邻的“1”
查看>>
P1059 明明的随机数【去重排序】
查看>>
HDU 1060 Leftmost Digit【log10/求N^N的最高位数字是多少】
查看>>
tomcat配置文件web.xml与server.xml解析--重要
查看>>
【C语言】《C Primer Plus》递归:以二进制形式输出整数
查看>>
使用框架的——好处
查看>>
如此大量的代码,但每个类里面的代码却不显得特别多,原因。。。。。。。。。。。。...
查看>>
C#特征备忘
查看>>
Java 面向对象 之 final 关键字
查看>>