公司最近的一個項目有這樣一個需求:就是通過java代碼調(diào)用RTX提供的API向RTX發(fā)送消息,達到一種及時提醒的效果。
讓我對RTX有了一定的了解和認識:
雖然RTX提供的API還比較豐富,但操作的過程中還是會碰到一些大大小小的問題。
我所碰到的第一個問題就是數(shù)字賬號無法發(fā)送消息的問題:
public int sendNotice(RtxSendNoticeBean rtxb) {
int iRet= -1;
RTXSvrApi RtxsvrapiObj = new RTXSvrApi(); //RTX提供的API
if( RtxsvrapiObj.Init()){
RtxsvrapiObj.setServerIP(rtxb.getServerip()); //設(shè)置RTX服務(wù)器IP地址
RtxsvrapiObj.setServerPort(rtxb.getServerprot()); //設(shè)置RTX服務(wù)器端口
String szKey = RtxsvrapiObj.getSessionKey(rtxb.getRecivers());
System.out.println("SessionKey:" + szKey);
//API中的消息發(fā)送 功能 0:操作成功 非0:操作不成功
iRet = RtxsvrapiObj.sendNotify(rtxb.getRecivers(),rtxb.getTitle(),rtxb.getContent(), rtxb.getType(),rtxb.getDelarytime());
}
if (iRet == 0){
System.out.println("發(fā)送成功");
}else{
System.out.println("發(fā)送失敗");
}
RtxsvrapiObj.UnInit();
return iRet;
}
使用以上代碼,若RTX是非純數(shù)字賬號就沒問題,可以發(fā)送。但如果是純數(shù)字賬號就沒反應(yīng),經(jīng)多處查找資料得處結(jié)果,這是RTX2011之前版本的bug。要想同時操作數(shù)字賬號可以用以下兩種方式解決:
1、直接安裝RTX2011版SDK(若此方案可行就不用再做不第二步操作)。
下載文件:RTXS2011SDK(8.0.786.202).exe
2、如果已安裝2010版SDK,又不想使用RTX2011版SDK,就需要做已下修改:
a. 把RTXSSDK2010安裝目錄下的SDKAPIC.dll、SDKAPI.dll、SDKAPIJava.dll用RTX2011SDK中的進行覆蓋。
b. 再把SDKAPIC.dll、SDKAPI.dll、SDKAPIJava.dll拷貝去覆蓋./windows/system32
c. 用regsvr32 命令注冊一下SDKAPI.dll文件。
最后需要在RTX提供的API中添加一行代碼:
/**
* 發(fā)送消息提醒
* @param receivers String 接收人(多個接收人以逗號分隔)
* @param title String 消息標題
* @param msg String 消息內(nèi)容
* @param type String 0:普通消息 1:緊急消息
* @param delayTime String 顯示停留時間(毫秒) 0:為永久停留(用戶關(guān)閉時才關(guān)閉)
* @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"); // 如果設(shè)置KEY_UINTYPE 為Account,無論傳進去是純數(shù)字還是字符串,都認為是帳號。
if(!"0".equals(delayTime))
AddProperty(iProp, KEY_DELAYTIME, delayTime);
iResult = Call(iObj, iProp, PRO_EXT_NOTIFY);
innerCode = GetResultInnerCode(iResult);
release();
return innerCode;
}
這樣改好這后,大功告成!