LyncSDKで特定のコンタクト状態を取得する

(LyncSDK get contact state)
先日から使い始めたLyncSDKほとんど、使い込んでないですが、とりあえずやりたかったコンタクトの状態取得が出来ました。

思ったよりSDKのI/Fがわかりやすく調べなくてもメンバ情報をみてればわかるレベルになっています。

実装

LyncClient client = LyncClient.GetClient();
Contact contact = client.ContactManager.GetContactByUri("ninomiya@sample.com");

IDictionary<ContactInformationType, object> info = contact.GetContactInformation(
  new ContactInformationType[]
      {
        //表示名
        ContactInformationType.DisplayName,
        //状態
        ContactInformationType.Activity,
        //コメント(ノート)
        ContactInformationType.DefaultNote,
        //メールアドレス
        ContactInformationType.PrimaryEmailAddress,
        //離席時間
        ContactInformationType.IdleStartTime,
      });

//コンタクトの状態変更イベントを登録
contact.ContactInformationChanged += (sender, arg) =>
{
  //コンタクトの状態が変わった場合に呼ばれるイベント
  //senderには、変更のあったコンタクト(Microsoft.Lync.Model.Contact)が入っています
};

GetContactInformationの関数に取得を行いたい項目を渡してその結果が返ってきます。
戻りは、Dictionaryですが取得できなかった項目はキーに含まれなので、Dictionaryから取得時にキーが含まれているかの確認は必要です。

f:id:orzmakoto:20150616181152p:plain
※↑のスクショでは、IdleStartTimeが結果に含まれていません。

ContactInformationTypeMSDNに一覧があります。

ContactInformationType Enumeration (Microsoft.Lync.Model)

定数名 翻訳
Availability 連絡先のアベイラビリティ。連絡先情報項目の値型はAvailabilityType列挙です。
ActivityId 現在の連絡先の活動を説明するトークン。連絡先情報項目の値の型はStringです。
LocationName 連絡先の場所の名前。連絡先情報項目の値の型はStringです。
TimeZone タイムゾーン。連絡先情報項目の値の型はStringです。
TimeZoneBias タイムゾーンバイアス。連絡先の情報項目の値の型はint32です。
MeetingSubject 対象の会議。連絡先情報項目の値の型はStringです。
MeetingLocation 場所を満たします。連絡先情報項目の値の型はStringです。
Activity (たとえば、電話機の、会議中、または使用可能な)連絡先の現在の活動。連絡先情報項目の値の型はStringです。
CustomActivity カスタマイズされたアクティビティの文字列。連絡先情報項目の値の型はStringです。
IdleStartTime 接触がアイドルになった時。連絡先の情報項目の値の型はDateTime型です。 DateTime値は、UTC値として返されます。あなたはDateTime.ToLocalTime()を呼び出すことによって、ローカル時間に変換する必要があります。
DisplayName 連絡先の表示名。連絡先情報項目の値の型はStringです。
InstantMessageAddresses 連絡先のインスタント·メッセージング·アドレスの集合。連絡先の情報項目の値の型は文字列の配列です。
PrimaryEmailAddress プライマリ電子メールアドレス。連絡先情報項目の値の型はStringです。
EmailAddresses 連絡先の電子メールアドレスの収集は、最初の要素は、プライマリ電子メールアドレスです。連絡先の情報項目の値の型は文字列の配列です。
Title 連絡先のタイトル。連絡先情報項目の値の型はStringです。
Company 連絡先の会社。連絡先情報項目の値の型はStringです。
Department 連絡先の部署。連絡先情報項目の値の型はStringです。
Office 連絡先のオフィスの場所。連絡先情報項目の値の型はStringです。
HomePageUrl 連絡先のホームページのURL
Photo 連絡先の写真。情報項目の値の型がStreamオブジェクトで連絡してください。
DefaultNote 他のノートが設定されていない場合は表示されるデフォルトのノート、。連絡先情報項目の値の型はStringです。
DefaultNoteType デフォルトのノート型(例えば、個人的または不在)。連絡先の情報項目の値型はDefaultNoteTypeの列挙です。
PersonalNote 個人的なメモ。連絡先情報項目の値の型はStringです。
OutOfficeNote 不在時のメモ。連絡先情報項目の値の型はStringです。
SourceNetwork 連絡先ソースネットワーク。連絡先情報項目の値型はSourceNetworkType列挙です。
IconUrl フェデレーテッド·公衆網からのコンタクトに関連付けられたアイコンのURL。連絡先情報項目の値の型はStringです。
IconStream フェデレーテッド·公衆網からのコンタクトに関連付けられているアイコン。情報項目の値の型がStreamオブジェクトで連絡してください。
ContactEndpoints 連絡先のコラボレーションエンドポイント(SIPまたはTELエンドポイント)の集まり。連絡先情報項目の値型はCollaborationEndpointオブジェクトの配列です。
CurrentCalendarState 連絡先の現在のカレンダーの状態(例えば、無料、忙しい、またはオフィスの外)。連絡先の情報項目の値型はContactCalendarState列挙です
NextCalendarState 連絡先の隣のカレンダー(例えば、無料、忙しい、またはオフィスの外)状態。連絡先の情報項目の値型はContactCalendarState列挙です
NextCalendarStateStartTime 次のカレンダーの状態の時間を開始します。連絡先情報の項目値の型は、DateTimeオブジェクトです。 DateTime値は、UTC値として返されます。あなたはDateTime.ToLocalTime()を呼び出すことによって、ローカル時間に変換する必要があります。
Reserved1 将来の使用のために予約されています。
CapabilityString 現在の連絡先機能。 (例えば、唯一の音声のみ、またはIM)。連絡先情報項目の値の型はStringです。
Capabilities 接触力の組合せ。連絡先情報項目の値型はContactCapabilitiesの列挙です。
ContactType 連絡先のタイプ。連絡先の情報項目の値型はContactPresentityTypeの列挙です。
Description 連絡先の説明。連絡先情報の項目値の型はStringです。
Reserved2 将来の使用のために予約されています。
FirstName 連絡先の名前。連絡先情報項目の値の型はStringです。
LastName 連絡先の姓。連絡先情報項目の値の型はStringです。
Reserved3 将来の使用のために予約されています。
Reserved4 将来の使用のために予約されています。
Reserved5 将来の使用のために予約されています。
Reserved6 将来の使用のために予約されています。
Reserved7 将来の使用のために予約されています。

(∩´∀`)∩ワーイ

特定のコンタクト情報ではなく、自分がお気に入り登録している一覧の取得なども次にやってみよう。

とりあえず目的は達成