zoukankan      html  css  js  c++  java
  • AX向在线用户发送消息

    在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     catch
    13     {
    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 method
    3 */
    4 void startupPost()
    5 {
    6     this.setTimeOut(methodstr(Info,readMessage), 3000, false);
    7 }

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

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

  • 相关阅读:
    浅谈JavaScript中this指向的⼏种情况
    JavaScript、html简单的级联操作。
    异常处理中throws和throw的区别?
    java异常处理try-catch-finally的执行过程?
    什么是内连接、外连接、交叉连接(笛卡尔积)?
    主键和外键的区别
    集合和数组的比较(为什么要引入集合)?
    Java中对比单继承与多继承的优劣,以及java的解决方案
    数据库
    数据库集中控制的优势
  • 原文地址:https://www.cnblogs.com/rumenren/p/3082436.html
Copyright © 2011-2022 走看看