環境 : 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 クライアント開発入門
- はじめに
- Lync 2010 コントロールを使用した開発
- Lync SDK のプログラム コードを使用した開発
- Conversation Window 拡張 (CWE)
- Contextual Conversation 開発
- Online Meeting (Web 会議)
こんにちは。
今回は、まず最初に、Silverlight を使用したアプリケーションを例に、Lync 2010 SDK で提供されているコントロールを使用した簡単な開発手法を見ていきましょう。
開発前の準備 (環境構築)
まず環境設定についてですが、上記 (「環境」の項) に記載している通り、必要な環境をインストール / セットアップしておきましょう。(サーバーのインストールが面倒な方は、ここでの開発は、すべて Lync Online を使用しても OK です。この際、Silverlight 4 Tools for Visual Studio 2010 も必要ですので注意してください。)
==========
[補足] Lync Server 2010 のインストールについて
※ Lync Server 2010 のインストールでは、下記のインストール ガイドに記載されている順番に従って、DNS レコードの設定など、忠実に設定作業をおこなってください。(私もはまりました。。。)
なお、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 ユーザーのプレゼンスを表示する」など、プログラムによる処理が必要となるでしょう。
Categories: Uncategorized
6 replies»