Lync 環境構築と Lync 2010 コントロールを使用した開発

環境 : Lync Server 2010, Lync 2010, Visual Studio 2010, Silverlight 4 開発者向けランタイム, Silverlight 4 Tools for Visual Studio 2010, Expression, Blend 4, Lync 2010 SDK

Lync 2010 クライアント開発入門

こんにちは。

今回は、まず最初に、Silverlight を使用したアプリケーションを例に、Lync 2010 SDK で提供されているコントロールを使用した簡単な開発手法を見ていきましょう。

開発前の準備 (環境構築)

まず環境設定についてですが、上記 (「環境」の項) に記載している通り、必要な環境をインストール / セットアップしておきましょう。(サーバーのインストールが面倒な方は、ここでの開発は、すべて Lync Online を使用しても OK です。この際、Silverlight 4 Tools for Visual Studio 2010 も必要ですので注意してください。)

==========

[補足] Lync Server 2010 のインストールについて

※ Lync Server 2010 のインストールでは、下記のインストール ガイドに記載されている順番に従って、DNS レコードの設定など、忠実に設定作業をおこなってください。(私もはまりました。。。)

http://download.microsoft.com/download/3/5/4/35425511-BA4A-4955-B35D-526A45713E51/Lync%20Server%202010%20RC%20Step-by-Step%20Installation%20Guide.pdf

なお、Lync Server 2010 と SharePoint 2010 を同一マシンにインストールすることもできますが、ポートがぶつからないよう、あらかじめ、SharePoint のポート番号を変更する (SharePoint サーバー全体管理画面を使用した IIS Web サイトの削除と拡張) などしてからインストールをおこなってください。

※ 期限切れ (expired) や、ドメインへの再接続などで、Lync Server の証明書 (Certificate) の問題が発生した場合、Lync Server Front-End service などのサービスが停止します (サービスは起動しません)。この場合、Lync Server 管理者のアカウントで、再度、上記のインストール ガイドに記載されている Lync Server Deployment Wizard を起動し、[Request, Install or Assign Certificates] を実行してください。(この際、[Certification Authority Account] には、Lync Server 管理者のユーザー / パスワードを設定します。なお、この実行によって、内部で、Request-CsCertificate、Set-CsCertificate の Windows PowerShell コマンドが実行されます。)

完了したら、Lync Server Deployment Wizard の [Start Services] の [Run] ボタンを押すと、再度、これらのサービスが起動します。(マシンの再起動時は、毎回、自動開始されます。)

なお、割り当てられた証明書が無効 (not valid) というエラーが表示される場合は、証明書チェーンが信頼されていない可能性があるので、以下の手順で、証明書チェーンを手動でインポートしてみてください。

1. Lync Server 上から、ブラウザーで https://証明機関のサーバー/certsrv を表示し、表示される画面で [CA 証明書、証明書チェーン、または CRL のダウンロード]、[CA 証明書チェーンのダウンロード] をクリックして、証明書チェーンをダウンロードします。(あらかじめ、サーバーの [Active Directory 証明書サービス] の役割サービスとして [証明機関 Web 登録] をインストールしておいてください。)

2. ローカル コンピューターの証明書管理画面を開き、[信頼されたルート証明機関] に、このダウンロードした証明書チェーンをインポートしてください。 (注意 : 「カレント ユーザー」の証明書管理ではありません ! mmc で、ローカル コンピューターの証明書管理画面を開きます。)

※ Lync Server に Windows Server 2008 R2 SP1 を適用した場合は、Lync Server の更新プログラム (KB) も適用してください。(Windows Update の自動更新を有効にしている場合は、自動的に更新されます。)

※ 発生しているエラーの内容は、イベント ビューアー (eventvwr) で確認できます。また、Lync クライアント側のエラーについては、[Tools] – [Options] で表示される画面で、[General] タブの [Logging] を設定することで、ログがユーザー フォルダーに出力されます。

※ UCMA サーバーの環境構築については、こちら を参照してください。

==========

ここで、開発をおこなう前の準備として 1 つ注意すべき点があります。

MSDN の こちら のドキュメントにも記載されていますが、ここで使用する Lync コントロールを使用した Silverlight アプリケーションでは、使用するサイトを「信頼済みサイト」(trusted site) に入れておく必要があります。特に、デバッグの際、既定では http://localhost が使用されると思いますので、開発時は、このサイトも信頼済みサイトに設定しておきましょう。

注意  : Lync 2013 を使用している場合
Lync 2013 で Lync SDK を使用する場合は、trusted site への登録ではなく、独自の Registry Key (HKEY_CURRENT_USERSoftwareMicrosoftOfficeLyncSecurityTrusted Sites<domain>) を作成して、下図の通り、http と https の DWORD 値を設定してください。(下図は http による接続を許可する場合のサンプルです。)

注意 : なお、できるだけ、Default.aspx、Default.htm のようなデフォルト ページでは Lync SDK は使用しないようにしてください。(現在、バグがあり、ページの名前を省略している URL では、”Client is not trusted” の例外が発生する可能性があります。)

注意 : この設定を利用者 (ユーザー) に誘導する方法については、今後、この連載で記載します。

Lync コントロールを使った開発

Lync SDK をインストールすると、Visual Studio 2010 に [Lync Silverlight Application] というプロジェクト テンプレートが含まれますので、このプロジェクト テンプレートを使用すると、必要な設定 (アセンブリ参照の追加、など) がおこなわれたプロジェクトを簡単に新規作成できます。しかし、今回は、あえて、動作を理解してもらう目的で、1 からプロジェクトを構築してみましょう。

まず、Visual Studio を起動して、[Silverlight アプリケーション] を新規作成します。(対象の .NET Framework は、バージョン 4 を指定してください。)
Lync では、Silverlight 4 以上を使用しますので、作成時の [Silverlight のバージョン] として [Silverlight 4] を選択します。

プロジェクトが作成されたら、アセンブリの参照追加で、以下の dll を追加します。(これらは、コンパイルすると、.xap の中に入ります。)

Microsoft.Lync.Controls.dll

Microsoft.Lync.Controls.Framework.dll

Microsoft.Lync.Model.dll

Microsoft.Lync.Utilities.dll

MainPage.xaml を開いてツールボックスを見ると、下図の通り、Lync 用のコントロールが多数登録されていますので、今回は、プレゼンス情報を表示する PresenceIndicator コントロールを使用してみましょう。

PresenceIndicator コントロールは、Lync クライアントで言うと、下図の赤枠の部分に相当します。(このコントロールにマウスをホバーすると、下図のように、操作の一覧が表示されます。)

今回は、この Lync クライアント (上図) と同じように、このコントロール (上図の赤枠) の横に、その SIP ユーザーの名前と、Free / Busy などの状態情報を TextBlock コントロールで表示してみましょう。

まず、これらコントロールを横に並べるため、MainPage.xaml に StackPanel をツールボックスからドラッグ アンド ドロップしましょう。
この StackPanel の中でコントロールを横に並べるため、下図の通り、Orientation プロパティを [Horizontal] に変更します。(センタリングなど、その他のプロパティも、デザインにあわせて適宜変更しておきましょう。)

この StackPanel の中に、PresenceIndicator コントロールと、2 つの TextBlock コントロールをドラッグ アンド ドロップします。

PresenceIndicator コントロールですが、既定では写真を表示しない設定となっているため、PhotoDisplayMode プロパティを [Large] に変更して、写真を大きく表示するようにします。(下図)

PrecenceIndicator コントロールで最も重要なプロパティが、Source プロパティです。
PrecenceIndicator に所定のユーザーのプレゼンスを表示させるため、今回は、この Source プロパティに「demouser1@example.jp」 (あらかじめ用意した「デモ 太郎」というユーザーの SIP の Id) を設定します。

XAML を確認すると、下記の通り設定されているはずです。

. . .

<Grid x:Name="LayoutRoot" Background="White">
  <StackPanel Height="45" HorizontalAlignment="Left" Margin="114,91,0,0" Name="stackPanel1" VerticalAlignment="Top" Width="200" Orientation="Horizontal">
    <controls:PresenceIndicator
      Name="presenceIndicator1"
      PhotoDisplayMode="Large"
      Source="demouser1@example.jp" />
    . . .

つぎに、2 つの TextBlock に、この SIP ユーザーの名前と、Free / Busy の状態情報を表示します。これらの情報は、PrecenceIndicator のプロパティから取得できます。

まず、1 つ目の TextBlock の Text プロパティを表示して、下図の通り、[データ バインドの適用] を選択します。

表示される画面で、「PrecenceIndicator1」 (上記で挿入した PrecenceIndicator コントロール) のソースを選択して、パスとして DisplayName プロパティを選択します。(下図)

<ソースの選択>

<パスの選択>

同様に、2 つ目の TextBlock の Text プロパティについても、[ElementName] – [PrecenceIndicator1] のソースの [ActivityStatus] をデータバインドします。
最終的に作成された XAML は、下記の通りになります。

. . .

<StackPanel Height="45" HorizontalAlignment="Left" Margin="114,91,0,0" Name="stackPanel1" VerticalAlignment="Top" Width="200" Orientation="Horizontal">
  <controls:PresenceIndicator
    Name="presenceIndicator1"
    PhotoDisplayMode="Large"
    Source="demouser1@example.jp" />
  <TextBlock
    Height="23"
    Name="textBlock1"
    Text="{Binding ElementName=presenceIndicator1, Path=DisplayName}" />
  <TextBlock
    Height="23"
    Name="textBlock2"
    Text="{Binding ElementName=presenceIndicator1, Path=ActivityStatus}" />
</StackPanel>
. . .

以上で完成です。
F5 でデバッグ実行をおこなうと、下図の通り表示されます。(上述したように、信頼済みサイトの設定をおこなってから、デバッグ実行してください。) イメージの上にマウス カーソルを持っていくと、Lync クライアントと同様の処理が可能です。

なお、Lync SDK のクライアント コントロールは、内部で、Lync のクライアントを使用しています。
このため、Lync クライアントが入っていない場合や、Lync クライアントが実行されていない場合、実行結果は「Unknown Contact」になるので注意してください。(Lync クライアントをインストールするとログイン時に毎回 起動されますが、画面を Exit してしまうと、上記は正しく表示されません。)

スタイルとテンプレートのカスタマイズ (re-templating)

Lync コントロールでは、既定のスタイルとテンプレートのカスタマイズもサポートしています。
今回は、MSDN の こちら に記載されている手順に従って、上記の PrecenceIndicator コントロール上のイメージにエフェクト (効果) を付けてみましょう。

Silverlight をご存じの方には説明不要かと思いますが、概念を簡単に説明すると、リソース ディクショナリの XAML ファイルを作成して、ここに、カスタマイズされた PrecenceIndicator コントロールのコントロール テンプレートを定義します。そして、上記の PrecenceIndicator で、そのカスタマイズされた PrecenceIndicator コントロールを使用するように指定すれば OK です。
なお、XAML をそのまま編集しても可能ですが、下記の通り、膨大な XAML コードを出力しますので、今回は、Expression Blend を使用してカスタマイズしてみましょう。

まずは、上記のプロジェクト (.sln) を Expression Blend で開きます。
Silverlight のプロジェクトをマウスで右クリックして [新しいアイテムの追加] を選択し、[リソース ディクショナリ] を選択してリソース ディクショナリをプロジェクトに追加します。(今回は、ResourceDictionary1.xaml とします)

上記で PrecenceIndicator コントロールを配置した MainPage.xaml を (デザイン ビューで) 表示して、挿入した PrecenceIndicator コントロール (precenceIndicator1) をマウスで右クリックして、[テンプレートの編集] – [コピーして編集] メニューを選択します。
表示される下図の画面で、コントロール テンプレートの作成先として、ResourceDictionary1.xaml を選択します。

上記の設定によって、ResourceDictionary1.xaml に、PrecenceIndicator コントロールを再定義した膨大なコントロール テンプレートのコードが「PresenceIndicatorStyle1」という名前で定義されます。
また、MainPage.xaml では、下記 (太字) の通り、この PresenceIndicatorStyle1 を参照するように設定されます。

. . .
<StackPanel . . .>
  <controls:PresenceIndicator
        Name="presenceIndicator1"
        PhotoDisplayMode="Large"
        Source="demouser1@example.jp" Style="{StaticResource PresenceIndicatorStyle1}" />
  . . .

では、ResourceDictionary1.xaml (リソース ディクショナリ) を開き、PresenceIndicatorStyle1 を下記の太字の通り変更してみましょう。今回は、MSDN のドキュメントに記載されているサンプル同様、イメージ部分に、BlurEffect を設定します。

. . .

<Grid x:Name="PART_Grid">
  <Grid.Resources>
    <BlurEffect x:Key="CustomEffect1"/>
  </Grid.Resources>
  <Viewbox x:Name="PART_Viewbox" Stretch="None">
    <Grid Background="Transparent" DataContext="{TemplateBinding Model}" Visibility="Visible">
      <Grid x:Name="PhotoGrid" AutomationProperties.AutomationId="PhotoSmall" Height="36" Margin="9,0,0,0" . . .>
        <Image x:Name="PART_PhotoImageSmall" Effect="{StaticResource CustomEffect1}" HorizontalAlignment="Center" . . ./>
        . . .

プロジェクトをビルドしてデバッグ実行をおこなうと、下図の通り表示されます。

既定のスタイルとテンプレートのカスタマイズ方法の詳細については、下記のドキュメントが参考になりますので、是非参照してみてください。

MSDN : Customizing Lync Controls

http://msdn.microsoft.com/en-us/library/gg436879.aspx

デバッグとエラーの検出について (補足)

今回は、コントロールを使用した簡単な例をご紹介しましたが、プログラム コードは使っていないため (プログラム コードを使ったカスタマイズについては、次回、説明します)、コントロールの初期化時などで例外が発生した場合には、原因の特定が難しくなります。
そこで、こうした例外をトラップしたい場合には、XAML に以下の通り定義をおこない、エラー内容を出力させておくと良いでしょう。

<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
    <TextBlock HorizontalAlignment="Right" Text="Initialization Failed:" />
    <TextBox Text="{Binding InitializationFailed, ElementName=presenceIndicator1, Mode=OneWay}" />
    <TextBlock HorizontalAlignment="Right" Text="Initialization Error:" />
    <TextBox Text="{Binding InitializationError, ElementName=presenceIndicator1, Mode=OneWay}" />
    <TextBlock HorizontalAlignment="Right" Text="Initialization Error Message:" />
    <TextBox Text="{Binding InitializationErrorMessage.Message, ElementName=presenceIndicator1, Mode=OneWay}" />
    <controls:PresenceIndicator 
      Name="presenceIndicator1"
      PhotoDisplayMode="Large"
      Source="demouser1@example.jp" />
    . . .

 

ここでは Silverlight を例に Lync Control の使用方法を見ましたが、WPF アプリケーションなど、カスタムのデスクトップ アプリケーションでもこうした開発をおこなうことができます。Lync では、Microsoft Word からのドキュメント ウィンドウ共有の実行や、段落ロック (SharePoint 上で同一の Word 文書を協調編集している際の、段落単位のロック機能) におけるプレゼンス (PresenceIndicator) の表示、Microsoft Outlook におけるプレゼンスの表示と会議招集など、既定で、Microsoft Office をはじめとするいくつかの Lync 統合 の機能 (add-in) を持っていますが、開発者の皆さんが作成するカスタムのデスクトップ アプリケーションでも、こうした Lync との連携機能を簡単に構築することができます。

補足 : Windows フォーム アプリケーション (WinForm) で Lync Control を使用する場合は、ElementHost コントロールを使用して、WPF 用のコントロールをホストします。(MSDN の こちら のドキュメントを参照してください。)

今回は、Lync Control を使用した基本的な構築方法を紹介しましたが、実際の開発では、例えば、「ログインしている SIP ユーザーのプレゼンスを表示する」など、プログラムによる処理が必要となるでしょう。

 

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s