クレームと Azure と SharePoint を統合するツールキット パート 4

クレームと Azure と SharePoint を統合するツールキット パート 4

これは、CASI (Claims, Azure and SharePoint Integration) キットについての 5 部構成のブログ シリーズのパート 4 です。 パート 1 では、フレームワークとソリューション全体の概要を説明し、このブログ シリーズで説明する内容を示しました。 パート 2 では、WCF アプリケーションを作成してクレーム対応にし、それを Windows Azure に移動するためのガイダンスについて説明しました。 パート 3 では、新しいカスタム コントロールを _layouts ディレクトリ内のページに追加することによって、SharePoint サイトを Azure データに接続するために使用する、ベース クラスについて説明しました。 この投稿では、このフレームワークの一部として含まれている Web パーツについて説明します。 この Web パーツは、パート 3 で作成し、レイアウト ページに追加したカスタム コントロールと連携するように、特に設計されています。

Web パーツの使用

Web パーツの使用を開始するにあたり、このブログ シリーズのパート 3 で説明されているように、a) Windows Azure でホストされる WCF サービスが動作していること、b) カスタム コントロールを作成し、それをレイアウト ページに追加していることが前提となります。 さらに、CASI キットのベース クラス アセンブリとカスタム コントロール アセンブリが、SharePoint ファーム内の各サーバー上の GAC に展開されていることも前提です。 カスタム コントロールをホストするカスタム aspx ページが、ファーム内のすべての Web フロント エンド サーバー上の layouts ディレクトリに展開されている必要もあります。 Web パーツの使用方法を説明するにあたり、パート 3 の投稿にアップロードして添付した AzureWcfPage サンプル プロジェクトを使用します。 この 2 つを結び付けて Azure のデータを SharePoint サイトで表示する方法について、説明しましょう。

メモ: 必須ではありませんが、呼び出される WCF メソッドが HTML を返す場合、特に処理を行わなくてもページに直接表示できるため、通常は、Web パーツの使用が非常に簡単になります。

まず最初に、AzureRender.wsp ソリューションをファームに展開します。wsp は、この投稿に添付された zip ファイルに含まれています。 これには、Azure DataView Web パーツと jQuery 1.4.2 を layouts ディレクトリに展開する機能があります。 サイト コレクションに対してソリューションが展開され、機能がアクティブ化されたら、Web パーツをページに追加できます。 この時点で、Azure のデータの表示を開始する準備はほぼ整っていますが、少なくとも 1 つのプロパティを設定する必要があります。 そこで、そのプロパティが何であるか、そして Web パーツには他にどのようなプロパティがあるかについて、次に説明します。

Web パーツのプロパティ

Web パーツのすべてのプロパティは、Connection Properties セクションにあります。 少なくとも、作成および展開するレイアウト ページに対して Data Page プロパティを設定する必要があります。 たとえば、 /_layouts/AzureData.aspx を指定します。 カスタム コントロールのサーバー タグで少なくとも WcfUrl プロパティと MethodName プロパティが定義されている場合、行う必要があるのはこれだけです。 他に何も行わなかった場合は、Web パーツはページを呼び出し、ページ内で構成されている WCF エンドポイントとメソッドを使用します。そして、メソッドが返すデータ (表向きは HTML 形式で返します) を受け取り、それを Web パーツに表示します。 ただし、ほとんどの場合は、柔軟性を最大限に高めるために他の Web パーツ プロパティも使用します。以下に各プロパティを示します。

· Method Name* – WCF アプリケーションで呼び出されるメソッドの名前。 独自の javascript 関数でレイアウト ページを呼び出す必要がある場合、このプロパティのクエリ文字列パラメーターは、“methodname” です。

· Parameter List* – セミコロンで区切られた WCF メソッドのパラメーターのリスト。 このブログ シリーズのパート 2 およびパート 3 で説明したように、基本のデータ型 (string、int、bool、long、datetime) のみがサポートされています。 複合データ型が必要な場合は、最初にこれを文字列に逆シリアル化してメソッドを呼び出し、WCF エンドポイントで複合型にシリアル化し直します。 独自の javascript 関数でレイアウト ページを呼び出す必要がある場合、このプロパティのクエリ文字列パラメーターは、“methodparams” です。

· Success Callback Address – レイアウト ページに対する jQuery 要求が正常終了した後に呼び出される javascript 関数。 既定では、このプロパティは、Web パーツに付属する javascript 関数を使用します。 独自の関数を使用する場合の関数シグネチャは、 function yourFunctionName(resultData, resultCode, queryObject) の形式です。 詳細については、 http://api.jquery.com/jQuery.ajax/ (英語) で jQuery AJAX のドキュメントを参照してください。

· Error Callback Address – レイアウト ページに対する jQuery 要求でエラーが発生した場合に呼び出される javascript 関数。 既定では、このプロパティは、Web パーツに付属する javascript 関数を使用します。 独自の関数を使用する場合の関数シグネチャは、 function yourFunctionName(XMLHttpRequest, textStatus, errorThrown) の形式です。 詳細については、 http://api.jquery.com/jQuery.ajax/ (英語) で jQuery AJAX のドキュメントを参照してください。

· Standard Error Message – Web パーツのサーバー側の処理中にエラーが発生した場合に Web パーツに表示されるメッセージ。 これは、データが Azure から実際にフェッチされるシナリオは含まないことを意味します。

· Access Denied Message* – 特定のメソッドについて、ユーザーに対してアクセスが拒否されると表示される、アクセス拒否のエラー メッセージ。 たとえば、このブログ シリーズのパート 2 で説明したように、WCF 呼び出しでユーザーのトークンを渡しているため、"このメンバーは営業マネージャー グループのメンバーである必要がある" というように、メソッドに PrincipalPermission 要求を指定できます。 ユーザーが PrincipalPermission 要求を満たさない場合、WCF 呼び出しはアクセス拒否エラーで失敗します。 その場合、Web パーツはどのようなアクセス拒否メッセージも表示します。 このメッセージでは、HTML タグを使用して文字を太字にしたり赤字にしたりするなど (例: <font color='red'>アクセスできません。管理者に問い合わせてください。</font>)、多様な書式設定を使用できます。 独自の javascript 関数でレイアウト ページを呼び出す必要がある場合、このプロパティのクエリ文字列パラメーターは、“accessdenied” です。

· Timeout Message* – WCF メソッド呼び出しを実行しようとしてタイムアウト エラーが発生した場合に表示されるメッセージ。 文字を太字にしたり赤字にしたりするなどの多様な書式設定もサポートされます。 独自の javascript 関数でレイアウト ページを呼び出す必要がある場合、このプロパティのクエリ文字列パラメーターは、“timeout” です。

· Show Refresh Link – Azure データの結果の上に更新アイコンを表示するには、このチェック ボックスをオンにします。 アイコンをクリックすると、WCF メソッドが再実行されて最新データが取得されます。

· Refresh Style – 更新リンクの表示に使用される IMG タグのメイン Style 属性に、別のスタイル属性を追加できます。 たとえば、このプロパティを使用して “float:right;” を追加すると、更新画像が右側に整列されます。

· Cache Results – jQuery ライブラリに対してクエリ結果のキャッシュを指定するには、このチェック ボックスをオンにします。 これは、ページが読み込まれるたびに、クエリ結果のキャッシュ バージョンが使用されることを意味します。 つまり、Azure とのやり取りが省略され、エンド ユーザーにとってはパフォーマンスが向上します。 取得しているデータが頻繁に変更されない場合は、結果のキャッシュが適しています。

· Decode Results* – WCF アプリケーションが HTML でエンコードされた結果を返す場合は、このチェック ボックスをオンにします。 このプロパティを true に設定すると、結果に対して HTML デコードが適用されます。 ほとんどの場合、これは必要ありません。 独自の javascript 関数でレイアウト ページを呼び出す必要がある場合、このプロパティのクエリ文字列パラメーターは “encode” です。

* – カスタム コントロールの AllowQueryStringOverride プロパティが false に設定されている場合、これらのプロパティは無視されます。

一般的な使用例

WCF メソッドが HTML を返すのであれば、ほとんどの場合は、ページに Web パーツを追加し、2 つまたは 3 つのプロパティを設定することになります。 具体的には、Data Page、Method Name、そして場合によって Parameter List のプロパティです。

Azure から返されたデータに対して、より高度な表示や処理が求められる場合は、カスタム javascript 関数を使用してそのような表示や処理を行うことができます。 その場合は、ページに javascript を追加し、Success Callback Address プロパティに javascript 関数の名前を設定します。 自分のパーツで、追加、更新、削除などで使用される WCF アプリケーションへの追加のポストが必要な場合は、それを自分の javascript 関数に追加し、適切な Method Name 値および Parameter List 値を使用してカスタム レイアウト ページを呼び出します。使用するクエリ文字列変数の名前は、上記のとおりです。 jQuery で ajax メソッドを呼び出すことでレイアウト ページを呼び出す場合は、Web パーツが使用するような方法を使用できる必要があります。 使用する呼び出し規則は、以下のスクリプト関数に基づきます。以下に示されている dataFilter プロパティは、WCF メソッドからの出力ではないページ出力をすべて取り除いてくれるため、このプロパティの使用を続けることになるでしょう。

$.ajax({

type: "GET",

       url: "/_layouts/SomePage.aspx",

dataType: "text",

data: "methodname=GetCustomerByEmail&methodparams=steve@contoso.local",

dataFilter: AZUREWCF_azureFilterResults,

success: yourSuccessCallback,

error: yourErrorCallback

});

 

試してみよう!

エンドツーエンド ソリューションを試してみる準備は整いました。 このブログ投稿に添付されている zip ファイルには、Web パーツのソリューションが含まれています。 このブログ シリーズの次の投稿でかつ最後の投稿では、パート 2 で開発したカスタム コントロールを使用して、Azure からデータを取得し、それを ASP.NET キャッシュと他のコントロールで使用する方法に加えて、SharePoint タスク (この例ではカスタム SharePoint タイマー ジョブ) で使用する方法についても説明します。

これはローカライズされたブログ投稿です。原文の記事は、「The Claims, Azure and SharePoint Integration Toolkit Part 4」を参照してください。