消息管理
(创建时间:2009年08月11日 01:31:00)
Jangogo : 
1. 消息的分类
      分三类: 
     A。  系统(软件)的升级消息或者官方公告
     B。 本帐套内的系统产生的工作流信息,如:某些单据或者款项要求审批的信息
     C。 日历备忘,是企业级别的和帐套无关,和用户ID有关,即只对同一个用户ID以及该用户的子用户有效。本类信息适用于集团版中的SQLServer数据库模式中即 ServiceMode=1 and DBType="SQLSERVER"

2. 接口页面
     A类    ---    用Ajax 指向页面 sys/svr2svr.asp实现, id 为空或者为0则为最新的一条,id为>开头 表示下一条(如id=>10), id 为<开头表示上一条, id为数字表示具体id的某一条
 
  1. var xmlhttp;   
  2.       
  3. var xmlhttp;   
  4.   function post(P,flag){   
  5.     if(!xmlhttp){   
  6.     xmlhttp=Ajax.getHttp();   
  7.      }else{   
  8.     try{ xmlhttp.abort();}catch(ex){}   
  9.      }   
  10.       xmlhttp.open("POST","sys/svr2svr.asp",true); // 异步   
  11.         xmlhttp.onreadystatechange=function(){   
  12.             if(xmlhttp.readyState==4){   
  13.                  if(flag=="get"){   
  14.                                                       //根据flag 进行你要的操作   
  15.                                                    }   
  16.             }   
  17.         };   
  18.         xmlhttp.setRequestHeader("CONTENT-TYPE","application/x-www-form-urlencoded");   
  19.         xmlhttp.send(P);   
  20.      
  21.   }   
  22. //调用   
  23. s="a=getmsgsys&id=" + String(mid).UrlEncode();   
  24. post(s,'msgsys');  
     调试时 访问:apps/SaaSxServ/laputa_xgetmsgsys.asp 可以获得 XML的结构

     B类   ---    如果ServiceMode=0 通过SC代码实现, 如果ServiceMode=1, 通过 Ajax 指向页面 sys/getmsgacc.asp 实现
              注意这个类型的消息实现的特殊性:SC代码需要在  sys/getmsgacc.asp 重现一次的。
              这样做的目的是为了不让 软件在处理消息的过程中死锁,所以ServiceMode=1时采用ajax 方式以给集团版用户更好的体验。
              在ServiceMode=0时,系统如果用定时器刷新消息的过程中都容易导致页面出现暂短的停顿。

     C类   ---   用Ajax 指向页面 sys/getmsguser.asp 实现
              参数有两种:
              1. getmsguser.asp?d1=...&d2=....  这种情况下,会返回d1(日期)和d2(日期)之间有消息的日期列表
               2.getmsguser.asp?d= 这种情况下,会返回某一天(d) 之前MOK字段为0 的所有记录明细       

    用AJAX异步处理是为了避免用户窗口因为意外卡死

3.数据库接口
   
   A类  在4Fang 的后台中央数据库 增加一个 Msg_Sys 表
 
  1. CREATE TABLE [Msg_Sys](   
  2.       [ID]     integer identity(1,1) not null CONSTRAINT [PK_Msg_Sys_ID] PRIMARY KEY,   
  3.       [MUser] varchar(50) not NULL,   --消息发布人   
  4.       [MTime]  datetime NULL,   --消息发布时间   
  5.       [Msg] text null,    ---消息内容 支持HTML   
  6.       [MFlag]  INTEGER null  ---标识或者分类   
  7. );  


   B类 为本帐套添加一个 Msg 表,表的创建SQL文件放在sqlscript文件夹的对应数据库目录里面。可以采用和功能模块第一次进入时候的创建模式进行创建表操作。
表结构和C类的消息表结构基本一致(除了表的名字不同)
  
   C类  如果ServiceMode=1 ,在系统数据库增加一个 Msg_User 的表(该表会在用户第一次访问sys/getmsguser.asp时创建)
 
  1. CREATE TABLE [Msg_User](      
  2.    [ID]     integer identity(1,1) not null CONSTRAINT [PK_Msg_User_ID] PRIMARY KEY,      
  3.    [MUser] varchar(50) not NULL,   --消息执行人      
  4.    [MTime]  datetime NULL,   --消息执行时间      
  5.    [Msg] text null,    ---消息内容 支持HTML      
  6.    [CUser] varchar(50) not NULL,   --消息发布人(来源)      
  7.    [CTime]  datetime NULL,   --消息发布时间   
  8.    [MOK]  INTEGER null default 0,  ---是否已经完成的标志   
  9.    [T1]  datetime NULL,   --时间1,备用   
  10.    [T2]  datetime NULL,   --时间1,备用   
  11.    [T3]  datetime NULL,   --时间1,备用   
  12.    [S1] varchar(50) not NULL,   --字符串,备用1      
  13.    [S2] varchar(50) not NULL,   --字符串,备用2   
  14.    [S3] varchar(50) not NULL,   --字符串,备用3   
  15.    [I1]  INTEGER null,  ---整形,备用1      
  16.    [I2]  INTEGER null,  ---整形,备用2   
  17.    [I3]  INTEGER null,  ---整形,备用3   
  18.    [MFlag]  INTEGER null  ---标识或者分类      
  19. );    

 新增一条消息(C类)时候需要取得所有该用户的列表:
 
  1. //用 XMLHttp post 方法   
  2.       var saUID=Const.userid.split(".")[0];   
  3.       poStr="a=getsubuserlist";    
  4.       poStr+="&txtuserid=" + saUID.UrlEncode();   
  5.       post(poStr,"get");   
  6.   
          相当于指向页面:apps/SaaSxServ/laputa_xgetsubuserlist.asp ,注意返回的数据的XML内容格式
文档中心