ActiveXObject を使用して、lync ステータスの変更を処理し、以下の JavaScript を介してプレゼンスを表示しています
var Instant = {
sipUri: "name@address.com", // Change this to the user's SIP URI you want to chat with
nameCtl: new ActiveXObject('Name.NameCtrl.1'),
onStatusChange: function (name, status, id) {
alert(name + " " + status + " " +id);
},
showOOUI: function () {
var oouiX = 0, oouiY = 0;
oouiX += pawn_icon.offsetLeft + pawn_icon.clientLeft - pawn_icon.scrollLeft;
oouiY += pawn_icon.offsetTop + pawn_icon.clientTop - pawn_icon.scrollTop;
Instant.nameCtl.ShowOOUI(Instant.sipUri, 0, oouiX, oouiY);
},
hideOOUI: function () {
Instant.nameCtl.HideOOUI();
}
}
そして、実際にイベント ハンドラーをイベントに登録するためのこの html/javascript:
<head>
<title>Lync Presence Test</title>
<!-- le JS -->
<script type="text/javascript">
if (Instant.nameCtl.PresenceEnabled) {
Instant.nameCtl.OnStatusChange = Instant.onStatusChange;
Instant.nameCtl.GetStatus(Instant.sipUri, "1");
}
</script>
</head>
<body>
<div id="presence" onmouseover="Instant.showOOUI()" onmouseout="Instant.hideOOUI()">Name<img id="pawn" name="pawn_icon" src="Styles/images/LyncStatus/imnon.png" alt="Available"> </div>
</body>
</html>
タイトルが示すように、ページをロードすると、イベントが発生し、期待どおりのステータス コードが返されます。ただし、ステータスを変更すると、2 つのイベントが発生します。1 番目には正しいステータス コードが含まれ、2 番目には古いステータス コードが含まれます。ここでの問題は、新しいステータスに変更したいということですが、古いステータスは最後に発生するイベントであるため、新しい変更が上書きされます。人の名前の上にマウスを置くと、イベントも 6 回発生します。
Microsoft の Name.NameCtrl オブジェクトのドキュメントはかなりまばらですが、getstatus メソッドと onstatuschange プロパティを理解しているので、まさに私が探しているものです。
では、statuschange イベントが 2 回発生する理由はありますか?また、これを先取りするか、返されるイベントの順序を切り替える方法はありますか? また、ステータスの変更が発生していないのに、名前にマウスを合わせるとイベントが発生するのはなぜですか? 特定のステータス変更イベントについて詳しく知りたいのですが、何も見つかりません。また、Lync サーバーにアクセスできないため、クライアント側のセットアップを行う必要があります。
Name.NameCtrl ドキュメント: http://msdn.microsoft.com/en-us/library/bb802706(v=office.14).aspx
プレゼンス機能のコードを入手した場所: http://blog.instant-tech.com/2012/05/web-client-for-microsoft-lync-2010.html