Java代碼調用RTX發送提醒消息


  公司最近的一個項目有這樣一個需求:就是通過java代碼調用RTX提供的API向RTX發送消息,達到一種及時提醒的效果。

  讓我對RTX有了一定的了解和認識:

  雖然RTX提供的API還比較豐富,但操作的過程中還是會碰到一些大大小小的問題。

      我所碰到的第一個問題就是數字賬號無法發送消息的問題:

 

    public int sendNotice(RtxSendNoticeBean rtxb) {
    int iRet= -1;
    RTXSvrApi RtxsvrapiObj = new RTXSvrApi();   //RTX提供的API

    if( RtxsvrapiObj.Init()){ 
      RtxsvrapiObj.setServerIP(rtxb.getServerip()); //設置RTX服務器IP地址
      RtxsvrapiObj.setServerPort(rtxb.getServerprot()); //設置RTX服務器端口

      String szKey = RtxsvrapiObj.getSessionKey(rtxb.getRecivers());
      System.out.println("SessionKey:" + szKey);
      //API中的消息發送 功能    0:操作成功 非0:操作不成功  
      iRet = RtxsvrapiObj.sendNotify(rtxb.getRecivers(),rtxb.getTitle(),rtxb.getContent(), rtxb.getType(),rtxb.getDelarytime());
    }
    if (iRet == 0){
      System.out.println("發送成功");
    }else{
      System.out.println("發送失敗");
    }
    RtxsvrapiObj.UnInit();
    return iRet;
   }

  使用以上代碼,若RTX是非純數字賬號就沒問題,可以發送。但如果是純數字賬號就沒反應,經多處查找資料得處結果,這是RTX2011之前版本的bug。要想同時操作數字賬號可以用以下兩種方式解決:

  1、直接安裝RTX2011SDK(若此方案可行就不用再做不第二步操作)

    下載文件:RTXS2011SDK(8.0.786.202).exe

   2、如果已安裝2010SDK,又不想使用RTX2011版SDK,就需要做已下修改:

    a. 把RTXSSDK2010安裝目錄下的SDKAPIC.dllSDKAPI.dllSDKAPIJava.dll用RTX2011SDK中的進行覆蓋。

    b. 再把SDKAPIC.dllSDKAPI.dllSDKAPIJava.dll拷貝去覆蓋./windows/system32

    c. 用regsvr32 命令注冊一下SDKAPI.dll文件。

   最后需要在RTX提供的API中添加一行代碼:

 

  /**
  * 發送消息提醒
  * @param receivers String 接收人(多個接收人以逗號分隔)
  * @param title String 消息標題
  * @param msg String 消息內容
  * @param type String 0:普通消息 1:緊急消息
  * @param delayTime String 顯示停留時間(毫秒) 0:為永久停留(用戶關閉時才關閉)
  * @return int 0:操作成功 非0:操作不成功
  */
  public int sendNotify(String receivers,String title,String msg, String type,String delayTime) {

    svrInit(OBJNAME_RTXEXT);

    AddProperty(iProp, KEY_USERNAME, receivers);
    AddProperty(iProp, KEY_TITLE, title);
    AddProperty(iProp, KEY_MSGINFO, msg);
    AddProperty(iProp, KEY_TYPE, type);
    AddProperty(iProp, KEY_MSGID, "0");
    AddProperty(iProp, KEY_ASSISTANTTYPE, "0");
    AddProperty(iProp,KEY_UINTYPE,"Account");     // 如果設置KEY_UINTYPE 為Account,無論傳進去是純數字還是字符串,都認為是帳號。

 

    if(!"0".equals(delayTime))
      AddProperty(iProp, KEY_DELAYTIME, delayTime);

 

    iResult = Call(iObj, iProp, PRO_EXT_NOTIFY);
    innerCode = GetResultInnerCode(iResult);

    release();
    return innerCode;
  }

     這樣改好這后,大功告成!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM