Welcome to MSDN Blogs Sign in | Join | Help

開発内容: blueKiwi SharePoint Connector および OfficeAssistant

概要

企業向けのソーシャル ソフトウェアを発売している、ヨーロッパで有数のソフトウェア会社である blueKiwi Software から、blueWiki SharePoint Connector が blueKiwi OfficeAssistant と共に発表されました。SharePoint のユーザーは、blueWiki SharePoint Connector によって、blueKiwi の補完的で高度に専門化されたソーシャル ソフトウェア スイートを既存の SharePoint 環境に統合できます。また、SharePoint ポータル内で、組織全体で最も活発な議論など、重要な指標を表示します。

SharePoint のユーザーは、関連するすべての添付ファイルを blueKiwi から SharePoint ドキュメント ライブラリまたはレコード センターに格納することもできます。さらに、blueKiwi 内から SharePoint ドキュメント ライブラリを参照することで、blueKiwi のブログ投稿に SharePoint のファイルを添付できます。

blueKiwi OfficeAssistant によって、blueKiwi のユーザーは Microsoft Office 2007 クライアント アプリケーション内から直接コンテンツを公開できます。

マイクロソフトでは、Emerging Business Team (新規事業の立ち上げやマイクロソフト製品との統合への協力を行うチーム) から相当のリソースを投資しました。数か月にわたって、パリの Microsoft Technology Center (MTC) で共同開発が行われました。

blueKiwi と SharePoint を使用する理由

blueKiwi は、次の機能を提供することによって、SharePoint を拡張します。

  • エンド ユーザーが迅速かつ簡単にアイデア (リッチ テキスト、オーディオ、ビデオを含む) を共有できる、企業向けのブログ作成と対話のためのプラットフォーム。
  • 組織全体にわたるコミュニティ内で従業員が投稿したもの (ブログ、または他のブログでのコメント) の、人を中心とした表示。
  • エンド ユーザー間のやりとりによって自動的に定義される動的なソーシャル ネットワーク。
  • 個人が投稿するコンテンツの種類に基づいた、自動的な専門知識の分類。
  • SharePoint の検索と統合される、専門知識の検索のプラットフォーム。専門知識の自動的な定義や、専門家をすばやく見つけることが容易になります。
  • 個人用サイトと統合できる、書式が豊富で動的なユーザー プロファイル。
  • 動的な、コンテンツのタグのクラウド。複数のコミュニティや組織全体にわたって最も多く議論されているトピックを視覚的に表現します。
  • 動的な、ソーシャル タグのクラウド。エンド ユーザーが、最も多く、共通の興味として共有したり、相互にやりとりを行っている分野を表示します。

開発理由

私たちの顧客の多くは、blueKiwi と SharePoint の両方を使用しています。

  • blueKiwi は、専門知識の特定や検索のためのソーシャル ソフトウェア スイートとして使用されます。分散しているチーム間の交流を深め、グループの電子メールを削減し、革新的なアイデアやパートナーとの交流を促し、また、スタッフの満足度を向上させます。
  • SharePoint の使用目的は、グループ作業、企業の情報およびコンテンツの管理、インターネットのポータル、エンタープライズ検索、およびビジネス インテリジェンスのダッシュボードです。

私たちの顧客にとって重要な点は、blueKiwi の情報を SharePoint で表示できること、SharePoint のファイルを blueKiwi ノートに追加できること、blueKiwi の添付ファイルを SharePoint に保存できること、および blueKiwi のコンテンツを SharePoint から (また、その逆も同様に) 検索できることでした。

開発内容

私たちが採用した方法は、ユーザーが blueKiwi と SharePoint を相互に独立して使用できる一方で、必要がある部分では統合できるようにする方法でした。SharePoint の API が公開されていて、オープン スタンダードを順守しているため、この方法が可能でした。blueWiki の SharePoint との統合の 3 つの要素について説明します。

  • カスタム SharePoint Web パーツ
  • SharePoint Search の統合
  • SharePoint のファイル記憶域の統合

カスタム SharePoint Web パーツ

カスタム SharePoint Web パーツによって多くの機能が利用できるようになります。
clip_image002
図 1: Conversation Web パーツと、動的で "ドリル可能な" タグのクラウド

Conversation Web パーツによって、blueKiwi のユーザーは、安全性が高く、認証された blueKiwi の活動のフィードを SharePoint ポータルで表示できます。Web パーツを構成して、特定のコミュニティ、作成者、またはチャネルから blueKiwi ノートを表示できます。

  • コミュニティ: 指定されたコミュニティからのすべての投稿。
  • 作成者: 特定の作成者からのすべてのコンテンツ (特定の作成者自身が公開したコンテンツに加え、組織全体での他のユーザーの blueKiwi ノート上のコメントも含む)。たとえば、イントラネットのページ上で CEO の投稿を表示し、CEO が参加している blueKiwi conversation で、エンド ユーザーが所属しているコミュニティからのものをすべて表示している顧客もいます。
  • チャネル: 特定のチャネルに公開されたすべてのやりとりが表示されます。blueKiwi のチャネルは、組織の分類を示すので、通常、チーム サイトや部門のイントラネットに使用されます。たとえば、営業部門では、部門のチームサイトのホームページで、営業とマーケティングのチャネルからすべてのやりとりを表示できます。

Tag Cloud Web パーツによって、組織全体、特定のコミュニティ、または特定のユーザーのタグ クラウドを表示できます。社内のイントラネット、部門のイントラネット、チーム サイト、または個人用サイトで役に立ちます。

Personal Network Web パーツによって、blueKiwi から個人のソーシャル ネットワークを表示できます。特に、個人用サイトやチーム サイトで役に立ちます。
clip_image002[5]
図 2: "ユーザーのタグ クラウド" として表示される個人ネットワーク

すべての Web パーツのコンテンツは blueKiwi の Web サービス API を経由して表示されます。認証およびセキュリティは、Active Directory の使用、または blueKiwi へのユーザー名のマッピングのどちらかで管理されるため、すべてのコンテンツは、個人用に設定され、安全性が保たれます。

SharePoint Search の統合

検索の統合には、次の 2 つの選択肢がありました。1) blueKiwi 用の SharePoint プロトコル ハンドラーおよび SharePoint 用の blueKiwi プロトコル ハンドラーを開発する。2) OpenSearch の統合のみを使用する。blueKiwi には、ソーシャル コンピューティング用に開発された高度に専門化された検索エンジンが付属しているため、SharePoint 内で再度すべてのインデックスの作成を行うことは意味のないことでした。OpenSearch は、Amazon が開発したオープン スタンダードで、Microsoft では Search Server 2008 に採用され、SharePoint Server 2007 にも間もなく採用されます。OpenSearch によって、XML 形式を使用して検索クエリを作成できます。また、複数の検索エンジンから検索結果を統合することができ、結果は RSS または ATOM フィードとして 1 ページで戻されます。インデックス作成の動作が二重に行われず、特定の必要性に基づいて検索のカスタマイズが可能なので、この選択肢によって、顧客はさらに高い柔軟性とパフォーマンスが得られます。たとえば、SharePoint の検索サイトを構成して、SharePoint、ファイル サーバー、Flickr、blueKiwi、Wikipedia、Twitter、さらには Google ニュースからも、すべて同じページに結果を戻すことができます。これによって、"Microsoft" で検索した場合、これらすべての異なる場所から結果が得られ、1 つの画面に表示されます。同様の方法で、ユーザーは SharePoint コンテンツを blueKiwi 内から検索できます。つまり、情報が必要になったときに、場所を問わずに簡単に見つけることができます。

SharePoint のファイル記憶域の統合

blueKiwi conversation に、ファイルを添付することがよくあります。電子メールとは異なり、添付ファイルごとのファイル サイズには制限がないので、メールボックスのサイズの制限に影響を与えることなく、大きなドキュメントを送信できます。一部の顧客では、これらのドキュメントが社内の ECM (エンタープライズ コンテンツの管理) システム (SharePoint が使用される場合もあります) に保存されることが規制順守の要件となっています。SharePoint API を blueKiwi 内から呼び出すことで、このプロセスを容易にし、blueKiwi に送信されるすべての添付ファイルが実際に SharePoint ドキュメント ライブラリ、ドキュメント センター、またはレコード センターに企業ポリシーに沿って保存されます。さらに、blueKiwi conversation にファイルを添付するときに、ユーザーは SharePoint ドキュメント ライブラリを blueKiwi 内から参照でき、また、SharePoint に保存されたドキュメントを blueKiwi 内から直接開いたり編集したりすることもできます。
clip_image002[7]
図 3: SharePoint のファイルを blueKiwi conversation に添付する

Office 2007 アドイン: blueKiwi OfficeAssistant

SharePoint に特有の機能ではありませんが、blueKiwi OfficeAssistant アドインによって、ユーザーは、Office クライアント アプリケーション内から直接 blueKiwi 内へ、ブログの投稿、Wiki ページ、または blueKiwi conversation へのファイル添付でコンテンツを公開できます。これは、Visual Studio Tools for Office を使用して blueKiwi の Web サービス API を呼び出すことにより、きわめて簡単に実現されました。
clip_image002[11] 
図 4: blueKiwi の投稿を Word 2007 内から作成する (右)、コミュニティ、チャネル、およびタグを選択する (中央)、blueKiwi での最終結果 (左)

SharePoint プラットフォームへの注力

今後は、blueKiwi conversation に使用されたものはすべて企業レコードとして残すことができるように、SharePoint のレコード管理機能との統合にさらに注力することを計画しています。また、SharePoint の KPI Web パーツおよびレポート センター機能を活用する数種類のコミュニティ ダッシュボードも追加する予定で、Microsoft PerformancePoint Server を使用してビルドされたバランス スコアカードへソーシャル指標が統合される予定です。

 

Rob Gray、UK Country Manager (英国統括マネージャー)
blueKiwi Software (blueKiwi Software に関するページ)

これはローカライズされたブログ投稿です。原文の記事は、http://blogs.msdn.com/sharepoint/archive/2008/06/08/how-we-did-it-bluekiwi-sharepoint-connector-and-officeassistant.aspx をご覧ください。

開発内容: SharePoint を利用した Christian Children's Fund のエクストラネット

経営コンサルティングと Web コンサルティングの会社で、マイクロソフト認定ゴールドパートナーでもある Ironworks Consulting が、先ごろ、Christian Children's Fund (CCF) の国際的なエクストラネットを新しく立ち上げました。CCF は、世界で最も尊敬を集めている、子供の発育に関する団体の 1 つで、世界中で子供たちの支援をしてきた宗派を問わない組織です。1938 年の発足以来、31 か国で活動を行い、人種や宗教、性別を問わず、1320 万人以上の子供たちを支援してきました。CCF のこれまでの子供たちへの援助は 27 億ドル以上で、その資金の大部分はチャイルド スポンサーシップの形で個人から寄付されたものです。

子供の発育と保護の問題でのリーダーとして、CCF のプログラムでは、貧困にあえぐ地域に現実的な支援を行います。子供たちが能力をフルに発揮する機会を与えられ、地域に前向きな変化をもたらすような、子供たちが期待され尊重される環境を築くことを目的として、自給自足への道を作ります。こういった広範囲で持続可能なプログラムには、衛生、教育、栄養、および生活支援が含まれ、子供たちの保護、育成、および発育を目的としています。CCF は、家族や地域の意見だけでなく、子供たちの声も取り入れた、子供たちを中心にして考えられた取り組みを行っています。

世界 33 か国以上にわたって人員が地理的に分散しているため、CCF は、既存のイントラネットのサイトの使用や導入に関して、重要な課題に直面していました。 世界中のオフィスに対して情報を伝達し、共有するために、また、ソーシャル ネットワーキングや組織の接続性を改善するプラットフォームを実現するために、信頼性と拡張性の高いソリューションが求められていました。

このプロジェクトの目的は、世界中の CCF の従業員によって使用される、"The Hub" と呼ばれる CCF の新しいエクストラネットを開発して、稼働させることでした。これは、共通の情報源として、またコンテンツやドキュメントの保管場所として使用され、内部のグループ作業や外部とのグループ作業の手段としても使用されます。

clip_image002[4]
図 1: CCF のエクストラネットのホーム ページ

プロジェクトは、調査と設計の段階から開始され、要件が文書化されました。サイト マップとネットワーク構造を検討したうえで、サイトのアーキテクチャが決定されました。また、ナビゲーション、ページ レイアウト、グラフィカルなデザインが作成され、サイトの外観を新しくすることが承認されました。このような初期の段階で、ユーザーが新しい技術を理解しやすく、また、要件や設計の議論で双方向のやりとりが実現できるように、サイトの見本が作成されました。採用されたアーキテクチャは MOSS 2007 のテクノロジを活用するもので、今後の事業の拡大や全世界でのチームのグループ作業の必要性を考慮して、CCF が選択したプラットフォームです。

Ironworks は、CCF の運用環境で MOSS 2007 と SQL Server 2005 のインストールと構成を行いました。また、75 以上のサイトで構成される MOSS 2007 のサイト コレクションに加え、カスタム Web パーツ、サイト テンプレート、マスター ページ、ページ レイアウト、およびカスタム HTML スタイルの開発および展開も行いました。開発の開始後、反復開発および反復展開の方法を使用して、CCF が開発中のサイトに早い段階からアクセスして確認とフィードバックを行うことができるようにし、またコンテンツの移行プロセスを可能な限り早く開始できるようにしました。

最後に、CCF の Interactive Communications および IT 部門と協力して、"The Hub" のエンドユーザー、スーパー ユーザー、および管理者が運用を開始できるように、トレーニングを行い、説明書を作成しました。

管理体制

Ironworks は、CCF の主導でエクストラネットに取り組む戦略的な重要性と、人員の全世界への広がりを考慮して、実際のサイトの運用の前に The Hub の管理体制の確立に積極的に取り組みました。実際に、エクストラネットの運用には、CCF の分散した組織にとっては今までにない管理のレベルが必要でした。Ironworks は CCF と協力して、MOSS をベースにしたプラットフォーム内で管理される、エクストラネットのコンテンツ、サイト、およびオブジェクトに関する管理ポリシーと管理基準を設けました。

管理体制のキーポイントは、100 以上のカスタム コンテンツ タイプの定義と運用でした。ドキュメントの書式とメタデータのコレクションの標準化が、取得、再利用、および継続的な情報管理の改善につながりました。SharePoint の、すぐに使用できる承認ワークフローが、各種のコンテンツ タイプと関連付けられました。

カスタマイズされたアクセス許可レベルおよびセキュリティ グループの定義と、明確に定義された分類によって、コンテンツの作成と管理に関連した決定を行って実行しながら、同時に CCF の該当分野の専門家にコンテンツ開発を効率的に割り振ることができるツールが、CCF に提供されました。また、SharePoint の拡張性は、IT のプロセスやリソースへの依存度を減らし、変化へのスムーズな対応と新しいソリューションへの移行を促進するのに役立ちました。

ユーザー管理

権限を事業の関係者に与える方針は、SharePoint および Active Directory の両方での新しいユーザー アカウントの作成および継続的な管理にも及びました。

CCF Hub のエクストラネットのサイトの機能要件により、Active Directory アカウントおよび SharePoint プロファイルを新しく準備したり、既存のものを編集したりするための、限定されたユーザーのグループが使用できるカスタム Web パーツの作成が必要でした。Ironworks は、この要件を満たすために、Solution Sharing Network (SSN) プロジェクト (オープン ソースの Community Kit for SharePoint の一部) に含まれるメンバーシップ コントロールを利用し、SharePoint のプロファイルの編集ページの上書きと拡張も行いました。

clip_image002[6]
図 2: アカウントの作成ページ

Ironworks が作成したアカウント申請コントロールは、SSN ポータルに含まれているものの機能を限定したバージョンです。アカウントの申請のために入力する必要があるフィールドは、5 つのみでした。申請が送信されると、カスタム リストにアイテムが生成され、ワークフローが開始されます。最終的には、申請者が所属している Active Directory OU に指定されている承認担当者によって、申請が承認されるか、あるいは却下されます。

申請が承認されると、その情報はアカウントが作成される Active Directory へ送信され、そのユーザーのプロファイルが作成される SharePoint プロファイル ストアにも送信されます。そのユーザーは、両者でアカウントが作成されたことを知らせる電子メールを受信します。

Ironworks は、Active Directory のプロパティ (電子メール アドレスなど) へマップされたフィールドなど、既存のプロファイルを編集するために、さらにカスタムの検索と編集コントールを開発しました。承認されているユーザーは、このコントロールを使用して、ユーザー名または氏名で検索できます。Active Directory に対して、ユーザーの一致を確認するための簡単なクエリが実行され、グリッド内に結果が戻されます。各レコードで、ユーザー名は、そのユーザーの詳細ページへのリンクになります。

clip_image002[8]
図 3: ユーザー プロファイルの検索と編集ページ

詳細編集ページは、SSP のコンテキストからコピーされ、layouts ディレクトリに直接ホストされた SharePoint のページ (ProfAdminEdit.aspx) で、カスタム認証とデータ記憶域を持っています。更新されたフォームが保存されると、情報は Active Directory と SharePoint の両方へ送信され、フォームを SharePoint へ排他的に保存する元の方法は無効になります。

コンテンツの移行のサポート

Ironworks は、要件を収集する段階で、CCF のコンテンツ管理者に計画ワークシートを提供し、さまざまな部門と業務単位ごとのコンテンツ ソースの一覧の作成を依頼しました。これによって、CCF で早い段階にコンテンツの移行作業の範囲に対しての理解が得られ、計画が立てられました。

コンテンツの移行に関しての取り組みが十分なレベルだったため、サイトの開発と構成の段階で、CCF のコンテンツの移行の担当者に参加してもらう機会を作りました。CCF には、多数のメタデータを持つ、大規模な画像のリポジトリがあり、MOSS へ移行する必要がありました。Ironworks は、サイトの反復開発の 1 回目で、カスタムの写真ライブラリ機能のスタイル設定と構築を完了しました。このため、写真ライブラリは開発中に CCF の担当者に公開され、運用開始の数週間前にコンテンツのコピーが開始されました。

clip_image004
図 4: キャプション、およびカスタムのビューアーとスタイル設定を使用した写真ライブラリ

CCF のエクストラネットのプロジェクトで、対象ユーザーにとって直感的な情報アーキテクチャ (IA) の作成、上位レベルの構造からの着手、サブサイトとページ レイアウトについての考慮といった点に関して、数多くの課題を解決しました。

上位レベルの構造

SharePoint は共同作業に適した特性と機能を持っているので、Ironworks は、CCF がどのような組織になっているかだけでなく、組織全体でどのように情報を共有しているかについても、理解に努めました。組織のニーズを特定するために、さまざまな内部のグループと要件に関してのセッションを重ね、サイト内のレイアウト、コンテンツ タイプの決定と、CCF の内部の分類の理解に役立てました。

CCF の以前のイントラネットは、約 5 年の計画で構築されていましたが、特に組織内の新しい従業員には、時代遅れで "見つけやすさ" の妨げになっていました。Ironworks は、新しいエクストラネットでは、長年にわたってスケーラビリティをサポートする、より一般的な構造を構築しました。ユーザーは、"グループ" や "オフィス" などの上位レベルのカテゴリを使用して、関連するサブサイトをすばやく特定でき、ドリル ダウンして必要な情報を見つけられます。

Ironworks は、さらに "見つけやすさ" を向上させるために、表示されるサイト マップ ノードの数を拡大して、フライ アウト メニューを有効にする、カスタム ナビゲーション コントロールを作成しました。ユーザーは、詳細なレベルでの情報を見つけることができ、直接その情報へ移動できます。

また、このカスタム ナビゲーション コントロールによって、プロファイル設定で指定されている "Preferred Language" (優先する言語) プロパティ (英語、スペイン語、フランス語、またはポルトガル語) を基に、すべてのサイト コレクションのページに指定されている別の言語のタイトルを取得して、各エンド ユーザー向けのナビゲーション テキストが提供されます。ユーザーの優先する言語が指定されると、適切な PortalSiteMapProvider (各言語用に優先されるバージョンがあります) に対して呼び出しが作成されます。呼び出されたプロバイダーは、各サイト マップ ノードを取得し、そのノードのタイトルをユーザーが選択した言語に対応した言葉に変換します。この変換は、実際には代入の処理で、プロバイダーによって、現在のサイト マップ ノードへ適用されるページ レコード内で、スペイン語のタイトルやフランス語のタイトルなどが取得されます。左側のナビゲーション メニューに、コントロール アダプターが実装されます。これは、メニューのレンダリングを中断し、デザイン チームがカスケード スタイル シート (CSS) で外観を操作できるタグとクラスの設定で HTML を置換します。コントロール アダプターは、メニュー内のノードを解析し、適切な HTML (必要に応じてカスタマイズできます) を記述します。これにより、開発者は、高い柔軟性と、レンダリングされたものに対してのコントロールを得られます。

clip_image006
図 5: フランス語でのグループのページ

一貫性のあるセクション テンプレート

Ironworks は、サイトの詳細なレベル (具体的には、コンテンツの大部分が存在している "組織単位"、"グループ"、および "オフィス" の領域内) での直感的な構造の維持を目指しました。これを達成するために、これらのセクション内のサイト用に一貫性のある構造を持つサイト テンプレートを作成しました。このテンプレートは一般的なものなので、組織の別の領域をサポートできます。また、一貫性のある構造なので、ユーザーはどこで情報を探せばよいかがわかります。

サブサイトが共通の外観に標準化されたことに加え、サイト コレクションのマスター ページに含まれているカスタム ヘッダー イメージ コントロールによって、視覚的な面での独自性によるブランド化が実現されました。このコントロールは、サイト コレクションのサイトの一覧に格納されている "Header Image Url" (ヘッダー イメージの Url) 列に基づいて、各サブサイトの特色を示すヘッダー イメージを使用します。

さまざまなサブサイト用のサイト テンプレートを作成することで、ほかにも影響がありました。管理者が簡単かつ迅速に新しいサイトを作成できることにより、サイト コレクションの最初の構築が速まり、その後のサイトのメンテナンスが簡単になりました。

Ironworks は、各サイト内の情報の表示方法を改善する手段として、デザイナーがタブ付きの Web パーツ ゾーン インターフェースを作成できるカスタムの "Tabstrip" (タブ ストリップ) Web パーツを開発しました。この Web パーツは、サイト コレクションのドキュメント ライブラリ内に格納されている XML 構成ファイルから構成情報を読み取ります。この情報を使用して、表示するタブの数と順序、タブに表示する名前、およびそのタブのコンテンツのレンダリングに使用する方法 (iframe または div) を決定します。div モードで使用されるときは、Tabstrip は、すべて適切に命名された複数の div 要素を含む、特化された SharePoint ページ レイアウトと連動します。iframe モードで使用されるときは、Tabstrip ソリューションのコードを通じて iframe 要素が追加されている、すべてのページ レイアウトに、Tabstrip を追加できます。Tabstrip Web パーツは、必要に応じて XML 構成ファイルの "audiences" (対象ユーザー) プロパティの記述を基にして、タブのユーザー指定をサポートします。

clip_image008
図 6: Tabstrip Web パーツによってレンダリングされたドキュメント ライブラリ

ソーシャル ネットワーキングおよびコミュニケーション

本質的に、CCF の事業では、多くの地域、国、タイム ゾーンにわたっての展開が必要です。多くの場合、日常的に、一度も顔を合わせたことがない従業員との間で、コミュニケーションや共同作業を行う必要があります。さらに、別の地域で必要性が高まるにつれて、新しい CCF のスタッフが責任を負い、そういった変化に関しての情報交換が課題になる場合があります。

Ironworks は、こういった必要性への対応に役立つように、SharePoint に組み込まれているソーシャル ネットワーク機能を実装して、拡張を行いました。各ユーザーへのプロファイルとプロファイル写真の提供、人の検索の構成、従業員用の掲示板の実装、および組織に特有の用語の文書化ための Wiki サイトの作成に加えて、ユーザーが世界中の仕事仲間と知り合うのを助ける、数点のカスタム コンポーネントも実装しました。これらには、次のものが含まれます。

  • AA OrgChart Web Part: 会社、地域、国、グループ、および組織単位のレベルでの、従業員の写真とレポート構造を持った、展開/折りたたみが可能な組織図。
    clip_image010
  • Meet Your Colleagues Web パーツ: エクストラネットの "Community" (コミュニティ) の部分から、選択された "Meet Your Colleagues" の記事のページを強調する、カスタムでスタイル設定された、コンテンツ クエリ Web パーツ。
    clip_image012
  • World Time Zones Web パーツ: SharePoint リストに格納された UTC オフセット情報とイメージ URL を使用して、特定のロケールに適用される現在の時刻と地図を表示するカスタム Web パーツ。Web パーツを構成して、1 つの地域のための情報を表示できます。あるいは、ユーザーが一覧から国を選択できるフィルター Web パーツに接続できます。
  • HotSites Web パーツ: Solution Sharing Network プロジェクトの SSN.WebControls.General の一部である同名の Web パーツがベースになっています。この Web パーツは、ユーザーのアクセス数に基づいて、サイト コレクションの中で最も人気のあるサイトの順位を表示します。Ironworks のバージョンのコントロールは、サイト コレクションの監査ログのクロールを、表示用に結果をキャッシュする夜間の処理にオフロードすることにより、パフォーマンスが最適化されています。
  • Outlook Inbox コントロール: ユーザーの Outlook 受信トレイへのリンクを表示し、現在の未読メッセージの数を表示するコントロールが、サイト コレクションのマスター ページに統合されています。この Web コントロールは、特定のユーザー用に受信トレイが存在するかどうかの確認と、未読メッセージの数の取得の両方を行う WebDav クエリ を実行します。出力は、Outlook Web Access 用の新しいウィンドウを開く JavaScript 呼び出しを含むストレートな HTML としてレンダリングされます。

CCF のケース スタディの最後に記述されているように、SharePoint のエンタープライズ検索機能が、The Hub の導入の成功に多大なる貢献をしていることに注目する必要があります。MOSS Search は、Ontolica Search の製品の実装によって拡張され、多様性のある大規模な組織での情報共有の改善にあたっての SharePoint の力を示すのに、多大なる役割を果たしました。

サイト コレクションの検索センター内で、マップされたメタデータのプロパティを含むように拡張された高度な検索ページは、カスタム コンテンツ タイプの定義に長時間かかっていたビジネス ユーザーに明らかな利点を生みだしました。同様に、Ontolica の検索結果 Web パーツ (簡単に構成できる、ファセット方式の検索結果の表示用のツール) が実装されたことで、同じメタデータが活用されました。

clip_image014
図 7: 高度な検索ページ

clip_image016
図 8: Ontolica Search によって提供される、構成されたファセットを含む検索結果ページ

Search Result (検索結果) Web パーツは検索センターとは別に使用され、事前に準備された検索クエリに基づいてサブサイト全体のコンテンツを効率的に検索する手段として使用されます。Ontolica の検索結果 Web パーツによって、お知らせ、連絡先、およびニュースを含む多様なコンテンツ タイプのカスタム書式の一覧を生成するためのインターフェイスを簡単に使用できます。

Ironworks にとっては、CCF エクストラネットの稼働によって、信頼性の高いアプリケーション開発のための強力なプラットフォームおよびフレームワークとしての SharePoint の役割が明らかになりました。SharePoint の主要な機能の特長 (コンテンツ管理、検索、グループ作業)、重要な役割を担うサードパーティ製ツール (AA OrgChart および Ontolica Search)、およびマイクロソフト認定パートナーによるカスタム開発が結集された結果が、The Hub の成功につながりました。

プロジェクト チームのブログ作成者

  • Mark Gallagher - Project Manager (プロジェクト マネージャー)、Ironworks Consulting
  • Sean Kesler - Business Analyst (ビジネス アナリスト) 、Ironworks Consulting
  • David Perkinson - Lead Architect (リード アーキテクト)、Ironworks Consulting
  • Marissa Johnston - Information Architect (情報アーキテクト)、Ironworks Consulting
  • Bill Cavender - Assistant Director (アシスタント ディレクター)、Interactive Communications, Christian Children's Fund

これはローカライズされたブログ投稿です。原文の記事は、http://blogs.msdn.com/sharepoint/archive/2008/06/16/how-we-did-it-christian-childrens-fund-extranet-powered-by-sharepoint.aspx をご覧ください。

開発内容 – InfoPath Forms Services を使用したサービス要求の自動化

概要

本日紹介するブログ投稿ゲストは、SharePoint の開発および統合に重点的に取り組んでいる、ジョージア州アルファレッタ市に本拠を置く Microsoft 認定ゴールド パートナーの ThreeWill 社です。ThreeWill は、最近、Microsoft と連携して、InfoPath Forms Services を使用した汎用のサービス要求 Office ビジネス アプリケーション (OBA) を構築しました。このアプリケーションは、コードを使用せずに、サービス要求に基づく SharePoint サイト (つまり、電子フォームを使用して要求を開始し、その要求をワークフローに結び付けるサイト) を迅速に立ち上げるという企業の要求に応えるものです。

サービス要求の例には、次のものがあります。

  • マーケティング資金に対する要求
  • ラップトップやその他の装置に対する要求
  • プロジェクト サイトの作成に対する要求

このソリューションは、サーバー ファームへの展開と標準的な SharePoint プロビジョニングを可能にするための SharePoint 機能としてパッケージ化されています。このアプリケーションでは、Active Directory との統合がサポートされており、ユーザー情報が事前に設定され、データ接続を使用して InfoPath から Web サービスに簡単に接続できます。最終的には、構成情報はサイト管理者が安全、便利にアクセスできるように、SharePoint リストに格納されます。ThreeWill でこれをどのようにして実現したかについて見ていきましょう。

Pej Javaheri (SharePoint プロダクト マネージャー)

図 1 にこのサイトのホーム ページを示します。クイック起動ナビゲーションを見るとわかるとおり、ユーザーは要求を作成、編集、および表示できます。これによって、多くの目的に合わせて簡単に構成できるセルフ サービス アプリケーションを実現できます。

workflow_infopath (2)

図 1 - サービス要求アプリケーションのホームページ

コアのユーザビリティ機能

このプロジェクトの主要な目的の 1 つは、ユーザーの操作性を向上するために、標準の InfoPath フォームの動作にいくつかの重要な変更を行うことでした。たとえば、クイック起動ナビゲーションの [Create Request] (要求の作成) リンクをクリックして要求の作成を開始すると、Web パーツ ページとして組み込まれた InfoPath フォームを使用した [Create/Edit Request] (要求の作成/編集) ページに移動します。ユーザーが要求を保存すると、その要求が自動生成された名前で保存され、ユーザーはサービス要求サイトのホーム ページに戻ります。こうしたフォームとのやり取りの "調整" によって、サイトの全体的なユーザー エクスペリエンスが向上します。

これらの機能を実装するために、このチームでは、XML フォーム ビューアーの 1 つのインスタンスを 1 つの Web パーツにラップしました。

標準の名前付け規則を適用するために、SubmitToHost イベントを上書きして、ユーザー名と現在の時刻に基づいた名前付け規則を使用してフォームを保存するようにしました。

void _xmlFormViewControl_SubmitToHost(object sender, SubmitToHostEventArgs e)

{

const string formLibraryName = "Requests";

SPWeb currentWeb = SPContext.Current.Web;

// Get the contents of the form and put them into a byte array

XPathNavigator nav = _xmlFormViewControl.XmlForm.MainDataSource.CreateNavigator();

System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();

byte[] contents = enc.GetBytes(nav.OuterXml);

//load in the xml document so we can extract out fields by name

XmlDocument xmlDocument = new XmlDocument();

xmlDocument.LoadXml(nav.OuterXml);

Dictionary<string, ArrayList> documentFields = Utility.GetNameValuePairs(xmlDocument);

//retrieve InfoPath form keys from the Configuration list

Dictionary<string, string> configuration = Utility.GetConfiguration(SPContext.Current.Web);

string [] formKeyFields = string.IsNullOrEmpty (configuration[Utility.ConstInfoPathFormKeysParameterColumn])?

new string [0]:

configuration[Utility.ConstInfoPathFormKeysParameterColumn].Split(',');

//begin to build the filename

string filename = "";

//iterate through each form key field

foreach (string formKeyField in formKeyFields)

{

//if the form key field is found in the InfoPath form, add it to the filename

if (documentFields.ContainsKey(formKeyField.Trim().ToUpper()))

{

foreach (string fieldValue in documentFields[formKeyField.Trim().ToUpper()])

{

filename += fieldValue;

filename += "_";

}

}

}

//name files using the user name and date if the infopath form keys could not be found

if (string.IsNullOrEmpty(filename))

{

filename = SPEncode.UrlEncode(currentWeb.CurrentUser.Name.Replace('\\', '-')) + "_" + DateTime.Now.ToString("yyyyMMdd_hhmmss") + ".xml";

}

else

{

//trim any training underscores, add the file extension

filename = SPEncode.UrlEncode(filename.Trim(new char[] { '_' })) + ".xml";

}

// Determine the URL of the new file

string saveUrl = currentWeb.Url + "/" + formLibraryName + "/" + filename;

// open document library as a folder

SPFolder docLibFolder = currentWeb.GetFolder(formLibraryName);

// Save the form by adding its contents to the document library

if (string.IsNullOrEmpty (_xmlLocation) == false && docLibFolder.Files[_xmlLocation] != null)

docLibFolder.Files[_xmlLocation].SaveBinary(contents);

else

docLibFolder.Files.Add(saveUrl, contents);

}

The Close event is where we handled sending the user back to the home page.

void _xmlFormViewControl_Close(object sender, EventArgs e)

{

// Inspect the QueryString

if (this.Page.Request.QueryString["Source"] != null)

{

SPUtility.Redirect("", SPRedirectFlags.UseSource, this.Context);

}

else

{

SPUtility.Redirect(SPContext.Current.Web.Url + "/default.aspx", SPRedirectFlags.CheckUrl, this.Context);

}

}

さらに、[Edit My Request] (要求の編集) リンクについても、ユーザービリティの向上を図りました。ユーザーがこのリンクをクリックすると、そのサイトに対する要求が 1 つのみの場合、その要求が読み込まれます。要求が 1 つもない場合は、新しい要求が作成されるようになります。また、複数の要求がある場合は、要求の一覧が表示されます。これらの場合の処理のために、ServiceRequestRedirector (サービス要求リダイレクター) クラスを作成しました。

public class ServiceRequestRedirector : LayoutsPageBase

{

private const string FORMS_LIST_NAME = "Requests";

private const string QUERY_DEF = "<Where><Or><Eq><FieldRef Name='Author'/><Value Type='User'>{0}</Value></Eq><Eq><FieldRef Name='Editor'/><Value Type='User'>{0}</Value></Eq></Or></Where>";

protected override void OnLoad(EventArgs e)

{

// get current site, web and user

SPSite siteCollection = this.Site;

SPWeb site = this.Web;

SPUser currentUser = site.CurrentUser;

//get list of fields to return "<Where><Or><Eq><FieldRef Name='Author'/><Value Type='User'>{0}</Value></Eq><Eq><FieldRef Name='Editor'/><Value Type='User'>{0}</Value></Eq></Or></Where>"

string viewFields = GetViewFields();

//build the query string for querying the Request list

//to retrieve any item created or modified by the current user

string requestQueryFields = string.Format(QUERY_DEF, currentUser.Name);

string redirectUrl = default(string);

try

{

SPListCollection lists = site.Lists;

SPList timesheetList = site.Lists[FORMS_LIST_NAME];

SPQuery requestQuery = new SPQuery();

requestQuery.ViewFields = viewFields;

requestQuery.Query = requestQueryFields;

SPListItemCollection listItems = timesheetList.GetItems(requestQuery);

if (listItems.Count == 0)

{

redirectUrl = site.Url + "/SitePages/norequests.aspx";

}

if (listItems.Count == 1)

{

string url = Request.RawUrl;

redirectUrl = site.Url + "/SitePages/editrequest.aspx?XmlLocation=" + site.Url + "/Requests/" + SPEncode.UrlEncode(listItems[0].Title) + "&Source=" + SPEncode.UrlEncode(site.Url + "/default.aspx");

}

if (listItems.Count > 1)

{

try

{

if (Request.QueryString["Title"].ToString() != "")

{

redirectUrl = site.Url + "/SitePages/editrequest.aspx?XmlLocation=" + site.Url + "/Requests/" + Request.QueryString["Title"] + "&Source=" + SPEncode.UrlEncode(site.Url + "/default.aspx");

}

}

catch (System.ArgumentOutOfRangeException)

{

//no Title in QueryString, just continue to display all items

redirectUrl = site.Url + "/Requests/Forms/MyItems.aspx";

}

catch (Exception ex)

{

//no Title in QueryString, just continue to display all items

redirectUrl = site.Url + "/Requests/Forms/MyItems.aspx";

}

}

}

catch (SPException spe)

{

System.Diagnostics.Debug.Print(spe.Message);

}

//redirect to the correct page for the number of requests

SPUtility.Redirect(redirectUrl, SPRedirectFlags.CheckUrl, HttpContext.Current);

}


実装されたその他の重要な機能

このソリューションには、InfoPath のデータ接続や SharePoint Designer のユーザー設定のアクションで使用される、再利用可能な Web サービスのプロビジョニングも含まれています。このため、サイト デザイナーは、InfoPath を使用して洗練されたフォームを設計する方法を知っておく必要があります。

Web サービスの機能には、次のものがあります。

  1. ログインしたユーザーに基づいて、ユーザー プロファイル情報をフォームに事前に設定するために AD に接続する。
  2. SharePoint グループを取得する (利用できる場合) - ブラウザー対応のフォームで "ロール ベース" の機能をシミュレートするために使用されます。
  3. リスト ベースのデータのフィルタリングを連鎖処理する - 親子関係で関連付けられているリスト データをユーザーが使用できるようにします (たとえば、"State" (州) のドロップ ダウンでは、"City" (市) のドロップ ダウンのフィルタリングが自動的に行われます)。

SharePoint のユーザー設定アクションに、SharePoint Designer の新しいユーザー設定アクション (実行時の承認者) が追加されました。これにより、実行時に承認者の一覧が提示される SharePoint 承認ワークフローが提供されます。

フォームは Active Directory からの情報を使用して事前に設定されています。

ユーザーはドロップ ダウン リストで項目を選択でき、他のフィールドはその選択に基づいて更新されます。

フォームで親子関係を表示できます。

図 2 - サービス要求の作成/編集例 

図 2 - サービス要求の作成/編集例

これらのサービスを簡素化する際に、いくつか重要な教訓を得ました。Kirk は、匿名アクセスで Web サービスにアクセスして現在のユーザーと連携した動作を行おうとしたときに発見がありました。プロジェクトにおいて Windows SharePoint Services 3.0 でホストされた Web サービスの登録についても多くの教訓があり、Pete はこの問題への対処について、引き続きブログに投稿しています。また、一部の SharePoint Web サービスの呼び出しでは、入力/出力パラメーターに対して適切に定義されたスキーマが存在せず、また、入力/出力スキーマが InfoPath などのツールで簡単には実行できないため、簡素化した Web サービスのクラスを作成しました。

private SPList GetList(SPWeb site, string listName)

{

// Get the list

SPList list = null;

try

{

list = site.Lists[listName];

}

catch (Exception ex)

{

throw new Exception(String.Format("List [{0}] does not exist within site [{1}].", listName, site.Url), ex);

}

return list;

}

private List<ListItem> ExecuteQuery(SPList list, SPQuery spQuery, string fields, bool unique)

{

// Run the query

SPListItemCollection items = null;

try

{

items = list.GetItems(spQuery);

}

catch (Exception ex)

{

throw new Exception("Unable to execute query.", ex);

}

// Turn the output into our format

List<ListItem> response = new List<ListItem>();

Dictionary<String, String> uniqueItems = new Dictionary<String, String>();

foreach (SPListItem item in items)

{

StringBuilder uniqueSb = new StringBuilder();

// Populate a response item

ListItem responseItem = new ListItem();

responseItem.ID = item.ID;

responseItem.Title = item.Title;

responseItem.Fields = new List<Field>();

// Populate the fields for the response

foreach (string field in fields.Split(','))

{

string fieldName = field.Trim();

if (!item.Fields.ContainsField(fieldName))

{

throw new Exception(String.Format("Field [{0}] does not exist within list [{1}].", fieldName, list.Title));

}

Field responseField = new Field();

responseField.Name = fieldName;

object fieldValue = item[fieldName];

responseField.Value = (fieldValue != null ? fieldValue.ToString() : String.Empty);

responseItem.Fields.Add(responseField);

// Keep track of a unique key if we care about uniqueness

if (unique)

{

uniqueSb.Append(responseField.Value).Append('\0');

}

}

// Include the list item in the responses

// But don't include it if the user requested unique values and this item is not unique

if (!unique)

{

response.Add(responseItem);

}

else

{

string uniqueKey = uniqueSb.ToString();

if (!uniqueItems.ContainsKey(uniqueKey))

{

response.Add(responseItem);

uniqueItems.Add(uniqueKey, null);

}

}

}

return response;

}

リスト ベースの構成

サイトの管理を簡略化するために、構成はサイト管理者のみがアクセスできる SharePoint リスト内に格納されます。構成パラメーターは名前と値のペアとして格納され、サイト管理者は使い慣れた SharePoint インターフェイスを通して構成データに容易にアクセスできます。

図 3 - サービス要求アプリケーションの構成

図 3 - サービス要求アプリケーションの構成

まとめ

このソリューションの利点は、コードの作成が不要で、多くの目的に合わせて構成できるエンタープライズ クラスのサービス要求アプリケーションであることです。このアプリケーションには、フォーム名の自動生成、フォームとの連携動作のプロセスの簡素化など、多くの重要なユーザビリティにおける強化点があります。InfoPath を使用して簡単にアプリケーション用のフォームを構築でき、Active Directory からの情報の事前設定、SharePoint リストのデータに基づいたフォームの構築など、使用できる多くの重要なサービスがあります。アプリケーションの構成情報は、SharePoint リストに格納され、簡単、安全にアクセスできます。

このプロジェクトのチーム メンバー

このプロジェクトに参加した主なチーム メンバーは、Pete Skelly、Eric Bowden、Kirk Liemohn、Chris Edwards、Jerry Rasmussen です。このプロジェクトの概念を実現させるために熱心に働きかけていただいた、Microsoft の Donna Hodges 氏に謝意を表します。最後に、業務上の連絡窓口として、ビジネス要件の特定を支援し、業務上の問題を効果的に解決するために必要なリソースをクライアントおよび Microsoft から引き出すことに尽力していただいた、Microsoft の Kern Sutton 氏に謝意を表します。

執筆者について

Pete Skelly - Pete は ThreeWill のシニア コンサルタントです。Microsoft .NET を使用した MCSD、および SharePoint Services 3.0 アプリケーション開発の MCTS として認定を受けていると共に、Certified ScrumMaster (認定スクラムマスター) でもあります。Pete はゴルフを趣味以上のものにしたいと考えていますが、2 人の息子と遊ぶこととプレイ代のために思いどおりにいきません。

Eric Bowden - Eric は ThreeWill のシニア コンサルタントです。趣味のランニング、キャンプ、家族との野外活動、さらに、理想的な通勤時間を楽しんでいます。'Eric は MCSD の認定も受けていますが、それに止まらず、実際には、たいへんな SharePoint 開発者のスキルを持ったプログラマです。

Danny Ryan - Danny は ThreeWill の共同創業者の 1 人で、顧客と SharePoint によるソリューションの構築に取り組んでいるとき以外は、家で 2 人の小さな娘と遊ぶことを楽しみにしています。Danny は、"SharePoint for the Enterprise" という月刊のニュースレターを執筆しています。このニュースレターでは、"エンタープライズ クラス" の SharePoint アプリケーションの効果的な構築に関するトピックを取り上げています (http://www.threewill.com/newsletter/)。

Published Friday, November 14, 2008 2:21 PM by sptblog

これは、ローカライズされたブログ投稿です。原文の記事は、http://blogs.msdn.com/sharepoint/archive/2008/11/14/how-we-did-it-automating-service-requests-using-infopath-forms-services.aspx をご覧ください。

開発内容: MOSS 2007 を使用した Microsoft の社内イントラネット ポータルのニュース ワークベンチの構築

Enterprise Content Management Team Blog (エンタープライズ コンテンツ管理チームのブログ) からのクロスポストです。

皆さん、こんにちは。私は Sean Squires と申します。Microsoft IT Information Services グループでプログラム マネージャーをしています。私のグループは、Microsoft Office SharePoint Server (MOSS) が稼働する多くの内部ポータル資産に対して、技術設計およびソリューション作成を推進する役割を担っています。また、製品グループと密接に連携して、新機能の評価、および製品の機能を拡張する革新的な方法の提示も行っています。最近このブログに投稿した George Perantatos が、最新リリースの多くの新しい発行機能を活用した、Microsoft の主要な社内情報ポータルである Microsoft Web (MSW) のニュース ワークベンチ ソリューションの作成方法について、皆さんに公開してはどうかと私に勧めてくれました。この 1 年間の Microsoft のカンファレンスでのスピーチをお聞きになっている方は、このソリューションの多様なコンポーネントの一部について簡単に紹介しているので既にご存じかもしれませんが、全体的な概要についてはまだ説明していません。ぜひ、このブログをお読みください。

業務上の課題

新しいワークベンチ ソリューションは、当初、SharePoint Portal Server 2003 から MOSS 2007 への MSW ポータルの再設計中は、サイトに公開されるか電子メールで購読者に送信されるニュース コンテンツの探索、選択、および配布を効率的に管理するという課題に対処することを目指していました。以前のモデルでは、手動による作業が多いため、管理が難しく、ユーザーのエラーが頻発していました。ニュースの公開プロセスを見直す際には、プロセスを合理化し、可能な限り手順を自動化し、当然のことながら、MOSS の新しいコンテンツ管理機能をできるだけ多く利用する方法を見い出すことが重要でした。

ソリューションへの取り組み

最初に取り組んだのは、日常の発行サイクル (選択したニュース項目の検索、タグ付け、編集、および配布を複数のターゲットに対して行う) に関連付けられたさまざまなタスクを編集者が単一の場所から容易に実行できるワークベンチ プラットフォームを構築することでした。いくつかのカスタム コンポーネントの作成が必要でしたが、設計の大部分では、新機能、検索、コンテンツ タイプ、情報管理ポリシー、および Content Query Web パーツ (CQWP) によるデータのロールアップを活用しました。

ワークベンチ自体は、2 つのリストと、ページ ライブラリのいくつかの検索とプレビューのページから成る MSW サイト コレクション内の非表示の発行サブサイトです。新しい項目は、最初に、外部のベンダー フィードからスケジュールに基づいてソース リストにインポートされます。次に、検索できるインデックスを編集者に提供するためにクロールされます。ポータルの訪問者が検索で無関係なニュースを取得することがないように、このリストのアクセス許可は編集者に固定されています。

編集者にはカスタムの高度な検索ページがあり、このシード リストに対して検索の調整を行うことができます。クエリから返された項目は、1 つ以上の配布チャンネルに対して選択できます。次に、これらの候補は、追加の編集や、カテゴリおよび並べ替え順などの属性の指定ができるように、別のリストにコピーされます (これについては、次回の投稿で詳細に説明する予定です)。

項目は、いったん編集すると、Content Query Web パーツを使用して、プレビュー表示したり SharePoint ページに発行できます。私のグループでは、同じページ モデルを使用して、最初の実行後、所定の時間の間、アーカイブ ページの階層を表示させました。項目をパッケージ化し、カスタムのメーラー Web パーツを使用して特定の購読者ベースに電子メール経由で送信することもできます。ポータルやニュースレターとして発行されたニュース項目は、最終的には、標準のポリシー管理機能を使用して、リストからフラッシュされます。

次の図は、設計の概要図です。プロセス内の多様なコンポーネントを示しています。

image

  • 手順 1: コンテンツの使用
  • 手順 2: コンテンツの探索
  • 手順 3: コンテンツの選択/編集
  • 手順 4: コンテンツのプレビュー表示
  • 手順 5: コンテンツの配布 - ポータル (CQWP を使用) および外部
  • RSS について
  • 現在の状況
  • 残された課題
  • 今後の活動
Published Tuesday, May 13, 2008 3:25 AM by sptblog

これは、ローカライズされたブログ投稿です。原文の記事は、http://blogs.msdn.com/sharepoint/archive/2008/05/13/how-we-did-it-building-a-news-workbench-on-moss-2007-for-microsoft-s-corporate-intranet-portal.aspx をご覧ください。

開発内容: NewsGator Social Sites 2.0 - SharePoint プラットフォーム上で拡張されたソーシャル コンピューティング

NewsGator Social Sites は、SharePoint プラットフォーム、および NewsGator Enterprise Server によって提供されるソーシャル コンピューティング サービスを活用することで、ソーシャル フィードバック (つまり、ブックマークの設定、タグ付け、コメントの設定など)、ソーシャル ネットワーク、およびコミュニティ機能を、Microsoft Office SharePoint Server 2007 に追加します。SharePoint は、ソーシャル コンピューティング アプリケーション開発の基盤であり、Web パーツや Web サービスによって容易に拡張できます。

Social Sites 製品が開発された経緯の技術的な詳細を説明する前に、これから解決しようとしている業務上の課題について説明したいと思います。ここでの課題には、次のようなものがあります。

  • 情報の集積、探索、使用、およびソーシャル フィードバックに対して統一されたユーザー エクスペリエンスを提供する。
  • 知識の獲得と共有に加えて、アドホック グループ作業を促進する、組織をまたがったオンライン コミュニティを有効にする。
  • ユーザーとそのアクティビティに関する追加の情報を含めるように SharePoint ユーザー プロファイル システムを拡張して、人と専門知識の検索を強化する。
  • SharePoint のユーザー インターフェイスを、より動的で直観的なユーザー エクスペリエンスを提供できるように最適化する。

これらの問題を解決するために、弊社の開発者が、SharePoint ランタイムを拡張して、データを AJAX 対応の Web パーツで使用できるようにする XML エンドポイントの豊富なセットを実装しました。また、AJAX 対応の Web サービスのセットと、これらの呼び出しを抽象化するための JavaScript ライブラリを実装しました。最後に、ASP.NET AJAX で構築された一般的な NewsGator スクリプト ライブラリとシンプルな XSLT レンダリングを使用する、オープン ソースの SharePoint AJAX Toolkit を使用したライトウェイト Web パーツですべてを実装しました。

組織をまたがったコミュニティを作成するために、同じ AJAX コンポーネントを使用しましたが、それらをコミュティ指向のバンドルにパッケージ化し、NewsGator エンタープライズ フィード サーバーに統合するテンプレートのセットとコミュニティ メタデータで、SharePoint チーム サイト モデルを拡張しました。また、SharePoint のセキュリティ モデルも拡張し、独自のセキュリティを管理できるパブリック コミュニティが受け入れられるようにしました。セキュリティおよびグループ作業のニーズは組織によって異なる場合があるため、機能はすべて、組織のガバナンス ポリシーに従って展開、有効化、および制御できる SharePoint "機能" として実装しました。このことは、弊社独自のイントラネットで採用しているような自由アクセス型のモデルでも、金融サービス業界の弊社の一部の顧客で採用しているようなアクセス制限型のモデルでも、またはその中間のモデルであっても、関係ありません。

タグ付け、閲覧の状態、および関連

SharePoint のコンテンツ レンダリング レイヤーの上に、タグ付け、閲覧の状態、および関連メタデータを追加する、配信ベースの拡張レイヤーを実装しました。閲覧の状態を全体的に有効にすることで、ユーザーは項目を閲覧済みとして閉じることを選択でき、常に最新の情報のストリームを SharePoint で表示できます。RSS API を使用して、豊富なメタデータ レイヤーを、http://sharepoint/site1/list.rss?feed=announcements のように、サイト レベルで利用できます。この Web ページでは、閲覧の状態、関連、およびタグ付けを含む追加された NewsGator メタデータを使用した、Announcements リストに最適化されたバージョンの RSS ストリームが返されます。SharePoint に組み込まれている RSS サポートと弊社独自の Web サービスとのシームレスな統合に基づいて、RSS をコア プラットフォーム コンポーネントとして選択しました。Web パーツでは、Announcements RSS フィードは、次のようなものになります。

また、タグ付けと閲覧の状態のための AJAX 対応 API も追加しました。これにより、Web サービスとして利用することと、サポートされている JavaScript ライブラリを介して利用することの両方ができます。ビューは SharePoint AJAX Toolkit を使用して XSLT でレンダリングされるので、JavaScript ライブラリは、ビューとしてユーザー インターフェイスに組み込んでいます。また、JavaScript API を使用してカスタム ビューに組み込むこともできます。SharePoint リスト ビューの AJAX アーキテクチャでは、SharePoint からコンテンツを取得し、メタデータをそのコンテンツに貼り付け、それを AJAX フレームワークを通してクライアントに返します。

今回作成した Web パーツには若干のコードが含まれていますが、基本 Web パーツでは、SharePoint AJAX Toolkit の "XmlWebPart" が拡張されており、XML エンドポイント、XSLT エンドポイント (クライアント側の変換に使用)、および NewsGator の Social Sites API の JavaScript ライブラリが含まれているだけです。SharePoint AJAX Toolkit は、開発者にとって、AJAX Web パーツのプログラミングの簡略化に大いに役立ちます。開発者は、Web パーツに、XML エンドポイントと XSLT ソース、任意のカスタム JavaScript を指定できますが、それだけで、Web パーツは残りの処理を行います。今回の API に基づいてカスタムの AJAX Web パーツを実装する場合は、次のコードを使用できます。

using System;

using System.Web.UI;

using System.Web.UI.WebControls.WebParts;

using Microsoft.SharePoint;

 

namespace Litware.NGWebParts

{

    /// <summary>

    /// An example web part

    /// </summary>

    public class SocialAnnouncentsWebPart : SharePoint.Ajax.WebParts.XmlWebPart

    {

        protected override void CreateChildControls()

        {

            base.CreateChildControls();

 

            // Include the NewsGator socialsites runtime-- includes the Social Sites JS files:

            this.Controls.Add(

                new NewsGator.Enterprise.SharePoint.WebParts.ClientRuntimeControl()

                );

           

            // Add the Litware Social script library:

            this.AtlasScriptManager.Scripts.Add(

                new ScriptReference("/_layouts/Litware/LitwareSocial.js"));

 

        }

        /// <summary>

        /// Use this to set the XML/XSLT paths, typically from Web Part properties.

        /// </summary>

        protected override void OnPreRender(EventArgs e)

        {

            base.OnPreRender(e);

            this.XmlUrl = SPContext.Current.Web.Url +  "/list.rxx?feed=announcements";

            // Usee a custom XSLT

            this.XsltUrl = "/_layouts/Litware/XSLT/announcements.xslt";

        }

    }

}

これと同じアプローチを使用して、XML として公開される多数の NewsGator Social Sites データ オブジェクトのカスタム バージョンを作成できます。これには、ソーシャル プロファイル (SharePoint ユーザー プロファイルの拡張)、配信購読リスト、ユーザーがメンバーとして登録されているコミュニティ、タグ クラウド、SharePoint コンテンツまたは他の RSS 対応のデータ ソースからの配信可能なフィードなどが含まれます。セキュリティは、SharePoint および NewsGator Enterprise Server で実行される NewsGator コード全体に実装されます。NewsGator Enterprise Server は、RSS、ATOMOPML、およびさまざまなデータ ソースのタグ付けを提供するフィード サーバーです。今回作成した API に含まれる XML フィードには、購読リスト、SharePoint リスト フィード、閲覧リスト (SharePoint サイト レベルを対象とした内部/外部フィードのグループで、OPML または単一のフィードの集合から利用できます)、仕事仲間、SharePoint ユーザー プロファイル データ、サイト フィード (SharePoint の配信可能なフィード用の OPML)、傾向データなどがあり、それらのすべてが多様な Web パーツおよび Social Sites の AJAX コントロールに実装されています。チーム メンバーお気に入りの "隠し" エンドポイントの 1 つに、Lawrence Liu 氏の OPML があります。これは、世界中の SharePoint コミュニティについて同氏が管理するフィードのリストです。この OPML は http://services.newsgator.com/sharepoint/opml で公開されていますが、ローカル エンドポイント "ll.opml.nges" として、Social Sites 経由の SharePoint コンテキスト内でも利用できます。

作成したサービス エンドポイントはすべて、SharePoint のサイト コンテキストおよびセキュリティと統合するために、また Microsoft AJAX Library からの AJAX 統合を有効にするために、SharePoint アプリケーション内で実行します。今回、SharePoint AJAX Toolkit をユーザー インターフェイス ライブラリとして使用しているので、レンダリング/プレゼンテーション ロジックの大部分を一般的な XSLT ファイルで実装および再利用できます。これにより、SharePoint の API を利用するバックエンド サービスを作成する際に、いっそう開発作業に集中することができます。これは、新しいエンドポイントを作成して、最小限のスクリプト ライブラリを記述するだけで、新しい機能を迅速に展開できることにつながります。たとえば、Social Sites 2.0 に付属する AJAX フォーラム コンポーネントは、バックエンド サービスとして SharePoint ディスカッション リストを利用します。 SharePoint は、その API により、プラットフォーム上に容易にカスタム ソリューションを統合できる一方で、セキュリティ コンテキスト、サイト コンテキスト、およびデータ記憶域を提供することで、カスタム アプリケーションの優れた基盤となります。

NewsGator Enterprise Server には、市販されている中でも最高のフィード リーダーが含まれています。シームレスに統合されたユーザー エクスペリエンスを提供するために、フィード リーダーを SharePoint に追加することは意味のあることです。そこで、Social Sites 2.0 では、ユーザーのすべてのフィード購読を SharePoint 内の単一のビューに表示させる My Feeds リーダーを導入するつもりです。次に、スクリーンショットを示します。

リーダーとの統合は、SharePoint AJAX Toolkit および既に公開済みの API を活用することで簡単に行うことができました。単に、ユーザーの購読や SharePoint サイトのフィードに含まれるフィード ソースの OPML を変換し、JavaScript API メソッドの SPNGES.NewsReader.Read(xmlUrl) を使用してリーダーをインスタンス化するだけです。リーダーは以下のコンポーネントで実装しました。

  • "機能" として展開される SharePoint ASPX ページ
  • フィード リストと RSS コンテンツ ビューを有効にするための、既存の Social Sites OPML と RSS API エンドポイント
  • ページング、画像のサイズ変更、およびソーシャル メタデータ用のカスタム JavaScript

SharePoint サイトは、人々が集まって、プロジェクトや活動など多くのことを共同で作業するための絶好の方法です。Social Sites でオンライン コミュニティの実装を考えたとき、SharePoint チーム サイトの拡張はまさに当を得たものでした。コミュニティを作成するために、チーム サイトをコミュニティ メタデータで拡張し、メンバーシップを NewsGator Enterprise Server と統合しました。これにより、コミュニティのタグ付け、ソーシャル ブックマークの設定、およびフィード項目の対話操作を通じたグループの共同作業ができます。また、コミュニティの対話操作のためにいくつかのカスタム Web サービスを統合し、それらを JavaScript API で利用できるようにしました。

実装の技術的な説明に入る前に、NewsGator で試用している Social Sites のコミュニティのスクリーンショットを、次に示します。

コミュニティ機能を実装するために、サイト定義に含めるかプログラムでアクセスすることができる "機能" 内にページを作成することにしました。これにより、コミュニティ内のすべてのタブ ([Overview] (概要)、[Discussions] (ディスカッション)、[Feeds] (フィード)、[Social Bookmarks] (ソーシャル ブックマーク)、[Members] (メンバー)、および [Documents] (ドキュメント)) は、既存の API からプルされる AJAX コンポーネントのセットを統合したページになりました。Visual Studio での CommunityPages 開発プロジェクトの構造は、下図のようになります。また、機能イベント レシーバーも使用しており、サーバー上でコミュニティの処理を行うことができます。

また、弊社の顧客へのコミュニティ機能の拡張についても検討しました。機能をサイト定義に関連付けることはできますが、機能を他の機能に関連付けることは、標準機能ではできません。この問題に対処して顧客がコミュニティ機能を拡張できるようにするための手法として、"ホチキス止め機能" の使用を思い付きました。この手法により、顧客が弊社の基本機能の上に追加するカスタムの機能レシーバーを実装することができます。これを行うために、弊社の機能に ".Handler" 拡張子を付加した機能名を持つ機能を探しました。この機能を使用すると、ページ、Web パーツ、リスト、または機能レシーバーを通してアクセスできる任意のオブジェクトの追加など、顧客がコミュニティ機能に対して行いたいことができます。次に、弊社で使用したホチキス止め機能のコードを示します。独自の SharePoint アプリケーションに自由に活用してください。

using System;

using Microsoft.SharePoint;

using Microsoft.SharePoint.Administration;

 

namespace NewsGator.Enterprise.SharePoint.Configuration

{

    /// <summary>

    /// Handles NewsGator initialization of the community creation.

    /// </summary>

    /// <remarks>

    /// </remarks>

    public class CommunityCreationFeatureReceiver : SPFeatureReceiver

    {

        public override void FeatureDeactivating(SPFeatureReceiverProperties properties) { }

        public override void FeatureInstalled(SPFeatureReceiverProperties properties) { }

        public override void FeatureUninstalling(SPFeatureReceiverProperties properties) { }

        public static Guid? CommunityReceiverGuid { get; set; }       

 

        /// <summary>

        /// Adds an extensibility hook to the community creation feature.

        /// </summary>

        /// <param name="properties">

        /// SPFeatureReceiverProperties represents the feature activation scope.

        /// Parent will return the Web

        /// </param>

        public override void FeatureActivated(SPFeatureReceiverProperties properties)

        {

            using (SPWeb web = properties.Feature.Parent as SPWeb)

            {

                if (CommunityCreationFeatureReceiver.IsCustom)

                {

                    web.Features.Add(CommunityReceiverGuid.Value);

                }

            }

        }

 

        private static object _isCustomizedLocker = new object();

        private static bool? isCustomized = null;

        /// <summary>

        /// Determines if there is a customization feature for this feature.

        /// </summary>

        /// <returns>true if a customization feature is installed, otherwise false</returns>

        public static bool IsCustom

        {

            get

            {

                if (CommunityReceiverGuid.HasValue

                    && CommunityReceiverGuid != Guid.Empty)

                    return true;

                else

                {

                    lock (_isCustomizedLocker)

                    {

                        try

                        {

                            SPFeatureDefinition customFeature =

                                SPFarm.Local.FeatureDefinitions[
                                   
"NewsGator.CommunityPages.Handler"];

                            if (customFeature != null)

                            {

                                CommunityReceiverGuid = customFeature.Id;

                                isCustomized = true;

                            }

                            else

                            {

                                isCustomized = false;

                                ReceiverGuid = Guid.Empty;

                            }                        

                        catch { isCustomized = false; ReceiverGuid = Guid.Empty;}

                    }

                    return isCustomized.Value;

                }

            }

        }       

    }

}

SharePoint プラットフォームとサイト フレームワーク、NewsGator Enterprise Server、AJAX アプリケーションを対象としたカスタム XML API、Microsoft AJAX Library と弊社独自の AJAX フレームワーク拡張機能、これらのコンポーネントを活用することで、エンタープライズ向けの非常に効果的なソーシャル ソフトウェア アプリケーションを構築することができました。

SharePoint AJAX Toolkit の詳細については、http://www.codeplex.com/sharepointajax を参照してください。このツールキットは、NewsGator 製品ではなく、中立的な立場で管理されるオープン ソース プロジェクトであることに注意してください。

NewsGator Social Sites の詳細については、http://www.newsgator.com/Business/SocialSites を参照してください。

SharePoint プラットフォーム上でのソーシャル ソフトウェアの開発に興味がある場合に利用できるように、NewsGator Social Sites 開発チームが SharePoint プラットフォーム上でのソーシャル ソフトウェアを記述する際に準拠した、簡単なガイドラインの一覧を次に示します。

  1. SharePoint サイトのアーキテクチャを採用します。SharePoint のサイト モデルにより、Web アプリケーションのソーシャル コンテキストが提供されます。
  2. SharePoint "機能" を使用します。ソフトウェアが提供するすべての機能をすべての顧客が必要とするとは限らず、また、同様に、すべての顧客がその機能を展開するとは限りません。SharePoint 機能を利用すると、顧客は、適切と考える形でソリューションを実装することができます。
  3. SharePoint のユーザー プロファイル データと個人用サイトの機能を使用します。これらは、ユーザーを中心にしたコンテンツやアクティビティのリッチなビューや便利な拡張ポイントを提供します。
  4. 可能な限り、RSS、ATOM、OPML など、一般的な XML ベースのデータ形式を使用します。これにより、カスタム開発による拡張性が得られると共に、サード パーティのサーバーやコンポーネントと緩やかに統合できます。
  5. AJAX 機能を使用して、対話性および効率性の高いユーザー エクスペリエンスを提供します。

Daniel Larson は、NewsGator でソフトウェアを担当しています。有名な SharePoint 開発者向けの書籍『Inside Microsoft Windows SharePoint Services』の共著者で、SharePoint MVP として精力的に活動しています。今後の活動については、Dan のブログ (daniellarson.spaces.live.com) をご覧ください。

Ashley Roach は、NewsGator でプロダクト マネージャーをしています。ワインについては一家言あります。今後の活動については、Ashley のブログ (apr.vox.com) をご覧ください。

これは、ローカライズされたブログ投稿です。原文の記事は、http://blogs.msdn.com/sharepoint/archive/2008/06/08/how-we-did-it-newsgator-social-sites-2-0-enhanced-social-computing-on-the-sharepoint-platform.aspx をご覧ください。

MOSS 2007 による Live Earth のサポート - Conservation International (コンサベーション インターナショナル) のパブリック Web サイト - 開発内容 (パート 1/2)

約 1 か月前に、Live Earth で 24 時間、7 大陸にわたる一連のコンサートが開かれたとき、このイベントに合わせてコンサベーション インターナショナル (CI) の Web サイトが開設されましたが、このサイトで MOSS 2007 の機能が利用されていることを知り、非常にうれしく思いました。CI は米国を拠点とする国際組織であり、科学、経済、政策、および住民参加の分野で革新を起こすことで、地球上の多様な動植物が生息する豊かな地域を保護しています。CI は Microsoft と共同のプロジェクトを開始し、Web サイトの既存のコンテンツをすべて SharePoint に移行することにしました。このプロジェクトには、マイクロソフト認定ゴールド パートナーである Portal Solutions が、ソリューションを実装する主要な技術契約業者として参加しました。2 部構成のパート 1 となるこの記事では、2 つのチーム (1 つは Portal Solutions、もう 1 つはやはりマイクロソフト認定ゴールド パートナーである Applied Information Sciences) が行った作業について説明します。

<Lawrence />

 

概要

このプロジェクトの主要な目的は、複数の言語で書かれ、いくつかの異なる Web ドメイン名に分散していた Web サイトの既存のコンテンツをすべて、共通の SharePoint サーバー ファームに移行して統合することでした。プロジェクト発足の最初の原動力となったのは、2007 年 7 月 7 日に行われた Live Earth コンサートでした。このコンサートで、Microsoft は主要スポンサーとなり、MSN の Live Earth Web サイトから Conservation.org にトラフィックをリンクするという大きな計画を持っていました。Live Earth イベントの約 3 か月前に、CI のすべてのコンテンツの移行は難しいことが明らかになったので、プロジェクトの範囲はコンサベーション インターナショナルの宣伝用 "ゲートウェイ" サイト (次のスクリーンショットを参照) の開設に変更されました。これは、MSN サイトから誘導されたユーザーを引き付けるだけの視覚的な魅力があり、豊富なコンテンツを備えたものになるように計画しました。

長期的には、SharePoint テクノロジーに投資して Web コンテンツ管理 (WCM) ソリューションを実装する計画でしたが、宣伝用サイトでは本格的なユーザー エクスペリエンス面の設計が数多く必要となるので、ニューヨーク市にある設計会社である Atmosphere BBDO がプロジェクトの主要なメンバーとなりました。

Conservation.org Web サイトのユーザー エクスペリエンスの設計は、SharePoint の既定の外観と比較して非常に先鋭的にすることになったので、SharePoint プラットフォーム上で多くのカスタム開発が必要になりました。これらの技術コンポーネントには、SharePoint オブジェクト モデル API 上で呼び出されるカスタマイズされたコンポーネント、Silverlight ベースの Carbon Calculator アプリケーション (Applied Information Sciences によって実装)、Flash ベースのユーザー インターフェイス コンポーネント、および専門メンバーシップ認証と XML コンテンツ サービス用の数多くの ASP.NET 2.0 ベースのプロバイダー コンポーネントが含まれます。

BiodiversityHotspots.org の Web サイト

Live Earth イベントでは、地球上で環境破壊が進んでいる地域の保護をテーマにしました。コンサベーション インターナショナルでは、このような地域を一般的に "hotspots (ホットスポット)" と呼んでいます。Biodiversity Hotspots Web サイトには、地球全体のホットスポットや絶滅の危機に瀕している種の多くに関する詳細が記載されているので、Portal Solutions では、イベントの前に、この Web サイトから SharePoint にコンテンツを移行することが必要不可欠でした。
 

1 つの動的なアプリケーションを除いて、Biodiversity Hotspots Web サイトの既存のコンテンツは、すべて従来のコンテンツ管理システムで管理されていました。MOSS 2007 には、すぐに使用できる Web コンテンツ管理機能が用意されているので、ポータル ソリューション チームはこの機能を利用して、従来のサイトとほとんど同一のコピーを作成し、Migration Manager (Metalogix のコンテンツ移行ツール) を使用して、既存のコンテンツを SharePoint に移行しました。

Portal Solutions はサイト バナーを実装しました。これには、ナビゲーション エリアの一部、およびサイトのマスター ページ ギャラリーに保存されているマスター ページ内のサイト フッターが含まれます。ページそのものは、従来のサイトにある Web ページの同じページ レイアウトをサポートするように設計された多くのページ テンプレートに基づいています。既存のコンテンツは、従来のコンテンツ管理システム内に正しい XML 形式で保存されていたので、移行マネージャー ツールを使用したコンテンツ セクションのクエリーでは、XPATH クエリーを作成するだけで済みました。一部のページは移行後にレイアウトを調整しましたが、大部分のサイト ページは移行マネージャーが自動的に処理しました。

Conservation.org の Web サイト

次の図に、Conservation.org の Web サイトの実装と、SharePoint プラットフォームとのやり取りに関連する大部分のモジュラー コンポーネントを示します。
 

ソリューションの中心となるのは、ASP.NET 2.0 です。SharePoint 2007 は完全にこのテクノロジー レイヤー上に構築されるので、Portal Solutions のエンジニアは、カスタム コンポーネント、ハンドラー、モジュール、およびサービスを SharePoint を中心にして構築し、動的なコンテンツへのアクセスが必要なときは、SharePoint オブジェクト モデルへの呼び出しを組み合わせました。

ユーザー インターフェイス

MOSS 2007 はソリューションのバックボーンであり、リストおよびカスタム コンテンツ タイプを通じてメタデータを提供します。このメタデータは、ユーザー インターフェイスを駆動し、CI コンテンツ マネージャーがユーザー エクスペリエンスのテキスト、グラフィック、オーディオ、およびときどき発生する動作を調整できるようにします。SharePoint は、Silverlight ベースの Carbon Calculator に対するバックエンド サポートも提供します。Silverlight は Flash と同じようにクライアント ブラウザー内で動作するので、SharePoint からサーバー データへのアクセスでは、セキュリティで保護された Web サービスを通じてこのデータが公開されます。

コンサベーション インターナショナルは、宣伝用サイトの主要な UI を Flash として実装することにしました。これは、主要なシェル SWF ファイルと各ページ用の外部 SWF ファイルで構成されます。プロジェクトが今後進展するにつれて、この設計は変更される可能性があります。これは、組織の長期的な SharePoint ベースの WCM 戦略の一環として、Web サイトのコンテンツがページ コンテンツの種類に基づいてページ ドキュメント ライブラリに配置されるためです。

XML Data Service は、Atmosphere BBDO の Flash 開発者によって指定されたスキーマにおいて、SharePoint リストに含まれているメタデータを XML として公開することで、Flash ベースのユーザー インターフェイスに動的なデータを挿入する HTTP ハンドラーです。XML Data Service ハンドラーは、複数のサイト ラベル バリエーションをサポートしており、将来 CI が複数言語のコンテンツを扱う必要が生じたときに対処できるように設計されています。

近い将来に、コンサベーション インターナショナルは従来のすべてのコンテンツについて、SharePoint への移行を開始します。この移行の間、新しい Web サイトでは、検索エンジンおよびユーザーのブラウザー ブックマークに対して 404 エラーを返すことなく、従来のリンクを処理する機構が必要です。ASP.NET HTTP モジュールとして存在する URL リダイレクト モジュールは、有効なページ/リストに関して SharePoint オブジェクト モデルに問い合わせ、新しいプラットフォームで見つからなかったページに関しては、従来のコンテンツをホストする別の Web サイトにリダイレクトすることで、この機能を実装します。

認証

コンサベーション インターナショナルは、米国在住の人を対象に、くじのプロモーションをときどき行いたいと考えています。Portal Solutions では、公開 ISO リストの IP アドレスを参照して、要求元 IP アドレスの国を特定する高機能な "バイナリ ツリー" アルゴリズムを実装しました。IP2Country HTTP モジュールが、このアルゴリズムのホストと共に、公開 FTP サーバーからの更新情報のダウンロード、および高速な検索のための IP アドレスと国のマッピング リストのキャッシュを行います。

プロジェクトの計画段階では、コンサベーション インターナショナルは新しい寄付フォーム、くじ、およびユーザー購読のサポートを、現在のパートナーである Convio がによっ行うように要求しました。この要件に関する 1 つの課題は、ユーザー プロファイルの更新情報を維持し、それを SharePoint プロファイルと同期することでした。ワークフローの要件では、新規ユーザーが Web サイト上のフォームを使用してサインアップし、チェック ボックスをオンにしてコンサベーション インターナショナルを購読します。このユーザーは、ユーザー フォーラムなど将来のグループ作業機能についても、登録ユーザーとして SharePoint にアクセスできるようになります。SharePoint は、ユーザー プロファイルとユーザー認証を維持するので、主にニュースレターの購読と寄付に使用される Convio の Web サイトとは異なります。このため、Portal Solutions は、ASP.NET 2.0 メンバーシップ プロバイダー モデルを使用して構築するカスタム メンバーシップ プロバイダーを開発しました。このモデルでは、Convio にあるユーザーの資格情報ストアに対してユーザーが認証されます。これにより、登録済みユーザーに対しては実質的にシングル サインオンが提供され、アカウント/プロファイル情報を同期する必要性が低下しました。ユーザーが Convio システムでパスワードを変更した場合、同じ資格情報を使用して SharePoint のアカウントにアクセスすることができます。

"寄付" 機能

Flash ベースのコンポーネントと Silverlight ベースの Carbon Calculator は、両方とも寄付機能を実装しています。Portal Solutions は、これらの異なるテクノロジーで Convio へのインターフェイスを開発するのではなく、Convio Web サイトに対するユーザー データ送信および認証の一元化されたサービスとして Convio Web サービスを構築しました。コンサベーション インターナショナルが後で Convio から別の購読管理プロバイダーに変更することを希望した場合は、Web サービスを変更するだけで済みます。

バニティー URL

前の図に示されていない追加のコンポーネントに、"バニティー URL コントローラー" モジュールがあります。これは、カスタム ASP.NET HTTP モジュールとして実装されていて、Web サイトの深いリンクに対してフレンドリーな URL を提供します。Flash ベースのコンポーネント内のページへの深いリンクでは、要求するページの URL に、クエリー文字列パラメーターを付加する必要があります。このようなパラメーターは覚えにくく、ユーザーにとって直感的ではありません。バニティー URL コントローラーは、要求されたフレンドリーな URL を、SharePoint によって認識される実際の URL にマップします。

まとめ

Live Earth イベントが終了し、プロジェクトのフェーズ 1.0 に関連したさまざまな組織が Web サイト開設の成功を祝った今、フェーズ 2.0 移行の作業を楽しみしています。CI は引き続き Microsoft のテクノロジーを率先して採用し、Web コンテンツ管理やその他の機能に SharePoint プラットフォームを利用するので、近い将来に Conservation.org およびコンサベーション インターナショナル傘下のその他の Web サイトを訪れると、サイトは強化されていることでしょう。このブログ シリーズのパート 2 では、http://www.biodiversityhotspots.org Web サイト内にホストされた Silverlight ベースの Carbon Calculator アプレット開発のために、Applied Information Sciences が行った作業について説明します。

 

Portal Solutions のコンサベーション インターナショナル チーム
Microsoft のコンサベーション インターナショナル チーム
  • Lamont Harrington – プロジェクト リード/ソリューション アーキテクト

公共部門における Microsoft の開発プラットフォームの進展と適用の最新情報については、Public Sector Developer and Platform Evangelism Team Blog を購読してください。

Published Wednesday, August 08, 2007 2:11 PM by sptblog

これはローカライズされたブログ投稿です。原文の記事は、http://blogs.msdn.com/sharepoint/archive/2007/08/08/moss-2007-supports-live-earth-conservation-international-s-public-web-sites-how-we-did-it-part-1-of-2.aspx をご覧ください。

MOSS をゲームに活用 - Glu Mobile の Web サイト (www.glu.com) - 開発内容 - パート 3/3

今回は、Glu Mobile Web サイトの構築方法について説明する Allin Consulting のゲスト ブログ シリーズのパート 3 とまとめです。まだ、Part 1 (パート 1)Part 2 (パート 2) を読んでいない場合は、そちらにも目を通してください。この記事では、サイトのパフォーマンスを高めるために使用したソフトウェア アーキテクチャと手法について重点的に説明します。ハードウェア アーキテクチャは、3 つの Web フロントエンド、1 つのアプリケーション サーバー、および 2 ノード構成の SQL Server クラスターで構成されるファームです。これはベスト プラクティスに従っているため、この記事では説明しません。堅固なハードウェア アーキテクチャを構築することも重要ですが、それ以上に、プロジェクトの要件を満たすことが重要です。特に、ゲーム サイトの要件がリッチ グラフィック、メディア、およびコンテンツの絞り込みである場合、これらの要件を満たすことは、結果として、軽量のカスタム フレームワークを通じてパフォーマンスを最適化し、良好なユーザー エクスペリエンスを保証することになるとわかりました。

初めに、MOSS 上に構築される一般向けサイトのパフォーマンスに影響する 3 つの処理コンポーネントを分類しましょう。
画像

1 つ目は、アテンダント機能とグループ作業拡張機能をすべて備えた MOSS サーバー、2 つ目はインターネット、3 つ目はクライアント Web ブラウザーです。ここでは、各コンポーネントのパフォーマンスの問題に対応するために実装した手法を分類します。

MOSS サーバー アプリケーション

パフォーマンスに関する最初の問題は、リッチ データとデータの関係の量についてでした。Glu サイトでは、これらのデータを関連付ける必要がありました。ユーザー プロファイルに設定された国、言語、携帯電話会社、および携帯電話機に基づいて、そのユーザーに適切なゲームとコンテンツを絞り込む必要がありました。データベースには、国、携帯電話会社、携帯電話機、およびゲームの組み合わせが約 300,000 組あります。これらのすべての組み合わせについて、データベースの読み取り回数を最小限に抑えることがきわめて重要でした。その解決策として、組み合わせ情報をキャッシュする "アプリケーション" オブジェクトを作成し、IIS アプリケーション コレクション内に配置しました。下の図は、このソリューションの主要なすべてのコンポーネントを示しています。
画像

Glu Application Object

Glu Application Object は、アーキテクチャの中心に配置され、サイトに表示されるすべての MOSS データ (ゲーム、ジャンル、呼び出し音、国、携帯電話会社、携帯電話機など) のキャッシュと、このデータどうしのリンク関係に関するすべての情報のキャッシュが含まれます。アプリケーションが初めて起動されると、キャッシュ データが読み込まれて、すべてのユーザーから使用できるようになります。また、このキャッシュは、新しいゲームやコンテンツが発行されると、必要に応じて、Glu Content Manager によって更新できます (Glu Content Manager とは、SharePoint リストのビューを備えた Web パーツ ページのセットです)。このようなキャッシュが作成されているため、サーバーは、事前にソート済みでリンク済みのデータを操作するだけです。これにより、サーバーは、反復処理の "ビジー状態" から解放され、重要なすべてのデータをメモリ内で使用できるようになるため、高速アクセスが実現します。

Application Object の上に、Part 2 (パーツ 2) で説明したカスタム サーバー コントロールと Web パーツを配置しました。これは、カスタム キャッシュからコンテンツ、コンテンツ参照、および関係を読み出して表示します。Application Object と SharePoint キャッシュ機能と SQL Server キャッシュ機能を組み合わせた結果、サーバー インフラストラクチャから非常に良好な応答時間が得られました。応答時間はインターネット接続によって異なりますが (DSL 以上であれば応答時間はより短縮されます)、サイトのページは 2 ~ 4 秒以内でばらつくこともなく完全に表示されます。待ち時間が最も長くなるのは、メディア トレーラー (携帯電話のグラフィックに埋め込まれアニメーション トレーラー) と、SharePoint ファームとは別のメディア サーバーから提供される Java ゲーム エミュレーターです。

空白を取り除く - インターネット パイプ上でのページ サイズの低減

送信のための工夫として、表示対象の各 HTML ページのサイズを減らし、また、Web ブラウザーで処理する空白の量を減らすために、カスタム空白フィルターを作成しました。ブラウザーでサイトのページのソースを表示すると、次の図のようになります。
画像

ページ サイズが大幅には低減されていないため、むしろ余分なサーバー処理を行っているように思えるかもしれませんが、1 ページあたり平均でサイズが 5 K ほど減少しました。また、クライアント ブラウザーでの表示時間は大幅に (1 ~ 3 秒) 短縮されました。したがって、サーバー上で余分な処理を行うことが少なく、クライアント ブラウザーでの表示時間への影響だけでなく、インターネット トラバーサルへの影響も軽減されました。

JavaScript に起因する負荷を低減 - クライアント ブラウザー

SharePoint のページの負荷のほとんどは JavaScript に関連するものです。一般的なサイトにアクセスするエンド ユーザーのひとりひとりに、SharePoint のすべてのグループ作業機能と発行機能が必要になるとは限りません。ページの負荷を減らして、ブラウザーで処理する必要があるコードを簡素化する工夫として、次に、ユーザーの種類とブラウザーに基づいて適切なスクリプトを動的に作成する JavaScript サーバー クラスを作成しました。ユーザーがコンテンツの発行を許可されていない場合、これらの発行操作のために SharePoint に必要な JavaScript は一切提供されません。ブラウザーの互換性のために、ブラウザーの種類を確認する条件を送るのではなく、適切なサーバーサイド JavaScript が動的に生成されます。次に示すのは、Netscape と IE のそれぞれの表示用スクリプトです。
画像

また、ページの要求数を減らすために、スクリーンショットや壁紙だけでなく、ゲーム要素の反復処理も実行可能な場所で JavaScript を利用しています。ゲーム ページ、ゲーム概要、機能、スクリーンショットにアクセスし、ゲームを試して購入すると、JavaScript によってすべての機能が実装され、サーバーとの間のラウンドトリップを回避できます。
画像

Flash ベースのトレーラーをすべて読み込む場合のユーザー エクスペリエンスを最大にする方法をいくつか試しました。サイトの Flash コンテンツは、これらのトレーラーのみです。ストリーミングが始まる前にページを表示できるという理由から、トレーラーとゲーム エミュレーターの後読み込みを 2 秒で行うことにしました。トレーラーとエミュレーターは、SharePoint ファームへの影響を避ける別のメディア ファームから提供されます。
画像

まとめ

一般向け Web サイトで良好なユーザー エクスペリエンスを達成するには、パフォーマンスを最適化することが不可欠です。Glu Mobile の実装では、データをできるだけ RAM に格納し、データへのアクセスもできるだけ RAM から行うようにしました。また、クライアント ブラウザーへの接続時には、必要最小限のページ以外は読み込まないようにしました。ユーザーによっては、MOSS の充実したグループ作業機能を使用しない場合もあり、初期設定のままで展開すると、そのようなユーザーに不要な機能が展開され、ページの負荷が大きくなる可能性があります。これらは内部ユーザー向けの機能とし、一般ユーザーに対するページの負荷を軽減するには、ここで説明したいくつかの概念と手法を使用します。また、エンド ユーザーに最高のユーザー エクスペリエンスを提供できるように、実装を継続的に調整する必要もあります。空白フィルタリング メカニズムなどは、そのような調整セッションの一部であり、ページの負荷をできるだけ削減するための試みでした。

3 部構成のブログ シリーズとして、Glu Mobile サイトの構築方法について説明することができ、SharePoint チームには感謝しています。ぜひ、サイトをチェックしてください。ユーザー登録してエミュレーターでゲームを試してみてください。販売に関する操作は SMS を介して統合され、ワイヤレス請求書 (これも優れた統合機能の 1 つ) に追加されるため、サイトに価格情報は記載されていませんが、1 ゲームあたり 6 ~ 9 米ドルです。ゲーム テクニックは、携帯電話を利用して Project Gotham Racing で磨けますよ! 質問がある場合は、ここにコメントとして残すか、電子メール (glu-team@allincal.com) でお寄せください。

 

Allin コンサルティングの Glu.com チーム

  • Shawn L. Parker - Solutions Architect (ソリューション アーキテクト)
  • Robert Sweeney - Sr. Consultant (シニア コンサルタント)
  • Eric Hansen - Project Manager (プロジェクト マネージャー)
  • Stefan Nilsson – Practice Manager (プラクティス マネージャー)
  • Karl Kuhnhausen – Practice Director (プラクティス ディレクター)
Published Thursday, July 19, 2007 5:02 AM by LLiu

これはローカライズされたブログ投稿です。原文の記事は、http://blogs.msdn.com/sharepoint/archive/2007/07/19/moss-has-got-game-glu-mobile-s-website-www-glu-com-how-we-did-it-part-3-of-3.aspx をご覧ください。

BinaryWave Sonar - SharePoint 向けコンポーネント レベル パフォーマンス測定ツール - 開発内容

[2、3 か月前に WSS 3.0 SP1 と MOSS 2007 SP1 がリリースされましたが、2、3 週間前に MOSS 2007 SP1 のスリップストリーム版がリリースされてからは、特に、多くの組織で SharePoint の展開が一気に進み出しました。このところ、SharePoint のキャパシティ プランニングパフォーマンス管理についての問い合わせが急増しています。キャパシティ プランニングについては、Joel が非常に有益な情報を満載したブログ記事 (ここを参照) を投稿しています。パフォーマンス管理については、ある ISV パートナーが無料ツールをリリースしたばかりで、ぜひ皆様に紹介しようと思います (このツールを拡張した製品版も併せてリリースされています)。今回の "開発内容" では、このツールを取り上げます。これはどのように設計され、どのように開発されたのでしょうか。また、最終的に、どのようにパッケージされたのでしょうか。SharePoint のパフォーマンス指標をなぜこれほど効果的に計測できるのでしょうか。その方法と理由がわかります。

<Lawrence />]

Eric Shupps 氏 (SharePoint MVP。"SharePoint カウボーイ" と呼ばれることが多くあります。もちろん、良い意味でしょうが) 率いる BinaryWave 社は、SharePoint 専用ツールを開発する ISV です。2008 年 2 月、同社は、WSS 3.0 および MOSS 2007 に対応した初めてのコンポーネント レベル パフォーマンス測定ツール、Sonar をリリースしました。アプリケーション開発者や IT 管理者に SharePoint 環境内でのサーバー側のパフォーマンスを示すように設計されており、さまざまなページ オブジェクト (サーバー コントロール、HTML コントロール、Web パーツなど) の詳細なパフォーマンス統計情報が提供されます。

SharePoint のエンタープライズ展開を管理する中で、より困難な側面の 1 つとして、物理的な実装フェーズとコード展開フェーズでは、問題の根本的な原因を正確に特定できないことが挙げられます。ハードウェア リソース、ネットワーク アーキテクチャ、ファーム構成、オペレーティング システムの依存関係、カスタムおよびサードパーティ ソフトウェア モジュールなど、ほかにも多くありますが、アプリケーションのパフォーマンス全体に関与するコンポーネントが多数存在することで、状況はより複雑になっています。これらのコンポーネントの中には、トラブルシューティングやベースライン分析を支援する、安定した信頼できるソリューション (ハードウェア リソース使用率、ネットワーク スループット、オペレーティング システム パフォーマンス カウンターなど) を備えるものもありますが、一方で、特に、社内で作成したコードやベンダーから提供されたコードに関連するコンポーネントの中には、アプリケーションのパフォーマンス全体を調べようとする開発者や管理者にとって、他との連携の少ない単発ユーティリティにすぎないようなソリューションしか備えていないものもあります

この問題に目を向けたのが Sonar です。市場にはインフラストラクチャのパフォーマンス分析要件を満たす有力な製品が多数存在しますが、それを承知したうえで、きわめて正確なコンポーネント統計情報を提供し、MOSS と WSS 内のコード (ネイティブ コードとカスタム コードの両方) を識別、分離、および最適化する統合ツールセットを送り出すことにしました。そのアプローチとして、製品が対象とする顧客層を段階的に分け、個人開発者やコンサルタント向け製品として Sonar Lite、中小規模組織向け製品として Sonar Standard、大規模エンタープライズ向け製品として Sonar Professional (間もなく発売) を発表しました。

一般的なパフォーマンス分析には、多くの側面と、固有の各シナリオに適合する多数のソリューションがあります。Web アプリケーションのパフォーマンス分析の場合、多くは、要求元クライアントに対するマークアップの表示結果の配信を測定対象とし、負荷と表示時間の測定、接続速度とホスト機能の考慮、地理的依存関係の調査などの処理が行われます。これらはまったく正しく、必要な測定ですが、パフォーマンス測定全体から見ると、ほんの一部の測定にすぎません。開発者やシステム管理者の目の前の関心事は、サーバー側のパフォーマンスの基準レベルを取得できるかどうかであり、ブラウザーの種類、場所、オペレーティング システム、接続速度など、さまざまな要因が計算式に取り込まれるのはその後でもかまいません。これらの他の測定タイプと同様、アプリケーションのパフォーマンスを最終的に決めるのは、サーバー側の指標であることが認識されていません (少なくともそのように認識されていないと思います)。実際には、サーバー側の指標は、ローカル環境以外のあらゆる要素が結果に影響する前の "生" の状態で、アプリケーションがどのように実行されているかを明確に示します。

このことを念頭に置き、Sonar がどういうものであり、どういうものでないかを理解することが重要です。Sonar は、サーバー側のパフォーマンス分析用のベンチマーク ツールとして、生オブジェクト (元々の .NET フレームワーク固有の処理と解釈は除く) の実行結果を示します。実際のユーザーからの要求時に、個々のページ コントロール (画像、スクリプト、ASP.NET サーバー コントロール、SharePoint Web パーツを問わず) の実行が開始されてから終了するまでの時間を測定するだけです。この指標は、他のツールから得られる指標と必ずしも一致せず、これからも一致することはないでしょう。これは、個々の要求のコンテキスト内のある瞬間に、サーバー上で何が発生していたかを示す "特定の時点" の指標です。時間の経過と共に、これらの結果は、基盤となるアプリケーションが実行されている状況を 1 日単位、1 時間単位、または分単位で明確かつ正確に伝えます。

最初から、開発者や中小企業向けの Web パーツ ソリューションと、エンタープライズ製品 (アプリケーション ページを利用して定型レポートと独自レポートを提供) に分けて、各製品を段階的に提供することをイメージしていました。Sonar Professional では、(一般向け MOSS WCM サイトのサポートを主な目的として) Web パーツを利用しないため、ページの表示中にパフォーマンス統計情報を収集しても収集プロセス自体によって分析対象ページのパフォーマンスが低下しない軽量のデータ収集アーキテクチャを構築する必要がありました。そのために、カスタム HTTP モジュール、オブジェクト解析アセンブリ、データ表示 Web パーツ、およびアプリケーション ページが必要でした。

Sonar Lite と Sonar Standard では、ページ分析ルーチンによって収集されたパフォーマンス データは、ローカルで XML ファイルに書き込まれます。その後、これらの XML ファイルは、Web パーツによって解析して表示することができます。また、Microsoft Excel または Access で別の分析を行うためにエクスポートすることもできます。Sonar Lite と Sonar Standard は、履歴レポート機能や、特定の時点におけるスナップショット分析機能を備えていないため、データの格納と抽出にスタンドアロン データベースや SharePoint リストを使用する必要はありません。ただし、このようなシナリオでは、データをリストに格納するモデルが最も適しています。Sonar Professional では、オブジェクト データの格納には、サーバー ファーム データベースとは別の SQL データベースが使用され、レポートの作成には、カスタム C# コードとサードパーティのグラフ ユーティリティが組み合わせて使用されます。
画像

そもそも、パフォーマンス測定ツールを作成するうえで大切なことは、そのツールによって、アプリケーションのパフォーマンスが低下しないようにすることです。基盤となるページ フレームワークにコードを接続する際に、ページの実行に対して完全に透過的であることは不可能ですが、Sonar ルーチンはできるだけ軽量で、できるだけ最適な実行状態になろうとします。このことは、MOSS フレームワーク内に展開する HTTP モジュールを作成するときに、特に大切です。というのも、MOSS では、ユーザー要求データ、ページ リダイレクト、発行機能、およびその他の機能のホストの管理を独自の HTTP モジュール セットで行うためです。ユーザーに送られる応答データを操作するアセンブリをさらにもう 1 つ展開することで、これらのプロセスのオーバーヘッドが増加するようであれば、それは危険な兆候です。適切な方法が構成されていないと、1 つの誤りによってユーザー エクスペリエンスが大幅に低下する可能性があります (また、基盤となる SharePoint 機能も低下する可能性があります)。このような危険性は純粋な Web パーツ モデルにも当てはまりますが、特定のページに対して応答操作をオンデマンドでのみ実行すればリスクは軽減されます。

Sonar のデータ収集プロセスは、ユーザーが要求した各ページを解析するカスタム HTTP モジュールで構成されます。このデータ収集プロセスでは、分析対象の重要度が高いコントロール要素のコレクションを作成し、ユーザー エクスペリエンスとの関連が少なく重要度が低いコントロール要素を除去します (テーブル、DIV など、HTML 構造タグ、空のプレースホルダー、および Sonar Web パーツを含む特定の種類の ASP.NET Web コントロール)。次に、このコントロールのコレクションは、分析のためにマルチスレッド プロトコル アナライザー アセンブリに渡され、ページが元の要求元ユーザーに送信されます。関連するすべてのコントロールの処理が終了すると、各コントロールのデータが、ページのより詳細な統計情報と共に、ローカルの XML ファイルに書き込まれます。後で、この XML ファイルは、表示用 Web パーツで解析され、読みやすい形式で表示されます。Sonar Professional でも同じインバンド分析を利用しますが、データは SQL データベースに格納され、出力はすべて、/_layouts/sonar ディレクトリ内の一連のカスタム アプリケーション ページに表示されます。

コントロールのパフォーマンスの取得は、処理されているコントロールの種類に応じて異なります。ASP.NET コントロール (Web コントロール、サーバー コントロール、ユーザー コントロールなど) の場合、リスナーを実行プロセスに挿入するには、個々のオブジェクト イベント ハンドラーが重要です。各コントロールのロード イベントとアンロード イベントを無効にし、タイマーを挿入してコンポーネントの開始時刻と終了時刻を追跡する必要があります。このプロセスでは、多数のコントロールがまとめてアンロードされるため、ガベージ コレクションが重要な役割を果たします。つまり、アンロードされたコントロールは、ガベージ コレクターが呼び出されてキュー内のアイテムをクリーンアップするまで常駐します (技術的にはまだロードされた状態です)。この説明では、ガベージ コレクションの実際の動作を単純化しすぎていますが、全体的なことを示すたとえとしては、このとおりです。

SharePoint Web パーツ (もちろん、ASP.NET Web パーツも) は、サーバー コントロールの一種ですが、独自の方法で動作し、基本コントロールとは異なる情報を公開します。Web パーツのパフォーマンス情報を取得するには、Web パーツをサーバー コントロールとして扱い、Web パーツ グループを作成するタイプ値を取得しますが、Web パーツは、ページの SPWebPartManager オブジェクトを介してアクセスされる場合もあります。MOSS と WSS の各ページには Web パーツ マネージャー オブジェクトが 1 つだけあり、主にページ上のすべての Web パーツを追跡するために使用されます。このオブジェクトには、ページ コンテキスト (つまり、this.page.WebPartManager) 内から直接アクセスできます。また、GetLimitedWebPartManager メソッドで SPLimitedWebPartManager オブジェクトを取得してページ コンテキスト外からアクセスすることもできます。どちらの方法でアクセスするかは、開発者個人と呼び出し元コンテキストによります。SPWebPartManager オブジェクトは、Web パーツ内からのアクセスに完全に対応していますが、ページの表示後のコンテンツにアクセスできないハンドラー アセンブリや HTTP モジュールから Web パーツ データを取得する場合は、SPLimitedWebPartManager を呼び出す方法が最適です。

HTML コントロールとリンク オブジェクトまたは埋め込みオブジェクトの場合、パフォーマンスを測定する実際的な方法は、オブジェクトの URI に対して要求を行い、応答時間を測定する以外にありません。認証メカニズムを利用しないページであれば簡単ですが、場合によっては、操作が複雑になることもあります。それは、有効なユーザー資格情報をリモート サーバーに渡す必要がある場合、特に、リモート ホストも複雑なドメイン アーキテクチャ内の SharePoint サーバーで、リモート ホストに資格情報を渡すための偽装手法を必要としている場合です。ASP.NET コントロールの場合と同様、慎重なフィルター処理によって、パフォーマンスへの影響が大きいと予想される HTML コントロールと、フィルター オブジェクトまたは書式設定オブジェクトを突き止める必要があります。Sonar では、HTML コンポーネントの取得と分析に DOM 解析メソッドを使用しますが、別の処理を行うために、他のメカニズム (正規表現など) を使用してコントロール配列を作成することもできます。コントロール配列が設定されたら、パフォーマンス統計情報の取得と生成のために、プロトコル アナライザー オブジェクトに URI が渡されます。

特に、SharePoint 内で独自のパフォーマンス測定ソリューションを作成する開発者が注意する点は、WSS ページと MOSS 発行ページでまったく異なります。WSS ページは、プロセス アセンブリに標準的な System.Web.UI.Page オブジェクトとして表示されますが、MOSS ページは、基本となる ASP.NET 2.0 フレームワークを利用する一方で、HTTP 応答ストリームからわかりにくい、複雑なリダイレクトおよびページ処理メカニズムも利用します。MOSS 発行ページは、一見、シンプルなページ オブジェクトですが、実際には Microsoft.SharePoint.Publishing 名前空間から派生しており、TemplateRedirectionPage クラスと PublishingLayoutPage クラス内での 2 段階のコンテンツ操作を利用します。これは、表示後のオブジェクト (Web パーツ、サーバー コントロールなど) には透過的に行われます。これらのオブジェクトは、MOSS で必要な操作がすべて実行された後でページ オブジェクトのコンテキストにアクセスしますが、HTTP モジュールはページ オブジェクトが表示のために渡される前に、そのページ オブジェクトを操作します。このシナリオのページ オブジェクトにコード (イベント リスナーを接続してパフォーマンス データを取得するコードなど) を差し込むには、SPHTTPHandler コンストラクターからリダイレクトされるページ オブジェクトを抽出した後、そのオブジェクトを分析のためにカスタム モジュールに引き渡す別のロジックが必要です。

パフォーマンス測定データは、Sonar Lite と Sonar Standard では ASP.NET 2.0 Web パーツとして表示され、Sonar Professional では、/_layouts/sonar ディレクトリ内のアプリケーション ページでホストされる汎用サーバー コントロールに表示されます。Sonar Lite と Sonar Standard は単一ページの指標のみを示すため、Web パーツは最も柔軟なデータ表示メカニズムを備えています。この Web パーツは、WSS サイト コレクション内のどのようなページにもドロップして、そのページのパフォーマンス統計情報を表示することができます。データは単純なグリッド形式で表示され、生指標と加重平均指標、赤、黄、緑のインジケーターがあります。ページを初めて読み込む際に、コントロールの表示処理によって読み込みが遅くならないようにする工夫として、ユーザーが [View Performance] ボタンをクリックするまでグリッドは表示されません。このボタンがクリックされると、イベント ハンドラーが呼び出されて、XML データ ファイルの読み込み、コントロール統計情報の解析、グリッドの設定、およびグリッドの表示が行われます。
画像

Sonar Professional は、要求されたすべてのページの背後で実行されるため、出力を表示する別の手段が必要です。分割パネル (Windows エクスプローラー風のコントロール) により、ユーザーは、サイトの階層を参照して、表示する必要があるページ指標を選択することができます。サイトまたはサイト コレクションのルート ノードからサマリ統計情報を入手できます。表示されるのは同じ基本指標ですが、ユーザーは、赤のインジケーターのしきい値レベルを定義したり、特に、個々のページや URL パスに対して、それを含めるか除外するかを指定できます。また、Professional バージョンでは、特定の時点での履歴データをグラフ (Dundas Chart for SharePoint を利用) で表示して、指定期間内の各ページのパフォーマンス傾向を分析することもできます。他のバージョンと同様、データセット全体を XML 形式でエクスポートして別のオフライン分析で利用することもできます。ただし、Dundas コントロールの特別な例外事項として、選択内容と表示内容はすべて、SQL データベースに接続された ADO.NET からデータを取得する標準 .NET コントロール (ツリービュー、グリッドビューなど) を使用して表示されます。

Sonar の指標は、アプリケーションのパフォーマンスの基準を示します。これらの指標は、比較のための手段として、ページ サイズ全体や実行時間によって加重され、クライアント側の操作オーバーヘッドに影響されません。これは重要な特徴で、特に、生処理時間の未処理の測定結果を取得したい開発者にとっては重要です。コードが実行されると、開発者は表示プロセスを一切制御できません。唯一できるのは、プログラム内の固有の機能を最適化することです。その後、さらに別の処理や表示 (コントロール コレクション内の上位のコントロールによって実行されるもの、ページのライフサイクルの初期または後期に実行されるものも含む) が行われるのに伴い、指標には偏りが生じ、最適化することはますます困難になります。

サーバー側とクライアント側の指標を組み合わせて、エンド間のパフォーマンス測定データを取得できます (実際、これは望ましいことです)。ただし、サーバー側の実行時間に関する "生" 基準値がないため、実際の問題が関連コントロール内に存在する可能性がある場合、ネットワーク待ち時間によって実際の問題が応答に差し込まれる可能性がある場合、またはクライアントの設定および構成 (また、さらに詳しく言えば SharePoint そのもの) に起因して全体で実際の問題が発生する可能性がある場合は、ページ コンポーネントがボトルネックとして誤って特定されることがあります。Sonar と関連テクノロジが真に目指していることは、外部からさまざまな対策を講じる前に、まず、IT マネージャーや開発者にアプリケーション内で何が発生しているかを知らせる明確な手段を提供することです。

Sonar Lite と Sonar Standard を実装するには、いくつかの DLL ファイル、SharePoint 機能と関連機能レシーバー、画像、スタイル、Web パーツ、および (安全なコントロールと HTTP モジュールを登録するように) 修正した Web アプリケーションの web.config ファイルを登録する必要があります。これらのアイテムはすべて、スクリプトや構造化インストール プログラム (Windows インストーラー MSI パッケージ) を利用すれば展開できますが、SharePoint には元から堅牢で柔軟なコード展開メカニズムが用意されています。必要なすべてのリソース ファイルを単一のキャビネット アーカイブ (ソリューション パッケージまたは WSP ファイル) にまとめることで、管理者は Windows プログラムをインストール/アンインストールする場合とほとんど同様に、コードの展開とロールバックを制御できます。[サーバーの全体管理] ユーザー インターフェイスと STSADM コマンドライン ユーティリティを使用すれば、どのような SharePoint ファームにも Sonar ソリューション パッケージを数分で展開することができ、定期的なサーバー メンテナンスに複雑なコード管理が追加されることや、サポートされていない実装方法が利用されていないかどうかを心配することはありません。必要な機能はサイト単位 (SharePoint 用語でいう "Web"の範囲内) でアクティブ化でき、必要に応じてアクティブ化を解除したり、機能を削除したりすることもできます。

開発者は、Sonar のような、サーバー側のパフォーマンスを測定するソリューションを作成するにあたり、いくつかの難題に直面するでしょう。とりわけ、SharePoint API を深いレベルで操作することが求められます。測定対象ページのパフォーマンスが低下しないコードを作成する必要もあります。また、オブジェクト モデル プログラミングを深く理解する必要もあります。それだけでなく、ネットワーク プロトコル、インターネット インフォメーション サーバー、ASP.NET、および Microsoft サーバー テクノロジについても理解する必要があります。Sonar は、WSS 3.0 および MOSS 2007 サイトのコンポーネントレベルのパフォーマンス データを提供することで、パフォーマンス測定分野の隔たりを埋めていますが、本来の用途は、エンタープライズ全体でのパフォーマンス管理戦略の一環として、ネットワークおよびクライアント分析ツールと共に使用することです。どの組織でも特有の要件によって、アプリケーションのパフォーマンスを明確に把握できる追加のツールやユーティリティの作成が必要となることがあります。そのような場合に、SharePoint 開発者は Sonar のしくみを理解しておくと、ポイント ソリューションを作成するうえで役立ち、トラブルシューティング手法の改良、応答時間の改善、および SharePoint のエンタープライズ実装の投資収益率アップを達成できます。SharePoint のパフォーマンスを効果的に測定する方法について、建設的な考えや実証された手法 (またはツール) があれば、このブログにコメントを寄せてください。

BinaryWave 社の Sonar Team (Sonar チームに関するページ)

Published Monday, March 17, 2008 6:03 PM by sptblog

これはローカライズされたブログ投稿です。原文の記事は、http://blogs.msdn.com/sharepoint/archive/2008/03/17/binarywave-sonar-component-level-performance-measurement-tool-for-sharepoint-how-we-did-it.aspx をご覧ください。

開発内容: Connectbeam Spotlight Connect for SharePoint

2005 年 12 月に設立された Connectbeam 社は、エンタープライズ ソーシャル ソフトウェア アプリケーションのリーディング プロバイダーで、ソーシャル ブックマークとタグの概念をソーシャル ネットワーキングの概念と結び付けた最初の会社です。Connectbeam 社の新製品 Spotlight Connect for SharePoint では、SharePoint ユーザーは、リッチ エンタープライズ ソーシャル ブックマークおよびタグ情報の検出と共有を 1 か所で行うことができます。また、Spotlight Connect for SharePoint により、SharePoint Server 2007 固有のグループ作業および検出機能は拡張され、強化されます。

Spotlight Connect for SharePoint は、一連の Web パーツとして実装され、Connectbeam の REST ベースの API を介して有効になります。Connectbeam API の詳細については、http://www.connectbeam.com/support/cbeam_api を参照してください。

このブログ記事では、SharePoint のエンタープライズ検索および個人用サイト機能に Connectbeam のエンタープライズ ソーシャル コンテンツを加えることで、これらの SharePoint 固有の機能が Spotlight Connect for SharePoint によってどのように強化されるかについて説明します。これらの機能が強化された結果、SharePoint ユーザーは、より広範囲にわたる "ソーシャルな検出" が可能になります。たとえば、SharePoint のエンタープライズ検索の検索結果を Connectbeam の Related Tags や Bookmarks と関連付けることで、これまでの情報検出では隠れて見えなかったものや、新しいものがすぐに明らかになります。

また、SharePoint ユーザーは、コア Connectbeam Spotlight ソーシャル ネットワーキング アプリケーションを直接操作して、よりいっそう充実したソーシャル ネットワーキング メタデータおよびソーシャル検出機能を提供することもできます。この操作は、SharePoint 内で公開されている Connectbeam データ (Tags など) をクリックするだけで開始されます。

コア Connectbeam Spotlight アプリケーションは、セキュリティで保護された "ドロップイン" ハードウェア アプライアンスとして企業のファイアウォールの背後に実装されます。Connectbeam Spotlight と SharePoint の連携には Web パーツが利用されます。また、この連携では、Active Directory に基づく Microsoft シングル サインオン インフラストラクチャをサポートしています。

Connectbeam Spotlight アプリケーションの核となるのは、ブックマークおよびタグ情報を適用し、管理する機能です。ブックマークおよびタグ情報は、URL を持つあらゆる Web コンテンツに関連付けることができます。この関連付けを行う有効な方法の 1 つとして、Connectbeam "Bookmarklet" を使用する方法があります。これは Connectbeam Web ブラウザーのツール バーから起動できます。次に Connectbeam ツール バーの例を示します。

画像 
図 1: Connectbeam ツール バー - [Bookmarklet Launch] ボタンが赤で囲まれています

[Connectbeam Bookmarklet] ボタンをクリックすると、実際の [Connectbeam Bookmarklet] パネルが表示され、このパネルで任意の Web コンテンツのブックマークを作成したり、タグの関連付けを必要なだけ行ったりすることができます。その後、このデータは Connectbeam Spotlight アプリケーションによって 1 か所に格納され、そこで管理されます。次に Connectbeam Bookmarklet の例を示します。

clip_image002
図 2: Connectbeam Bookmarklet – 指定されたタグが赤で囲まれています

この Bookmarklet の例では、Microsoft SharePoint Server Web サイトのホーム ページが、"Microsoft"、"SharePoint"、および "MOSS 2007" のタグでブックマークが作成されています。このようなブックマークおよびタグ情報 (および、Users、Expert Communities など、格納されている他の Connectbeam Spotlight ソーシャル ネットワーキング情報) を SharePoint 内に表示して利用することが、Connectbeam の統合を通じて可能になりました。

このセクションでは、Connectbeam が提供する SharePoint との主要な統合機能がどのような方法で実現されたかについて、ユーザー インターフェイスとソフトウェア開発の観点から詳しく説明します。Connectbeam 統合 Web パーツの開発に関する詳細な技術情報については、次のセクションで説明します。全般的に言えば、統合作業は 1 名の開発者によって約 2 週間で行われました。SharePoint との統合を簡単に行えたことをたいへん喜んでいます。

Web パーツとは、通常の Web ページに表示される使い慣れたコントロールと同様のユーザー インターフェイス コンポーネントです。ただし、"事前に用意された" ユーザー インターフェイス機能があることに加え、Web パーツは、SharePoint の個人用設定インフラストラクチャに含めることもできます。つまり、個々のユーザーは、利用可能な Web パーツを操作することにより、SharePoint サイトの独自のカスタム ビューを追加、削除、および構成することができます。Web パーツ データは、SharePoint ユーザーの個人用サイトのホームおよびプロファイル領域に表示されます。

My Home (自分用ホーム) Web パーツは、指定されたキーワードについて SharePoint エンタープライズ検索を実行し、標準的な SharePoint 検索結果に Connectbeam の Related Tags、Related Bookmarks、および Related Users ソーシャル データを加えます。次の例を見てください。SharePoint エンタープライズ検索による "java" という単語の検索結果が、Web パーツの "Intranet search results" セクションに表示されています。これらの SharePoint の検索結果には、Connectbeam の "Related Tags"、"Related Users"、および "Related Bookmarks" ソーシャル情報が付加されています。この Connectbeam データのいずれかを適当にクリックすると、このソーシャル データに関する情報がさらに表示されます。Related Bookmarks をクリックした場合、情報はブラウザー内に直接表示され、それ以外の情報については Connectbeam Spotlight アプリケーション内に表示されます。

画像
図 3: My Home (自分用フォーム) エンタープライズ検索 Web パーツ

My Profile (自分用プロファイル) Web パーツには、SharePoint ユーザー プロファイル ストアからユーザー プロファイル データが表示され、Connectbeam Spotlight からはユーザーのソーシャル ネットワーク Tags、Bookmarks、および Expert Communities データが表示されます。既定では、一般的な SharePoint ユーザー プロファイル データは [About Me] タブに表示されます。Connectbeam Spotlight ソーシャル コンテンツ データは、[Social Content] タブをクリックすると表示されます。

画像
図 4: My Profile (自分用プロファイル) Web パーツ - ユーザーの既定の SharePoint ユーザー プロファイル データが表示されています

[Social Content] タブをクリックすると、Connectbeam Spotlight ソーシャル コンテンツ データ (つまり、Bookmarks、Tag Cloud、Expert Communities) を表示できます。このソーシャル コンテンツはすべてクリック可能で、コンテンツや関連情報を Connectbeam Spotlight アプリケーション内でさらに詳しく調べることができます。

画像 
図 5: 自分用プロファイル Web パーツ - Connectbeam Spotlight からユーザーのソーシャル コンテンツが表示されています

Connectbeam 統合 Web パーツの詳細な技術情報

 

上記の Web パーツの開発には、以下の実装とサンプル コード スニペットが使用されました。

 

·         Web パーツ クラスを作成する

1.     新しいクラス ライブラリ プロジェクトを作成します。

2.     クラスを  Microsoft.SharePoint.WebPartPages.WebPart から継承します。

 

·         子コントロールを作成する

1.     Web パーツ基本クラスの CreateChildControls メソッドをオーバーライドします。

protected override void CreateChildControls()

        {

            base.CreateChildControls();

            _tbxText = new TextBox();

            _tbxText.Text = "java";

            this.Controls.Add(_tbxText);

 

            btnSubmit = new Button();

            btnSubmit.Text = "Search";

            btnSubmit.Click += new EventHandler(Search_Click);

            this.Controls.Add(btnSubmit);

 

                        //Create label to show SharePoint search results

labelSrchRes = new Label();

            labelSrchRes.Text = "Search Results";

            labelSrchRes.Visible = false;

            this.Controls.Add(labelSrchRes);

 

                        //Create label to show Related Bookmarks

            labelRelBookmarks = new Label();

            labelRelBookmarks.Text = "Related Bookmarks";

            labelRelBookmarks.Visible = false;

            this.Controls.Add(labelRelBookmarks);

 

            //Create label to show Related Tags – similar to Bookmarks above

           

                       

            //Create label to show Related Users – similar to Bookmarks above

           

                       

        }

  

·         Connectbeam から情報を抽出する

 

タグ、ユーザー、およびブックマーク情報を抽出するには、Connectbeam アプライアンスにログインする必要があります。ポイント 1. および 2. のコード スニペットは、ログイン方法と情報の抽出方法を示しています。

 

1.     Connectbeam にログインする

 

      String url = connectBeamApplianceUrl;

      String cookies = null;

      HttpWebRequest wrGETURL = (HttpWebRequest)WebRequest.Create(url);

      wrGETURL.Method = "GET";

      HttpWebResponse response = wrGETURL.GetResponse() as HttpWebResponse;

      if (response.StatusCode == HttpStatusCode.OK)

      {

         cookies = response.GetResponseHeader("Set-Cookie");

      }

  

2.     Connectbeam からタグ、ユーザー、およびブックマーク情報を抽出する

 

      String strUrl = "";

      Stream streamXML = null;

      switch (strType)

      {

            case "Tags":

                   strUrl = relatedTagsUrl; // Use correct URL for your site. 

                   break;

            case "Users":

                   strUrl = relatedUsersUrl;

                   break;

            case "Communities":

                   strUrl = relatedBookmarksUrl;

                   break;

            default:

                   break;

      }

 

      HttpWebRequest wrGETURL = (HttpWebRequest)WebRequest.Create(strUrl);

      wrGETURL.Method = "GET";

      wrGETURL.Headers.Add("Cookie", cookies);

      HttpWebResponse response = wrGETURL.GetResponse() as HttpWebResponse;

      if (response.StatusCode == HttpStatusCode.OK)

      {

          streamXML = response.GetResponseStream();

      }

 

3.     XSL 変換

Connectbeam は、XML 結果を含むストリームを返します。  これらの結果を HTML ラベル コントロールに表示するために、XSLT を適用してこれらの結果を HTML に変換しました。

 

4.     XSLT の適用後、結果を HTML 形式に変換する

 

 

      String strDataPath = Page.Server.MapPath("/data");

      String strXSLFileName = "";

      StringWriter sw = null;

      XPathDocument doc = new XPathDocument(streamXML);

      XslCompiledTransform xslt = new XslCompiledTransform();

 

      switch (strType)

      {

             case "Tags":

                strXSLFileName = strDataPath + "/cbeam_tags.xsl";

                break;

             case "Users":

                strXSLFileName = strDataPath + "/cbeam_user.xsl";

                break;

             case "Communities":

                strXSLFileName = strDataPath + "/cbeam_comm.xsl";

                break;

             default:

                strXSLFileName = "";

                break;

       }

 

       xslt.Load(strXSLFileName);

       sw = new StringWriter();

       xslt.Transform(doc, null, sw); 

·         My Home ページでの SharePoint 検索

      この検索は、SharePoint の検索 Web サービスを使用して実行されます。

 

//The XML string containing the query request information for the Web service

string qXMLString="<QueryPacket xmlns='urn:Microsoft.Search.Query'>" +

"<Query><SupportedFormats><Format revision='1'>" +

"urn:Microsoft.Search.Response.Documentocument</Format>"+                                                                                          "</SupportedFormats><Context><QueryText language='en-US'+

type='STRING'>" + keyword +                                                            "</QueryText></Context></Query></QueryPacket>";

 

QueryService queryService = new QueryService();

queryService.Credentials =CredentialCache.DefaultCredentials;

queryService.PreAuthenticate = true;

queryService.Url =searchServiceUrl;

 

System.Data.DataSet queryResults = queryService.QueryEx(qXMLString);

String strXML = queryResults.GetXml();

 

string strDataPath = Page.Server.MapPath("/data");

string strXSLSPResPath = strDataPath + "/SharepointSrch.xsl";

XPathDocument doc = new XPathDocument(new StringReader(strXML));

XslCompiledTransform xslt = new XslCompiledTransform();

xslt.Load(strXSLSPResPath);

StringWriter sw = new StringWriter();

xslt.Transform(doc, null, sw);

labelSrchRes.Text = sw.ToString();

 

·         ユーザーのユーザー プロファイル データを抽出する

 

[My Profile] ページにはユーザーのプロファイル データが表示されます。ユーザー プロファイルのデータは、SharePoint の UserProfile Web サービスを使用して取得されます。

UserProfileService profileService = new UserProfileService();

profileService.Url = userProfileServiceUrl;

profileService.Credentials = Credential;

PropertyData[] userProps = null;

userProps = profileService.GetUserProfileByName(userName);

·         Web パーツ ユーザー インターフェイス コンポーネントを表示する

      Web パーツ基本クラスの RenderWebPart メソッドをオーバーライドします。

 

      protected override void RenderWebPart(HtmlTextWriter output)

            {

            output.RenderBeginTag(HtmlTextWriterTag.Br);

           

            _tbxText.RenderControl(output);

            btnSubmit.RenderControl(output);

            output.RenderEndTag();

 

//Label to show SharePoint Search results

            output.RenderBeginTag(HtmlTextWriterTag.Label);

            labelSrchRes.Style["position"] = "relative";

            labelSrchRes.Style["table-layout"] = "fixed";

            labelSrchRes.Style["border-top"] = "#999999 thin solid";

//Repeat for border-left, -right, -bottom

           

            labelSrchRes.Height = 400;

            labelSrchRes.Width = 400;

            labelSrchRes.Style["left"] = "0";

            labelSrchRes.Style["top"] = "10";

 

            labelSrchRes.RenderControl(output);

            output.RenderEndTag();

 

            //Label to show Related Bookmarks

            output.RenderBeginTag(HtmlTextWriterTag.Label);

            labelRelBookmarks.Style["position"] = "relative";

            labelRelBookmarks.Style["table-layout"] = "fixed";

labelRelBookmarks.Style["border-top"] = "#999999 thin solid";

//Repeat for border-left, -right, -bottom

 

            labelRelBookmarks.Height = 150;

            labelRelBookmarks.Width = 200;

            labelRelBookmarks.Style["left"] = "10";

            labelRelBookmarks.Style["top"] = "10";

            labelRelBookmarks.Style["overflow"] = "hidden";

            labelRelBookmarks.RenderControl(output);

            output.RenderEndTag();

 

            //Label to show Related Tags – similar to Bookmarks above

           

                       

 

            //Label to show Related Users – similar to Bookmarks above

           

                         

            }

 

·         Web パーツを SharePoint サイトに展開する

 

1.   DLL を SharePoint サイトの bin フォルダーにコピーします。

2   SharePoint サイトの web.config に DLL の安全な制御項目を作成します。

3.      [サイトの操作]->[サイトの設定]->[Web パーツ]->[新規] に移動します。

一覧から My Home および My Profile Web パーツを選択し、[ギャラリーに追加] をクリックします。これで、この Web パーツを使用できるようになります。

4.      [サイトの操作]->[ページの編集] に移動します。

[Web パーツの追加] をクリックします。

一覧から Web パーツを選択します。

選択した Web パーツがサイトに表示されます。
 

Adrian Paul
Senior Product Manager (シニア プロダクト マネージャー)、Connectbeam Spotlight Connect for SharePoint

これはローカライズされたブログ投稿です。原文の記事は、http://blogs.msdn.com/sharepoint/archive/2008/06/09/how-we-did-it-connectbeam-spotlight-connect-for-sharepoint.aspx をご覧ください。

開発内容: オーストラリア原住民生活権保護局の Web サイト - 高度な Web コンテンツ管理

オーストラリア原住民生活権保護局は、領土および領海内における原住民の生活権に関する問題の解決をサポートしています。この組織は、1993 年の原住民生活権に関する法律に基づいて設立されました。裁決機関はオーストラリアの連邦政府関係官庁で、裁決は司法長官の職務の一部でもあります。裁決機関では、Web サイトの更新を必要としており、Microsoft の認定ゴールド パートナーである Vivid Group 社に対して、MOSS 2007 を使用した新しい Web サイトの開発を依頼しました。

裁決機関の Web サイトでは、原住民生活権の訴訟手続きに関連する政府の記録にアクセスできるようにする必要がありました。この記録に含まれるコンテンツ タイプは複雑です。また、この記録には、相互に関連する数千のページが含まれており、多くのページにダウンロード可能な画像やドキュメントへのリンクが含まれています。MOSS 2007 は、さまざまなコンテンツ タイプや Web コンテンツ管理の高度な機能を柔軟にサポートできるため、このような複雑な案件には最適な選択と言えます。

コンテンツ オブジェクトの一覧と、これらのオブジェクトを Web サイトに実装できる最大数を、以下に示します。

コンテンツ オブジェクト
カスタム コンテンツ タイプ14
カスタムのサイト列253
原住民生活権に関する申請1,773
原住民生活権に関する裁定109
登録テストの決定1,154
原住民の土地使用に関する同意331
将来の法律に関する申請13,662
将来の法律に関する裁定2,416
メディア リリース465
その他のコンテンツ ページ (公布、運用、公聴会のリストなど)80
ドキュメント - PDF、DOC、RTF、およびその他のドキュメント形式~ 6,000

 

カスタムのサイト定義と構成が、そのまま使用できる発行サイト テンプレートに基づいて開発されました。サイト定義と構成は、この Web サイト用にカスタマイズされたカスタム機能を参照しています。

Web サイト全体で使用される、主要なマスター ページを 1 つ開発しました。ページを印刷用に表示するマスター ページや、テキスト モード表示するためのマスター ページも開発しました。これらのマスター ページの切り替えは、クエリ文字列パラメーターに基づいてマスター ページを切り替える、発行用レイアウト ページの基本クラスをカスタマイズして使用することにより、オンザフライで行います。マスター ページを開発する際は、次の技術情報を参照しました。

ページ間をスムースに移動し、Internet Explorer でサイトを参照するときの "画面更新時のちらつき" を減少させるために、BlendTrans メタ タグをマスター ページ追加しました。

<meta http-equiv="Page-Enter" content="blendTrans(Duration=0)" />

<meta http-equiv="Page-Exit" content="blendTrans(Duration=0)" />

また、エンド ユーザーが不要な JavaScript ファイルや CSS ファイル (core.js など) をダウンロードすることを防ぐために、マスター ページから特定の SharePoint ファイルを削除しました。これらのファイルは、コンテンツ作成者には必要ですが、Web サイトの匿名の閲覧者にとっては不要です。ページ サイズが減少することにより、ページの読み込み時間が短くなります。これは、サイトの閲覧者が使用しているインターネット接続の帯域幅が低い場合、きわめて重要です。マスター ページを最適化する際には、次の技術情報を参照しました。

  • [方法] SharePoint Server 2007 Web コンテンツ管理サイトのパフォーマンスを最適化する
    http://msdn.microsoft.com/ja-jp/library/bb727371.aspx
  • ユーザーが匿名である場合、HttpContext.Current.Request.IsAuthenticated は false になります。このため、この値を使用して、マスター ページのためにブラウザーに送信される内容を検出および制御することができます。

SharePoint ライブラリや SharePoint リストに保存されるコンテンツは、サイト コレクション レベルで定義されるコンテンツ タイプおよびサイト列を基礎にすることができます。コンテンツ タイプとサイト列は、SharePoint 機能を使用して定義および展開できます。SharePoint 機能を使用して開発すると、すべての作業を、Microsoft Team Foundation Server と同様のソース管理システムに保存できます。ユーザーは、サイト列に使用される内部名に対してフル コントロールの権限を持ちます。Web サイトにサイト列を作成する場合には、このフル コントロールは与えられません。展開に向けて機能を実装する際には、次の技術情報を参照しました。

Web サイト用のコンテンツ タイプとサイト列に関する作業にはかなりの時間がかかりました。コンテンツを何度も移行したため、コンテンツ タイプとサイト列の調整は継続して行われました。コンテンツ タイプとサイト列を定義する際には、次の技術情報を参照しました。

サイト列を計画するとき、一部のサイト列は共有され、多くのコンテンツ タイプで使用されることが一般的です。列によっては、SharePoint リストに対するルックアップ フィールドを基礎とすることができます。これにより、列に対して選択できる値を簡単に管理できます。新しい値が必要になったら、それらの値を適切なリストに追加して、それぞれのサイト列に自動的に反映させることができます。NNTT Web サイトでは、Web サイト全体で使用されるさまざまなコンテンツ タイプやページ レイアウトのすべてをサポートするために、250 以上のカスタム サイト列が必要でした。すべてのサイト列とコンテンツ タイプは、機能として展開されました。

プロジェクトの "要件収集" フェーズでは、最初にすべてのコンテンツ タイプとサイト列を文書化し、要件ドキュメントを作成しました。その後で、"スキーマ定義と開発" プロセスの管理で利用するために、すべてのコンテンツ タイプとサイト列の情報をカスタム リストに保存しました。このようにした理由は、"スキーマ定義と開発" プロセスでは数か月以上の期間、複数の人間が作業を行うためです。一連のカスタム SharePoint リストの使用は、Excel スプレッドシートを使用してプロセス全体を追跡するよりも適していることがわかりました。

レイアウト ページとは、コンテンツ タイプに関連付けられているページ テンプレートです。このコンテンツ タイプは、発行ページに保存できる情報のフィールドを定義するコンテンツ タイプです。レイアウト ページでは、複数のページ モードを処理する必要があります。これらのモードには、表示モードや編集モードなどがあります。

表示モード: 表示されるページのビューは、匿名の閲覧者が確認できます。次のスクリーンショットは、読み取り専用モードでの Web サイトの一般的なページを示しています。

image
image

編集モード: 表示されるページのビューは、認証されたコンテンツ作成者/編集者が確認できます。次のスクリーンショットは、編集モードでのページを示しています (上と同じページ)。このページのコントロールを使用すると、使用可能なページ フィールドにデータを追加したり、そのフィールドのデータを更新したりできます。

image
image
image

設定できる値を制御することによってコンテンツの作成を簡素化するために、ルックアップ フィールド コントロールをさまざまなページ フィールドで多用しました。Web サイトでの表示モードと編集モードは大きく異なります。そのため、異なるモードをユーザーに表示するために、2 つのセットのコントロールを使用しました。プログラムからフォームのモードを検出するには、現在の SPContext の SPFormContext をチェックします。これについては、以下の技術記事を参照してください。

古い Web サイトを新しい Web サイトで置き換えるために、古いサイトから新しいサイトにコンテンツを移行する必要がありました。HTML やテキストのコンテンツだけでなく、数百の画像と数千のドキュメントも移行を必要としました。それに伴い、ハイパーリンクを更新して、SharePoint のドキュメントおよび画像ライブラリに新しいパスを反映させることも要求されました。移行プロセスを勧める中で、大きく分けて以下の 3 つのことがわかりました。

  • データ移行方法は、移行元のシステムに大きく依存します。たとえば API や移行元データベースへのアクセスなどです。
  • コンテンツ作成者が MOSS 2007 でコンテンツを編集できるようにするには、そのコンテンツを MOSS 2007 の発行ページに移行します。
  • Web サービス API またはカスタムの SQL Server データベースを使用すると、オプションで他のシステムを統合できます。

また、新しいシステムへのデータ移行は、1 回目の作業では完全には終了しないことがわかりました。そのため、すべてのコンテンツが正常に移行されるまで、バグの修正とその他の調整を行いながら、移行を複数回実行する必要がありました。さらに、前の手順に戻り、新しい Web サイトのコンテンツ タイプとサイト列のスキーマが、移行されるデータに対応するように適切に定義されているかどうかを確認する必要もありました。

メニュー ナビゲーション、ページ コンテンツ ナビゲーション、および検索ナビゲーションは、カスタム サーバー コントロールまたは Web パーツと共に実装されました。

組み込みのナビゲーションの変更機能を使用してメニューを構成できるように、MOSS 2007 の発行ナビゲーション プロバイダーをデータ ソースとして使用してカスタム メニューが開発されました。

ページ コンテンツの編集やページ レベルの設定の構成を可能にするために、フィールド コントロールが使用されました。一部のページ レイアウトには、カスタマイズされた Adobe の Flash フィールド コントロールが含まれています。これにより、コンテンツ作成者は Flash ベースのマルチメディア コンテンツをページに埋め込むことができます。

オーストラリアの州を対象としたドリルダウンを行うために、Flash ベースのマップが開発されました。このマップでは、検索ページのクエリ文字列に含まれる適切なパラメーターをエンコードすることで、コンテキストに基づいたコンテンツ検索を起動します。

コンテンツの量が多いこと、およびドキュメントやページごとに複雑なコンテンツが使用され、しかもそれらの属性が多いことから、検索の役割は非常に重要でした。この後、コンテンツ検索の実装方法について詳細に説明します。

SharePoint の エンタープライズ検索機能を使用すると、コンテンツのさまざまなソース (ページ、ドキュメント、データベースなど) を対象として、キーワード検索を実行できます。SharePoint 検索の開発者向けドキュメントについては、以下を参照してください。

SQL Server データベースに保存されているデータを対象とした検索機能を実装するために、ビジネス データ カタログとカスタム開発のストアド プロシージャを使用しました。SQL Server 2005 には、検索結果として特定のページをすばやく返すための、最適化された関数 (ROW_NUMBER) が組み込まれています。

さまざまなカスタムの高度な検索ページでページ コンテンツを検索するために、CAML クエリを使用しました。クエリのパフォーマンスを最適化するために、CAML クエリはページング機能と共に実装されました。ページングの詳細については、以下を参照してください。

SPQueryRowLimit プロパティの数を指定することで、CAML クエリから返されるアイテムの数を制御しました。SPQuery には、CAML クエリのページングを制御するための ListItemCollectionPosition プロパティもあります。

Web サイトのバックエンド メーリング リストを処理するために、CRM ソリューション を使用しました。また、メーリング リストと SharePoint の統合をサポートするために、カスタム CRM エンティティを開発しました。その後で、エンド ユーザーから情報を取得し、その情報を CRM へ送るために、カスタム Web フォームを開発しました。

Web フォームが、InfoPath フォーム送信に必要な XML を生成します。このため、ユーザーが Web フォームを入力すると、入力済みの InfoPath フォームがプログラムによって生成されて InfoPath フォーム ライブラリに送信されます。これにより、裁決機関の担当者は、InfoPath を使用してフォームの処理や更新を実行できます。InfoPath では、ブラウザーを上回るユーザー エクスペリエンスが提供されます。

Vivid Group 開発チーム
http://www.vividgroup.com.au

Published Tuesday, May 27, 2008 10:53 AM by sptblog

これは、ローカライズされたブログ投稿です。原文の記事は、http://blogs.msdn.com/sharepoint/archive/2008/05/27/how-we-did-it-australia-national-native-title-tribunal-website-advanced-web-content-management.aspx をご覧ください。

開発内容: Nintex Reporting

本日のゲスト ブロガーは、Microsoft SharePoint の前プロダクト マネージャーであり、現在は Nintex でプロダクト テクノロジ部門の副代表を務めている、Mike Fitzmaurice 氏です。Microsoft の認定ゴールド パートナーとして、Nintex は、Microsoft の戦略上および設計上の方向性に沿って、SharePoint プラットフォーム上に構築される製品の開発に携わっています。

多くの SharePoint 展開で一般的に求められていることは、SharePoint ファームについて、現在既定で使用できるレポートよりも詳細なレポートの作成が実現されることです。本日のブログでは、Mike 氏はレポートに対するニーズについて説明し、その後で、Nintex Reporting がどのように機能するかについて説明します。この中では、技術的な方法に対する洞察、およびデザイン上のいくつかの決定事項 (Silverlight を Web パーツに組み込むために SQL Server のデータ ウェアハウジング機能を使用することなど) に関する合理性を示します。Mike 氏の記事が、SharePoint プラットフォーム上に構築可能なソリューションの構想に役立つことを希望しています。では、Mike 氏の記事をお読みください。

Dave Pae
SharePoint テクニカル プロダクト マネージャー

開発内容: Nintex Reporting

Nintex Reporting という製品名は、その機能を的確に表しています。Nintex Reporting は、SharePoint 資産を所有/管理するすべてのユーザーを対象とした、コンテンツ/共同作業の分析レポートに必要なすべての機能を備えています。これは、SharePoint ファームに関するレポートを作成するソリューションであり、SharePoint ファームに代わってレポートを作成するためのものではありません。Nintex Reporting では、以下の情報がレポートされます。

  1. サイト コレクション、サイト、リスト、およびライブラリのサイズ
  2. 表示/ダウンロード/編集/チェックアウトなどの対象となるドキュメント
  3. 日/週/月/年単位のさまざまな時点におけるアクティビティの相対的な量 (アクティビティの種類によって分類することも可能)
  4. ドキュメント ライブラリ内にあるコンテンツの、ファイルやコンテンツなどの種類ごとの分類
  5. 各サイトで有効な機能
  6. コンテンツ データベース内でのコンテンツの分布状況
  7. 定期的に使用されているディスカッション掲示板 (またはリスト)
  8. リスト コンテンツを投稿しているユーザーまたはドキュメント コンテンツ/ページ コンテンツを作成しているユーザー
  9. 長期間チェックアウトされたままのドキュメント
  10. 長期間使用されていないサイト
  11. 検索を使用しているユーザー、実行中のクエリ、および検索範囲
  12. コンテンツが表示される頻度および更新される頻度

実際には、これら以外にも多くの情報がレポートされます。Nintex Reporting には 75 種類以上のレポートが用意されており、それらの多くはドリルダウン レポートの定義を備えています。Nintex Reporting のインストールして使ってみたいとお思いになったら、今すぐお試しください。きっと満足していただけます。

弊社では、Nintex Reporting の有用な機能が、お客様にとっても有用な機能であると考えています。

背景

以前、Mike Fitzmaurice 氏 がブログで、SharePoint の構成データベースとコンテンツ データベースには手を出さないようにと警告したことを覚えているでしょうか。コメントされたフィードバックの中には、「SharePoint ファームで何が起こっているかをレポートできるようにする必要がある」といった意見がありました。これは当然な意見です。データベースに対してクエリを実行しないならば、SPSReport などを使ってオブジェクト モデルに対してクエリを実行するしかありません。そのようなやり方は速度の点で劣り、アドホックのテストや分析にも向いていません。

両者の利点を組み合わせたのが Nintex Reporting です。そのプロセスは以下のとおりです (詳細は後で説明します)。

  1. コレクターが SharePoint オブジェクト モデルを定期的にクロールし、検出した情報をデータ ウェアハウスに記録します。
  2. データ ウェアハウスには、クエリを簡単に実行できる ROLAP スキーマ (厳密には、スノーフレーク ディメンションと複数のファクト テーブル) で収集された情報が保持されます。
  3. データ管理サービスにより、スケジュールに基づいてレポートが実行され、その結果が結果キャッシュ データベースに保存されます。これによってレポート結果のセットが作成されます。作成されたセットは、クエリを毎回実行しなくても繰り返し簡単に取得できます。
  4. カスタムの Silverlight コントロールを含んでいる Web パーツを多用するユーザー インターフェイス (カスタムの SharePoint サイト アプリケーション) により、結果キャッシュやデータ ウェアハウスのデータをクエリおよび表示します。クエリや表示の対象は、ほとんどの場合は結果キャッシュですが、レポートの再実行や詳細のドリルダウンを行う場合はデータ ウェアハウスが対象になります。

原理的に、SharePoint ファームとやり取りできるのはコレクター (SharePoint オブジェクト モデル用および Windows パフォーマンス モニター カウンター用) だけです。それ以外の要素は、基本的に SharePoint サイト (データベースへのクエリを実行する Web パーツを含んでいる) のものである UI であっても、やり取りを行うことはできません。

次に、Nintex Reporting のプロセスを構成する各項目について説明します。

コレクター

コレクターは、SharePoint ファーム内の 1 つ以上の Web フロント エンド (WFE) で実行される、軽量なマネージ コード サービスです。私たちは、コレクターを作成するための標準 API を作成しましたが、Nintex Reporting に付属するのはそのうち 2 種類です。1 つはパフォーマンス モニターのカウンター データ用の API、もう 1 つは SharePoint オブジェクト モデルからデータを収集するための API です。

SharePoint コレクターは、 調整可能なスケジュールに基づいて、SharePoint ファームの階層を検索し、Web アプリケーション、サイト コレクション、サイト、リスト/ライブラリ、およびアイテム/ドキュメントの有無を調べます。これらが見つかると、データ ウェアハウスに記録されます。

構造やコンテンツの検索は容易ですが、アクティビティの検索はどうでしょうか。結論から言うと、アクティビティに関する実用的な情報を取得する唯一の方法は、目的のアクティビティ データに関連するリスト/ライブラリに対して監査ポリシーを適用することです。Windows SharePoint Services のみを使用している場合であっても、監査ポリシーは存在します。ポリシーを取得するための UI が公開されていないだけです。プログラムを使用すれば、どこでも監査を有効にすることができます。監査ログからデータを収集することでコンテンツ データベースがオーバーフローするのを避けるために、監査ログを取り除くこともできます。

監査ポリシーの代替となる多くの方法を調べましたが、悪影響のリスクが最も低く、最も有用なデータが得られるのが、監査ポリシーによる方法でした。他の方法の例を以下に示します。

  • IIS ログから最適な情報を抜粋しても、何が行われているかについて十分に理解することはできません。どのような状況なのかを把握することはできますが (ページまたはドキュメントの場合)、実際に何が行われているかを把握することはできないのです。IIS ログでは、下書きの保存、チェックイン、およびドキュメントの発行アクティビティが区別されません。また、IIS ログには監査以外の機能はほとんどありません。
  • JavaScript トークンをすべてのページに貼り付けることは、ページ以外の SharePoint アセット (例: ドキュメント) に適した方法ではありません。また、ユーザーに各マスター ページの変更を要求することは望ましくありません。さらに、ページが問題にならないこともあります。タスク リスト アイテムを編集するときには、何を基準にするのか (アイテムを変更することか、またはページを投稿することか) を考慮する必要があります。
  • HTTP ハンドラーを記述するというのも一つの考えですが、HTTP ハンドラーによって余分な割り込みが発生したり、不安定な動作が引き起こされる可能性があります。このようなやり方は、安易に採用すべきではありません。
  • WSS/MOSS の利用状況分析処理の出力を抜粋することも、1 つの方法として考えられました。この方法は、(a) 提供されない情報がいくつか存在すること、および (b) 非常に多くの情報を事前に収集するが、ユーザーや要求の種類などに基づいて細かく分類するための生データが手に入らないことの 2 点がなければ、採用されていたでしょう。

以上のような代替方法よりも監査ポリシーが優れている点は、監査がすぐに有効になり、法令遵守に関する問題に対処できるという点です。こうした状況では、Nintex Reporting が示す追加のオーバーヘッドはゼロになります。さらに、Microsoft は、ファームの動作に対する監査ポリシーの影響を最小限に抑える対策を実施しました (影響がゼロになるわけではありませんが、どのような方法でも影響はゼロにはなりません)。

コレクターは、収集した情報を直接データ ウェアハウス データベースに記録します。コレクターが複数の Web フロント エンドにインストールされている場合、コレクターは、ウェアハウスでセマフォのような情報を使用して、2 つのコレクターが同じデータを収集するのを防ぎます。

また、特定の種類のアクティビティ (MOSS Search Gatherer、ポータル管理者など)、および特定の種類のコンテンツ (CSS ファイルなど) をコレクターが無視するようにできます。

データ ウェアハウス

Nintex Reporting で実際に使用されるデータベースは 2 つあります。1 つは、実際のデータ ウェアハウスのデータを格納するためにのみ使用され、もう 1 つは、それ以外のすべての情報 (構成データおよび以前に実行したレポートのキャッシュ結果など) を格納するために使用されます。

データ ウェアハウスは、3 種類のファクト テーブル (パフォーマンス モニター カウンター用、検索実行用、およびコンテンツ監査イベント用) に基づいて機能します。リスト アイテム/ドキュメントは、実際にはディメンション テーブルですが、 (アクティビティではなく) コンテンツや構造に関するレポート作成では、事実上のファクト テーブルの役割を果たします

また、レポート (実質的にはレポート定義) は、実際には SQL Server のストアド プロシージャです。オーサリングやコンパイルを容易にするために、これらのレポートもデータ ウェアハウス データベースに格納されます。

実際には、コレクター サービスをサポートするために、ウェアハウスにはその他のデータもいくつか格納されます。主なデータは、コレクション情報の読み取りやポストを実行するための場所に関するデータです。このデータによって、複数のコレクターが同じデータを収集することがなくなります。このデータがデータベースに格納されるのは、コレクターが 1 つのデータベース接続を維持するだけで済むようにするためです。

構成/キャッシュ データベース

構成/キャッシュ データベースは、データ ウェアハウスの用途以外のすべての場合に利用されます。このデータベースには、レポート スケジュールのセット (実行するレポートと、その実行日時、およびパラメーターの指定)、アクセス制御リスト (レポート スケジュールの表示/編集/実行が可能なユーザーの指定)、ダッシュボードの統計を書式設定するためのレイアウト情報、購読情報など、多くの情報が格納されます。

重要なことは、各レポート定義に対して 1 つの出力キャッシュ テーブルが存在することです。アドホック レポートではなく、スケジュールされたレポートがデータ管理サービスによって実行されると、実行結果はこれらの出力キャッシュ テーブルにリダイレクトされます。そのため、レポート全体を再実行しなくても、レポートの実行結果を必要に応じてすばやく取得できます。また、以前の実行結果の履歴全体を検索することもできます。

データ管理サービス

データ管理サービスは、レポートの実行スケジュールを調べ、必要に応じてレポートを実行します。また、管理者の設定に従って古いウェアハウス データやレポート結果を削除して、データ ウェアハウスと構成/キャッシュ データベースを維持管理します。

データ管理サービスはどのコンピューターにもインストールできますが、その機能は標準のユーザー要求の範囲から外れています。このため、データ管理サービスは、WSS/MOSS タイマー ジョブや他のスケジュールされたタスクを実行しているコンピューターにインストールすることをお勧めします。

ユーザー インターフェイス

Nintex Reporting のインターフェイスには、3 つの重要な部分があります。具体的には、単一レポートの ビュー、ダッシュボード (複数のレポートを同時に表示します)、および管理 UI です。これらは、任意の場所に作成できる Nintex Reporting SharePoint サイトの内部に置かれます。

単一レポート スケジュールのビュー (1 つのレポート定義に多くのスケジュールが含まれている場合があり、そのスケジュールにはそれぞれ独自のパラメーター、実行頻度、および権限があります) は、次のように 4 つの Web パーツから構成されます。

clip_image002[4]

上の図に含まれている Web パーツに表示されるのは、(1) スケジュールのパラメーターと実行履歴 (前の時点の結果を参照したい場合)、(2) レポートに関する Silverlight ベースのグラフ形式のビュー、(3) 同じデータの表形式のビュー、(4) レポートに対して実行できる有効な操作 (すぐに実行、スケジュールの編集、PDF または Excel へのエクスポート、購読) です。

これらの Web パーツは、相互に影響を受けることなく、それぞれのデータを取得できます。ただし、各 Web パーツは接続可能で、既定では、上図の Web パーツ 1 (パラメーター/アーカイブされたレポート) から取得するレポート結果のセットを示す情報を受け取ります。1 つのページ上の複数のパーツがデータを取得する場合は、可能であればプール/キャッシュされたオブジェクト データ ソースが使用されます。

グラフ形式の Web パーツでは、当社独自の Silverlight 1.0 コントロールを使用しています。このコントロールは、ASP.NET ページを呼び出すことによってデータを取得します。この ASP.NET ページは、上記のオブジェクト データ ソースから、そのまま読み込むことができる XAML データを返します。Silverlight を採用したのは、豊富な機能と対話的な視覚効果を備えたメソッドを構築できるからです。このメソッドは、1 つのコードベースで WSS にスケール ダウンしたり、MOSS にスケール アップすることができます。また、.NET 開発スキルを活用でき、グラフィック処理の負荷をブラウザに移すことでサーバーへの負荷を抑えることも可能です。ただし、最近のバージョンの Silverlight は、当時まだ出荷されていなかったため、考慮されていません。

ダッシュボード ページでは、グラフ形式の Web パーツを複数使用しています。Web パーツごとにオブジェクト データ ソースを使用してデータを取得/キャッシュするため、単一のレポート ページに比べて、より多くのデータを取得/キャッシュして、ダッシュボード ページに表示することができます。

個々のレポートではなくダッシュボードを購読する場合、どのレポート スケジュールが、どのダッシュボードに表示されるかが追跡されます。また、購読のチェック/通知は、カスタムの SharePoint スケジュール タスク ジョブによって処理されます。

UI を Nintex Report Center サイトに置くことには、2 つの目的があります。第 1 の目的は、すべての要素を単一の場所に配置して、ナビゲーションや構成などに利用することです。第 2 の目的は、管理者がレポートをセキュリティで保護できるようにすることです。これを行うには、サイトの特定のユーザー/グループに対して、特定のレポート スケジュールの編集/実行/表示を許可します。Active Directory の統合セキュリティ モデルに依存することは避けたかったので、SharePoint のユーザー/グループを使用する必要がありました。

すべてのレポート スケジュールは、任意のサイト コレクションに含まれる任意のサイト (ユーザーの個人用サイトなど) 上の Web パーツで表示できます。ただし、レポート スケジュールは、Nintex Reporting サイト内で割り当てられた権限に左右される可能性があります。

まとめ、および今後の開発

Nintex Reporting の目標は、IT 管理リソースへの影響を最小限に抑え、ユーザーからの要求に可能な限り応えて、ユーザーが有用な情報を取得できるようにすることです。Nintex Reporting は、共同作業コンテンツを対象としたコンテンツ/使用状況の分析に適用されるビジネス インテリジェンス テクノロジーです。

特に重要な点は、Nintex Reporting では SharePoint ファームを特別な機能として利用していることです。SharePoint は、Web ページのセットというよりも、むしろ共同作業資産のセットに近い存在です (当社が実現しつつある Web コンテンツ管理サイトには両方の機能があります)。さらに重要な点は、リスト アイテムを表示するページでしょうか、またはアイテム自体でしょうか。ここでのソリューションは後者に焦点を当てていますが、Nintex Reporting のアーキテクチャは両方に対応しています。

Nintex は、この製品を市場に出せることに喜びを感じています。ただし、ここで一息つくというわけではありません。数か月以内には、以下の 3 つの重要な領域を中心に据えて、Nintex Reporting を大幅に進化させる予定です。

ソフトウェア開発キット (SDK)。これは間もなく実現されます。ソフトウェア開発キットでは、組織のニーズに応じた新しいレポート定義の追加や既存のレポート定義の変更に焦点を当てています。また、データ ウェアハウスに関する詳細な説明も含まれているので、クエリの対象となるデータについて理解できます。カスタム レポートのサンプルも付属しています。このサンプルを利用するには、SQL Server ストアド プロシージャの開発スキルが必要ですが、新しいレポートは XML としてエクスポートし、別の場所にインポートすることで、構築/テスト/展開のシナリオで利用することができます。

SDK の更新プログラムには、カスタム コレクターを作成し、完全に新しい種類のデータでウェアハウスを設定する方法が含まれています。また、SQL Server Analysis Services および SQL Server Reporting Services でウェアハウスを使用する方法のサンプルも付属しています。

アイテム別使用状況の調査。当社が用意したすぐに使用できるレポートのほとんどは、調査のために個別のアクティビティにドリル ダウンできますが、アイテム別使用状況の調査では、その対象を個別のドキュメントやリスト アイテムなどにすることもできます。そのために必要となるデータは既に存在するため、完全に UI への追加だけでデータ ウェアハウスへの投資を活用することができます。

サイト固有のレポートの自動準備。特定のサイトを対象範囲としたレポート スケジュールを作成することは、現在でも可能です。また、レポート スケジュールを表示する Web パーツが対象のサイトに含まれていれば、そのサイトに新しい Web パーツ ページを作成することもできます。サイト固有のレポートの自動準備を使用すると、レポートを準備し、対象となるサイトにページを追加することが、1 つの操作 (該当するサイトでの機能の有効化) によって可能になります。そのため IT 部門は、Nintex Reports の一連の機能を 1 つのサービスとして、個々のサイト所有者に対して簡単に提供できるようになります。

サイト/リスト/アイテムのセキュリティに関するレポート。権限の変更に関するレポートはまだ作成できません (このような変更は監査によって検出され、ウェアハウスへの保存は可能)。ただし、この種のレポートは中期的な更新作業によって導入される予定です。また、サイト/リスト/アイテムに関する操作を実行できるユーザーについてのレポートも導入されます。

Web ページ分析に関するレポート。上記のコメントで示したように、SharePoint サイトに含まれる情報の方が、それをアプリケーションでどのように表示するかよりも重要です。ただし、Web 発行サイトについてはこの限りではありません。私たちは、Web 発行サイトの利用状況データを他の Web 分析ソリューションと同レベルで収集できる、新しい方法を開発中です。これは、Nintex Reporting のユーザーがページヒット数やクリックスルーの数などを調べることができるようにするものです。ただし、データ ウェアハウジング、レポート生成、および表示の各機能とデータ収集機能は分離されているため、この新しいレポートは、製品の設計に対する大きな機能強化ではなく、新しいカスタム コレクターの開発になると考えられます。

ユーザーは、コンテンツの作成、編集、およびテスト準備が行われるサイトに対する、現在の監査ベースのアクティビティ収集方法を、両方とも引き続き使用できるように希望していると考えられます。適切な方法を組み合わせることによって、アクティビティの状況を把握できます。たとえば、誰がコンテンツを開発しているか (現在でも当社製品で可能)、どれくらいの量のコンテンツが一般に読まれているか (従来からの Web 分析製品は対応しており、当社も近く対応します) などです。

長期的には、データ ウェアハウスをさらに活用して、データ マイニング テクノロジを利用した完全に新しいソリューションを作成する方法について調査する予定です。法令遵守の監視機能、しきい値ベースの警告、および調査済みのパターンに従って実行される管理操作はすべて、アーキテクチャが役立つシナリオです。ただし、これらのシナリオについては、別の機会に解説します。

Published Thursday, December 04, 2008 3:24 PM by sptblog

これは、ローカライズされたブログ投稿です。原文の記事は、http://blogs.msdn.com/sharepoint/archive/2008/12/04/how-we-did-it-nintex-reporting.aspx をご覧ください。

MOSS をゲームに活用 - Glu Mobile の Web サイト (www.glu.com) - 開発内容 - パート 1/3

米国における Microsoft の認定ゴールド パートナーである Allin Consulting 社は、最近、Glu Mobile 社の Web サイト (www.glu.com) を実装しました。Glu Mobile 社は、モバイル ゲームやエンタテインメント製品の開発と提供を行う代表的な企業です。Allin 社は、SharePoint と .NET に関連するソリューションを開発してきました。この開発は、両方のプラットフォームのバージョンが "1.0" のときから行われています。以下に示すのは、Allin 社のチーム (Shawn Parker、Robert Sweeney、Eric Hansen、Stefan Nilsson、および Karl Kuhnhausen) が glu.com Web サイトをどのようにして設計し、開発したかについて説明する、3 部構成のシリーズの第 1 部です。
image

<Lawrence />

 

Glu Mobile 社の Web サイト (www.glu.com) は、4 月後半に稼動してしばらくすると、SharePoint コミュニティや Microsoft から、大きな注目を集めるようになりました。Microsoft から我々のチーム (Allin Consulting 社 のチーム) に連絡があり、「開発内容」というシリーズのブログ エントリ作成を依頼されました。このシリーズでは、魅力ある外観を備え、高速で動的なインターネット向け Web サイトの構築にあたって、MOSS 2007 をどのように活用したかを詳細に説明します。SharePoint 上でこのような機能豊富でインタラクティブなユーザー エクスペリエンスを開発できたことが、一部の人にはまだ信じられていないようです。この Web サイトが本当に SharePoint に基づいていることを証明するために、標準の青とオレンジの [Site Actions] メニューを使用しました。このメニューは、必要な権限を持つユーザーがログインすると表示されます。
image 

このブログ エントリのシリーズは、次の 3 部で構成されています。

  • 第 1 部: ソリューションの概要 - コンテンツ配信と複数言語機能に焦点を当てたソリューションの調査
  • 第 2 部: マスター ページとユーザー コントロール – どのようにして機能豊富なユーザー エクスペリエンスをマスター ページとカスタム Web パーツに設定したか
  • 第 3 部: パフォーマンス – 中心となるキャッシュ – どのようにしてさまざまな機能を最適化し、Web 閲覧者の期待に沿うようなパフォーマンスをサイトで実現したか

Glu 社では、Web サイトの再設計と再稼動を必要としていました。その目的は、世界規模の収益増加、および近い将来の IPO (ビジネスにとっては深刻な問題) に合わせるためです。以前のサイトには製品のマーケティングを行う機能がありましたが、このサイトには制限があり、コンテンツの管理、および拡大する顧客への製品の配信や販売を容易には行えませんでした。以前のサイト (下図参照) は PHP で構築されており、コンテンツの発行には開発者の操作が必要でした。
image

Glu 社は、私たち Allin Consulting 社のチームに対して、次世代の "Glu 2.0" Web サイトの開発を依頼しました。サイトは動的で、ブランドが強調され、販売活動に対応したソリューションとして開発するというのが先方の希望であり、効果的な Web コンテンツ管理も要求されました。Glu 社のビジネス モデルは、ユーザーが自分の携帯電話キャリアとデバイスで使用できるゲームのリストをすばやく手に入れられるようにすること、ユーザーがオンラインでゲームを試すことができるようにすること、そしてユーザーのデバイスでゲームの購入とダウンロードを簡単に実行できるようにすることでした。サイトの主要な機能は、以下のとおりです。

  • ユーザー プロファイルの管理と個人用設定が可能で、対象となるコンテンツとプロモーションを複数言語で提供
  • コンポーネントのモジュール化 - 人気の高いゲーム、お気に入りのゲーム、最新ゲーム、プロモーション、ローテーション広告などの機能を持つモジュールのセットとしてコンテンツを公開
  • 検索機能 - フルテキスト検索を使用して、人気の高いゲームをすばやく見つけることができるようにする
  • ゲームの販売とダウンロードをすばやく実行するための SMS 統合
  • 分散コンテンツ管理および発行 - 技術的な知識を持たない各地のコンテンツ所有者が自分のコンテンツを管理できるようにする
  • 参照や購入行動を追跡することによるユーザー分析

開発当初から、チームの設計理念は、ASP.NET 2.0 と MOSS 2007 の優れた部分を統合して、高機能かつ管理可能でスケーラブルなサイトを短期間で実装することでした。プロジェクトの価格設定段階では、オープン ソースの LAMP ベース (Linux、 Apache、MySQL、PHP/Perl/Python など) の CMS ソリューションも検討しましたが、MOSS 2007 の Web コンテンツ管理 (WCM) とプラットフォーム機能を Web サイト構築の強固な基礎として使用することにしました。サイトの初期稼動までの、ソリューション全体の開発期間は約 16 週間でした。

テキストおよびグラフィカル コンテンツはすべて、SharePoint リストに保存され、管理されて、カスタム Web パーツを含む 11 種類の共通ページを使って動的に表示されます。ただし、Flash ベースのトレーラーとゲーム エミュレーターは、メディア サーバーを使用する方が適切なので、除外されます。コンテンツの管理は、"Glu Content Manager" によって行われます。これは、初期状態の SharePoint で使用できる WCM 機能を利用します。カスタムの WCM 機能を開発する必要がなかったため、マスター ページ、Web パーツ、およびカスタム フレームワークの機能とユーザー エクスペリエンスを、Glu 社のビジネス要件を満たすように開発することに集中できました。[Genre] リストでゲームのジャンルを操作するグラフィックのスクリーンショットを以下に示します。
image

glu.com には 2 つの面があります。それぞれの目的は異なり、対象ユーザーも異なります。1 つは、多くのグラフィック、ストリーミング ビデオ ゲーム トレーラー、デモ ゲーム、およびゲームの購入とダウンロードを行うためのモバイル キャリアとの SMS 統合を備えた、パブリック サイトです。このサイトは、世界中の数十万というユーザーに複数の言語で対応し、ゲームの検索、試用、購入ができます。あらかじめ定義した期間内であれば、ゲーム リストを参照して、利用可能なすべてのゲームをエミュレーターで試用できます。この試用によって、ゲームをプレイしたときの感覚を体験することができます。個人用設定も試用ユーザーに関する重要な情報です。地域、言語、モバイル キャリア、モバイル デバイス、および製品の人気に関するユーザーの設定に基づいて、関連するモバイル ゲーム、着信音、壁紙のプロモーションが自動的に行われます。私たちは Allin ("オールイン") 社のチームなので、 お気に入りのゲームはこれです。:-)

glu.com のもう 1 つの特徴は、主なコンテンツ発行者である Glu 社の従業員をサポートする安全な環境です。コンテンツ発行者は、ゲーム、壁紙、着信音、および製品レビューについて、さまざまなコンテンツ、グラフィック、言語をすべて管理します。プレス リリースや人材募集などの企業情報も管理の対象です。このようなコンテンツ発行者にとって最も重要なことは、デジタル資産の効果的な管理と発行方法です。コンテンツ発行者は、この安全な環境ですべての Web コンテンツの管理と更新を行います。変更内容は、パブリック サイトに発行されます。

パブリック インターネット ユーザーとコンテンツ発行者の両方をサイトでサポートするために、2 つの異なる認証プロバイダーを使用しました。社内のコンテンツ発行者に対しては、標準の Active Directory メンバーシップ プロバイダーが有効でした。しかし、外部ユーザーの情報を AD に格納することは避けたかったので、ASP.NET 2.0 プロバイダーを基礎として、その上に独自のカスタム認証プロバイダーを構築しました。このプロバイダーは、WSS 3.0 の方法を使用することにより、MOSS で簡単にサポートできます。すべての外部ユーザーは、サイトに "ログイン" しても、IIS と MOSS から見ると匿名ユーザーのままです。このことは、ソリューションの目的に合っています。個人用設定とコンテンツの配信用にカスタム コントロールのセットが提供されているため、外部ユーザーは標準の MOSS メンバーシップ機能を必要としないからです。

サイトのパブリック ビューに関する最も重要な機能の 1 つは、個々のユーザーに合わせて、ページのコンテンツを調整できるということです。この機能を実現するために、ユーザー名とパスワード、および Web サイトで製品を購入する際に必要となる基本的な情報 (携帯電話の電話番号など) を使用して、各ユーザーがプレイヤーのプロファイルを作成することを許可しました。スパマー ボットがサイトに自動登録するのを防ぐために、CAPTCHA コントロールがユーザー登録ページの一部として追加されました (下図参照)。
image

ユーザーがサイト内を移動している間に製品をクリックすると、その操作が記録され、それに基づいて類似の製品のコンテンツが表示されます。ユーザーが "ログイン" していない場合でもクリック操作は追跡され、プロキシ プロファイルに関連付けられます。このプロファイルは、そのユーザーが後から登録すると、実際のプロファイルに置き換えられます。この機能を利用すると、ユーザーが興味を示した種類の製品に焦点を絞ってサイトが提示するため、ユーザーが登録する確率を高めることができます。ユーザーに対しては、新しいゲームの予告広告、発売予定のタイトル、関連製品のタイトル、およびユーザーが最も利用したジャンルでの売れ筋ゲームや人気ゲームも提示されます。クリックを追跡したデータはすべて、SQL Server 2005 データベースに保存されます。

パブリック サイト全体が、カスタムの ASP.NET 2.0 Web パーツ モジュールとして構築された論理コンポーネントに分割されました。その後、これらのコンポーネントが SharePoint ページに配置されました。SharePoint Web パーツを開発する予定はありませんでした。これは、標準の ASP.NET 2.0 Web パーツで構築したカスタム機能に対して SharePoint Web パーツの機能 (および重み) を加える必要がなかったためです。各モジュールは、ページの種類、およびユーザーの国や地域に基づいて、SharePoint リスト コンテンツを表示するようにコード化されています。Web パーツをホーム ページに配置し、ユーザーが米国でログインすると、米国の顧客に適用されるコンテンツのみが表示されます。このとき、最も人気のあるゲームから表示されます。同じ Web パーツをジャンル ページ (カジュアル、クラシック、スポーツなど) または製品ページに配置した場合、コンテンツがさらにフィルター処理され、参照しているジャンルに関するコンテンツ、または製品ページに紹介されている製品のジャンルに関するコンテンツのみが表示されます。たとえば、優先する国として英国を選択すると、スポーツのジャンル ページではクリケットやフットボール (サッカー) ゲームが注目のゲームとして示されます (下図参照)。
image

Glu 社の Web サイトに関する重要なビジネス要件として、64 か国で使用される 10 種類の言語をサポートするというものがありました。MOSS のバリエーション機能を使用する場合、作成した 11 の共通の発行ページで国/地域コードと言語コードを各バリエーション サイトが利用すると、サポート対象のページ数は 7,000 を超えます (64 か国 x 10 言語 x 11 ページ = 7040 合計ページ)。これは、コンテンツを動的に表示する共通ページの数を可能な限り少なくするというチームの目標に合致しません。

合計ページ数を削減するために、代替のサイト バリエーション機能の利用を検討しました。このバリエーション機能では、地理的な地域 (北米、EMEA など) をサポートしており、それぞれの地域に応じた適切な言語を取得します。64 の国を 5 つの地域に統合すると、合計ページ数は 55 ページになります。これにより、ローカライズ作業や継続的なメンテナンスが大幅に簡素化されました。カスタムのバリエーション エンジンを使用すると、柔軟性が高まり、すべての言語とすべての国を組み合わせて、適切なページを動的に表示できるようになりました。現在では、ブラウザの国と言語を検出し、それぞれの国を対象とした適切な地域のサイトへリダイレクトしていますが、ユーザー プロファイルを使用すれば、ユーザーは 64 の国と 10 の言語の組み合わせを自由に選択できるようになります。

コンテンツとコントロールがすべてローカライズされたページのスクリーンショットを以下に示します。
image

ユーザーは優先する言語をコントロールで選択できます。優先言語の部分をクローズアップした画像を以下に示します。
image

MOSS 2007 は、ASP.NET 2.0 を基盤とする WSS 3.0 上に構築されるため、Glu 社の要求に応じた、市場で注目されるカスタム ソリューションを柔軟に作成することができました。同時に、MOSS を使用することで、Web コンテンツ管理のすべての機能を提供することができました (開発に数か月を要します)。このブログ シリーズの第 2 部では、マスター ページとカスタム Web パーツで、機能豊富なユーザー エクスペリエンスをどのようにして開発したかについて詳しく説明します。このブログについて質問がある場合は、コメントを書き込んでいただくか、電子メールで glu-team@allincal.com までご連絡ください。

 

Glu.com チーム (Allin Consulting)

  • Shawn L. Parker - ソリューション アーキテクト
  • Robert Sweeney - シニア コンサルタント
  • Eric Hansen - プロジェクト マネージャー
  • Stefan Nilsson – プラクティス マネージャー
  • Karl Kuhnhausen – プラクティス ディレクター
Published Thursday, June 14, 2007 3:48 AM by sptblog

これは、ローカライズされたブログ投稿です。原文の記事は、http://blogs.msdn.com/sharepoint/archive/2007/06/14/moss-has-got-game-glu-mobile-s-website-www-glu-com-how-we-did-it-part-1-of-3.aspx をご覧ください。

Tomoye Ecco と SharePoint の統合 – 開発内容および新たな開発に向けて

概要

Tomoye Ecco は、.NETベースの実践コミュニティ (CoP) ソフトウェア アプリケーションです。"COP" とは、共通の目標または専門知識を持つ人々の集団が、1 つの組織全体または複数の組織間で共同作業を容易に行うための場所です。オンラインの COP では、メンバーは相互に質問や回答を交わすことができます。また、専門家を探したり、Web からアクセスできるドキュメントなどのコンテンツを共有することも可能です。COP は、共有されるコンテンツ自体に対しても、そのコンテンツを共有する集団に対しても、 "コミュニティ情報" を付け加えます。このようなコミュニティ情報には、タグ、ブックマーク、親切でアクティブなユーザー、つながりの強い集団、最高ランクのコンテンツなどがあります。

コミュニティは複数のプロジェクト チームにまたがることもあり、チームのコンテンツが実践コミュニティ内で参照されることもあります。このようなチームは、共同作業やコンテンツ管理のために SharePoint サイトを頻繁に利用するため、COP ソリューションは以下をサポートする必要があります。

  • Ecco コミュニティおよび SharePoint チーム サイトへのコンテンツの公開、およびこれらのコミュニティやサイトからのコンテンツの公開
  • Ecco コミュニティ サイト内からの SharePoint チーム サイトの参照
  • Ecco コミュニティおよび SharePoint チーム サイト全体を対象としたシングル サインオンのサポート
  • Ecco コミュニティが SharePoint チーム サイト内の状況を知ることのできる RSS フィード
  • Ecco コミュニティと SharePoint チーム サイト全体を対象としたインデックスと検索

開発内容のほとんどは、特に複雑なものではありませんが、ユーザーにとっては非常に大きな価値があります。以下に説明する統合機能の一部は、無償で SharePoint に提供されていますが、ユーザーにとっては付加価値になるものです。

開発内容

SharePoint から Ecco へコンテンツを公開するために、SharePoint リスト アイテムに対するカスタム メニュー操作によってアクセスするアプリケーション ページを作成しました。アプリケーション ページとカスタム操作は、SharePoint ソリューション (.WSP) ファイルを使用して展開され、機能としてアクティブ化されます。アプリケーション ページは、SharePoint のオブジェクト モデルを使用して、選択されたリスト アイテムの情報を収集します。また、Tomoye Ecco 内にあるページへの HTTP リダイレクトも使用します。このページでは、リスト アイテムの情報が Ecco に追加されます。アイテムが Ecco に追加されると、ユーザーは SharePoint ページに戻ります。

同様に、ユーザーが SharePoint コンテンツにブックマークを設定できるようにするカスタム操作も追加しました。このようなブックマークは、ユーザーのコミュニティ プロファイルの一部として表示されます。


図 1: SharePoint サイトから Ecco コミュニティに公開する

Ecco で SharePoint ドキュメントを参照するために、別のアプリケーション ページを開発しました。このアプリケーション ページを使用すると、ユーザーはサイト コレクション内を移動し、参照するファイルを選択することができます。ドキュメントが参照されると、ユーザーは、Ecco からドキュメントへのリンクを使用できるようになります。また、ドキュメントの内容を Ecco へコピーすることもできます。


図 2: Ecco コミュニティから参照する SharePoint サイトのファイルを選択する

コミュニティの内部では、関連するチーム サイトをメンバーが把握できるようにする必要があります。メンバーにとっては、チーム サイトへの参照が、関連するコミュニティやコミュニティ トピック内に表示されていると便利です。また、コミュニティやコミュニティ ベースのコンテンツを検索するときに、関連するチーム サイトが表示されることも望まれます。


図 3: Ecco 内から SharePoint サイトを表示する

Ecco は、プラグ可能なカスタムの認証フレームワークを備えています。SharePoint でシングル サインオンをサポートするために、Windows (Active Directory) 認証をサポートする、Ecco 用の認証モジュールを開発しました。これは単純なモジュールで、ASP.NET プラットフォームに組み込まれている Windows 認証サポートを使用します。

チームが求めているのは、SharePoint サイトを離れることなく新しいコミュニティ コンテンツを把握することです。このために、Ecco 全体でフィードを提供しました。このフィードは、組み込みの RSS ビューアー Web パーツを使用することで、簡単に SharePoint サイトに組み込めます。


図 4: SharePoint サイトでの Tomoye Ecco コミュニティ RSS フィード

SharePoint を使用して Ecco コミュニティ コンテンツにインデックスを付けるために、"クローラー開始ページ" を作成しました。このページでは、SharePoint Search のクロール対象になるすべてのページのリストが生成されます。Ecco の管理者は、UI がクロールされたときに UI のどの部分が取得されるかを設定できます。管理者はこの機能を使用することで、繰り返されるコンテンツ (UI クロームやブランド設定要素など) が検索インデックスに含まれないようにすることができます。


図 5: インデックス付けされた Ecco コミュニティ コンテンツに対する SharePoint Search の検索結果

新たな開発に向けて

Ecco は 100% 純粋な ASP.NET 2.0 アプリケーションであり、多くのビジネス ロジックを備えているため、当社のアプリケーションを "_layouts アプリケーション" として SharePoint に直接移植するテストを行っています。この移植では、より多くの SharePoint プラットフォームの機能 (リスト、ドキュメント ライブラリと画像ライブラリ、ユーザー プロファイル、ビジネス データ カタログなど) を使用するように移行しつつ、既存のコードも引き続き利用できます。現在のところ、この方法は予想よりも簡単に実行できています。アプリケーションを _layouts アプリケーションとして展開し、少数のコード変更のみで現状のまま実行できるようになるまで、3 日しかかかっていません。

また、Ecco の現在のバージョンには、時間外の操作をスケジュールできる独自のサービスが含まれています。SharePoint プラットフォームに移行するときには、このような SharePoint 以外のサービスへの依存性を排除し、代わりにカスタムの SharePoint タイマー ジョブを使用することを計画しています。私たちは、SharePoint プラットフォームを活用して、シームレスに統合された実践コミュニティ ソリューションを実現するために熱心に取り組んでいます。

Eric Sauve
CEO および共同設立者、Tomoye

これは、ローカライズされたブログ投稿です。 原文の記事は、http://blogs.msdn.com/sharepoint/archive/2008/06/08/tomoye-ecco-and-sharepoint-integration-how-we-did-it-and-what-we-will-do-next.aspx をご覧ください。

開発内容: SendTec.com - 6 週間で実現したデザイン、開発、および実稼動

最近のブログ エントリで説明した SendTec Web サイトについてお問い合わせがいくつかありました。これにお答えするために、以下の「開発内容」ゲスト ブログ エントリを投稿します。この記事は、Ted Vreeland 氏 (アプリケーション アーキテクト) と Dave Redman 氏 (上級ソフトウェア エンジニアの管理担当) によって作成されました。彼らは、プロジェクトの技術リーダーです。

<Lawrence />


SendTec, Inc. は、マルチチャンネルのマーケティング会社であり、従来型のエージェンシー リソース、および ROI 指向の広告主に利益をもたらす画期的なテクノロジ ソリューションを展開しています。企業全体の商標変更作業の一環として、SendTec では、企業 Web サイトの外観をデザインし直す必要がありました。新しいサイト全体の目標は、次のとおりです。

  • 簡潔で、現代的な外観にする。
  • 現在の検索エンジン ランキングを維持する。
  • IT 担当者でなくても簡単に管理できるようにする。
  • ブランドを立ち上げるための積極的なスケジュールに合わせて、早期の完成を目指す。

SendTec Business Technology チームは、SharePoint テクノロジの経験がほとんどありませんでした。新しいサイトを構築する場合に、ASP.NET (既存のサイトを構築したときに利用) を使用するか、MOSS 2007 を使用するかという、重要な決定を行う必要がありました。Business Technology チームの 2 人のメンバーが、MOSS 2007 について短期間で学び、Web コンテンツ管理 (WCM) 機能、MOSS サイトのカスタマイズ、カスタム Web パーツの開発、およびコンテンツ展開に重点を置いた知識を習得しました。新しいサイトの構築には MOSS 2007 を使用することが決まりましたが、新サイトのデザイン上の特徴については、Business Technology チームが取り組むべき重要な課題がいくつか発生しました。

デザイン。新しいサイトのデザインは、SendTec 内部のクリエイティブ チームが行いました。デザイナーがレイアウトした外観を実現するために、プロジェクト チームは新しいマスター ページ、カスタムのコンテンツ タイプ、新しいページ テンプレートを作成し、多くの新しい CSS スタイルを定義する必要がありました。

ナビゲーション。新しいサイトでは、3 レベルのナビゲーションを採用しました。最初は、MOSS がサポートしているレベルは 2 つだけのように思われましたが、内部を調べたところ、MOSS が基盤として提供する機能は 2 つ以上のレベルのナビゲーションをサポートしていることがわかりました。これは、カスタムの管理ツールを使用することで追加のレベルを管理するという方法です。また、今回のデザインではトップ メニュー バーをページの左側に表示することが要求されました。これは、カスタム メニュー コントロールを作成することで実現されました。このカスタム メニュー コントロールは、標準の ASP.NET 2.0 メニュー コントロールを継承した上で CSS Control Adapter Toolkit for ASP.NET 2.0 を使用することによって作成しました。

検索エンジン ランキングと SEO。新しいサイトでは、現在の検索エンジン ランキングを維持し、キーワードと説明用の "meta" タグを利用して SEO 対策を行う必要がありました。この取り組みの最初の部分をサポートするために、Business Technology チームは、カスタムの ASP.NET モジュールを作成しました。このモジュールでは、受信 URL の "/pages" 部分を削除し、ブラウザーに返される HTML からもこの部分を削除するという処理を実行します。また、古いサイトから削除されたページが新しいサイトの適切なページに確実にルーティングされるように、リダイレクト ハンドラを採用しました。SEO の要件を満たすために、MOSS 内の既定のページ コンテンツ タイプを、カスタムの列の種類の追加によって拡張しました。これにより、コピーライターはページのキーワードと説明を変更できるようになります。サイトのマスター ページは、これらのキーワードや説明の値を出力 HTML のヘッダー セクションに取り込むように変更されました。

コンテンツ管理。新しいサイトのいくつかの領域は、コピーライター、デザイナー、およびコンテンツ管理者によって管理されます。そのために、サイトのイントラネット バージョンでは MOSS の WCM を有効にしました。また、リストをいくつか作成して、新しいプレス リリース、記事、ホワイト ペーパー、および人材募集をコンテンツ管理者が迅速に追加できるようにしました。デザイン上の要件を満たすために、リストを照会し、出力をフォーマットするカスタム Web パーツを作成しています。新しいコンテンツや更新されたコンテンツを、インターネットに直接接続された MOSS ファームに定期的にプッシュするには、コンテンツの増分展開ジョブが使用されます。

パフォーマンス。MOSS 2007 は、設定を変更しない状態でも、期待を上回るパフォーマンスを実現しました。以前のサイトと比べると、サーバーにかかる負荷や応答時間が格段に向上したのです。ただし、サイトのパフォーマンスをさらに向上できると考え、MOSS が備えているキャッシュ機能を実装しました。このキャッシュ機能については、ここを参照してください。この実装の最初の段階では、BLOB キャッシュを使用しました。これにより、データベース オーバーヘッドの量が削減されました。削減された理由は、画像、ドキュメント、または変更される頻度の低いその他のアイテムが要求されるたびに、データベースからコンテンツを取得する必要がなくなるためです。実装の次の段階では、プロファイル出力キャッシュを使用しました。弊社のサイトには匿名ユーザーが多くアクセスするため、パブリック インターネット (匿名専用) キャッシュ プロファイルを有効にすることを決めました。このとき、既定の設定は変更しませんでした。BLOB キャッシュとキャッシュ プロファイルを実装しただけで、応答時間は半分に減りました。パフォーマンスを向上させるための最後の段階では、ページ サイズの削減を行いました。ページ サイズの削減に最も効果的だったのが、匿名ユーザー向けのページで 257KB の core.js を不要にすることでした。このためには、簡単なカスタム コントロールを実装して、認証されていないユーザー向けの HTML 出力から core.js を削除しました。

SendTec.com の Web サイトは、2007 年 4 月 24 日に開始されました。開始後すぐに、プロジェクト チームは、セキュリティを向上させるために HTTP モジュールにいくつかの変更を加えました。コンテンツ管理者とデザイナーは、MOSS の WCM 機能を利用することで、Business Technology チームのサポートがなくてもサイトを変更できるようになりました。SendTec の管理チームは、新しいサイトの実装に MOSS 2007 を採用したことに満足しています。MOSS は、将来のクライアント Web サイトでも使用される予定です。MOSS によって、クライアントには 2 つのメリットがもたらさるでしょう。1 つは、サイトのデザイン、構築、およびホストを行うために、クリエイティブな経験に富んだ専門家や技術的な専門家によるサポートが SendTec から提供されることです。もう 1 つは、クライアントの要望に応じてコンテンツの追加や変更を行うことができるということです。

Ted Vreeland
アプリケーション アーキテクト、 MCD
tvreeland@sendtec.com

Dave Redman
上級ソフトウェア エンジニアの管理担当、MCAD
dredman@sendtec.com

Published Friday, May 18, 2007 10:55 AM by sptblog

これは、ローカライズされたブログ投稿です。原文の記事は、http://blogs.msdn.com/sharepoint/archive/2007/05/18/how-we-did-it-sendtec-com-design-implementation-and-rollout-in-just-6-weeks.aspx をご覧ください。

開発内容: Podcasting Kit for SharePoint

本日のゲスト ブログ投稿は、Podcasting Kit for SharePoint の主要な開発元である、3Sharp から寄せられました。3Sharp は PKS の技術的な知識に精通しており、PKS を効果的に活用して、企業向けにカスタマイズされたソーシャル メディア アプリケーションを迅速に導入する技術力を持っています。PKS コンポーネントがどのように設計されたかを理解し、これらのコンポーネントをユーザー独自の SharePoint ソリューションで活用するために、本日のブログが役立つことを願っています。

どうぞご覧ください。

Dave Pae
SharePoint テクニカル プロダクト マネージャー

Podcasting Kit for SharePoint (PKS)

PKS には、ソーシャル メディアを加速させる力があります。ポッドキャスティングやソーシャル ネットワークを使用して、次世代のナレッジ マネジメント ソリューションを配信します。PKS は、Office SharePoint Server 2007 に基づいて構築されており、Silverlight 2 を使用して、ポッドキャストに対応したさまざまなデバイス (コンピューター、iPod モバイル デジタル デバイス、Zune デジタル メディア プレーヤー、Windows Mobile ベースの電話など) に、統合的なエクスペリエンスを提供します。企業における PKS の使用方法の詳細については、以下の資料を参照してください。

image

図 1: GetSharp のホーム ページ

PKS の機能の概要

PKS の開発の際には、いくつかの具体的なガイドラインが課せられました。第 1 は、このソリューションが Microsoft IT の厳しい内部コード レビューと一般的な開発ガイドラインに合格すること。第 2 は、可能な限りコンポーネント化されたソリューションを開発することでした。つまり、PKS の各機能が分離可能で、他のソリューションでも使用できるようにすることが理想的とされていました。Microsoft がこのようなコンポーネント ベースの設計を要求する理由は、他のチームやファイアウォールの内側で稼動する他のソリューションが、独立した各機能を利用できるようにするためでした。ただし、それは誰でもこれを外部アプリケーションで利用できることを意味します。

基本的なレベルでは、PKS はすべてのコンポーネントを、PKS Podcast コンテンツ タイプから派生した単一のリストに格納します。この内容は、コンテンツ クエリ (CbQ) Web パーツに示されます。これは、XSLT を使用した見やすいグリッド ビューで表示されます。

image

図 2: 3Sharp による社外向け PKS の実装のスクリーンショット (強調表示されているのは CbQ Web パーツ)

このスクリーンショットでは、CbQ Web パーツが強調表示されています。画面上にあるその他のコントロールには、タグ クラウド コントロール (Podcast Item コンテンツ タイプのタグ フィールドのデータによって動作する)、フィルター コントロール (CbQ クエリを操作し、PKS Podcast コンテンツ タイプのカテゴリ フィールドでフィルター処理する)、および HTML コントロールがあります。

この機能はすべて、SharePoint に基づいて構築されています。SharePoint に基づくことは、このソリューションの第 3 の主要な目標でした。SharePoint 用のソリューションの開発時には、SharePoint で実行できるスタンドアロンの .NET アプリケーションが意図しなくても作成されるということが頻繁にありました。私たちは、SharePoint によって提供されるすべての機能を利用するように努力し、どうしても必要な場合にのみ新しい機能あるいは別の機能を追加するようにしました。

ファイル ストレージ ソリューション

SharePoint の機能をそのまま使用するという目標の追求についてはお話ししたので、この投稿の残りの部分では、ビデオやオーディオのコンテンツを保存するために、SharePoint ドキュメント ライブラリを使用せずに、独自のファイル ストレージ メカニズムを作成した理由を説明します。

ソリューションの特性を考慮したところ、比較的サイズの大きいビデオやオーディオ ファイルを大量に保存する場所について、事前に設計上の決定が必要であることに気付きました。SharePoint は、関連するメタデータと共にファイルをリストに保存するように設計されています。この設計を採用した場合、カスタム コードは不要になり、SharePoint のネイティブな機能を可能な限り利用するという目的にも一致します。しかし、問題が発生することもわかったのです。第 1 の問題は、非常に大きなサイズのファイルを保存する必要があるという点です (100 GB のファイルをアップロードするという厳しいテストに合格しなければなりません)。[メモ: PKS サイトに 100 GB のファイルを保存することは、可能ではありますがお勧めしません。] 第 2 の問題は、各ポッドキャストと共に "補足的な詳細" をアップロードできるようにするという点です。これらのファイルは、Office ドキュメント、XML スキーマ、ソース コード、その他のビデオ ファイルなど、多岐にわたります。これらすべてのファイルを単一の添付ファイルとしてバンドルし、ポッドキャストと共にリスト アイテムに保存した場合、SharePoint に負荷がかかることは明白です。

このため、ドキュメント ライブラリという方法を使用する代わりに、SharePoint の機能を使用せずにファイルをディスクに保存することに決定しました。当社のリスト アイテム (ポッドキャストとそのサポート ファイルに関するすべてのメタデータが含まれます) では、SharePoint の機能も、そのストレージ メカニズムである SQL Server も使用することなく、n 個のファイルをディスクに保存します。これには、次のような利点があります。

  • サイズの大きいファイルを大量に保存しても、SharePoint や SQL Server に負荷がかからない。
  • SharePoint SQL のバックアップを使用することなく、ビデオ ファイルをバックアップできる。
  • 1 つのポッドキャスト アイテムについて、任意の数のファイルを簡単に保存できる。
  • SQL Server よりも効率的に、サイズの大きいファイルをディスクに保存できる。
  • ファイルのストリーミングの可能性が広がる。
  • アップロードに BITS などのテクノロジを使用できる。
  • アップロード方法として Silverlight を使用することで、アップロード速度を高める余地が生まれ、ファームのネットワーク パフォーマンスを高めることが容易になる。
  • ローカル ファイル ストア (LFS) のルートに対して ネットワーク URI を使用すると、NLB 構成で IIS をセットアップして、IIS のスケールとパフォーマンスを利用できる。

ただし、次のような欠点もあります。

  • SharePoint SQL のバックアップを使用せずにビデオ ファイルをバックアップする必要がある。つまり、当社のファイル ストアと SharePoint リストの間に、参照上の整合性がなくなることを意味します。
  • 実装の際は、ソリューションが複数の SharePoint Web フロント エンドで動作することを確認する必要がある。

設計

私たちは SharePoint リストを使用せずにコンテンツを保存する方法を採用しましたが、可能な限り SharePoint のネイティブな機能を使用するという取り組みは継続しました。ディスク上のファイルと SharePoint を接続するために、Podcast Files というユーザー設定フィールド型を作成し、これをコンテンツ タイプに追加しました。ユーザー設定フィールド型には、ポッドキャスト アイテムに対応するさまざまなファイルを定義する XML が保存されます。さらに、これらのファイルの場所、"プライマリ" ファイルを特定する情報、およびその他の重要な属性も保存されます。

<ExternalFilesMetadata xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<Files>

<ExternalFileInfo IsPrimary="true" IsInLocalFileStore="true">

<FileName></FileName>

<OriginalFileName> </OriginalFileName>

<ServerPath></ServerPath>

<ClientPath></ClientPath>

<ClientLink></ClientLink>

</ExternalFileInfo>

</Files>

<UpdatePrimaryInformation>false</UpdatePrimaryInformation>

</ExternalFilesMetadata>

ユーザー設定フィールド型は、SharePoint に対して、通常の表示ページや追加/編集ページにそのコントロールを表示するときの処理を伝える必要があります。最終的には、XML に格納されたコンテンツの一部 (ServerPath および ClientLink) は、アップロードされたすべてのファイルで一貫性を持つようになります。この内容は、ファイルのアップロード時にユーザーが指定することは想定されていません。そのように要求しても、ユーザーが誤った値を入力する可能性があるためです。フィールド型の定義でフィールド エディター コントロールを用意しておけば、管理者がポッドキャスト リストを構成するときに、これらのメタデータを設定できます。

image

図 3: Podcast Files フィールド型のアーキテクチャ

フィールドのプロパティを設定する

フィールド型プロパティ用エディター コントロールを使用して、ローカル ファイル ストアの基本ディレクトリ、およびファイルをアップロードするためのアップロード メカニズムを構成します。以下のプロパティが定義されます。

  • アップロード先: このプロパティを使用して、LFS の場所を構成します。ネットワークおよびローカル ファイル システムの URI のみが、有効な URI として受け入れられます。
  • アップロード方法: LFS の実装では、複数のアップロード メカニズムを使用できます。このプロパティは、選択できるさまざまなアップロード メカニズム (HTTP Post、Silverlight) が示されるドロップダウン メニューを表します。
  • IIS ベース URL: このプロパティは仮想パスを表します。物理パスはアップロードの場所の URI を指しています。このプロパティは、アップロードされるファイルの URL を生成するためにユーザー設定フィールドで使用されます。
  • ファイル名のサイズ制限: このプロパティを使用すると、アップロードされた特定のファイルのパスとアップロードの場所の URI とを組み合わせた最終的な完全パスの長さを、MAX_PATH (260 文字) に収まるように制限できます。

image

図 4: ユーザー設定フィールド プロパティ サイト内の列の構成

フィールドを表示する

ユーザー設定フィールドを表示するには、最初に、SharePoint API の SPFieldMultiLineText クラスから継承する必要がありました。このクラスにはユーザー設定フィールドの値が保持されており、このクラスによって、カスタム プロパティ "UploadMethod" に基づいて表示される FieldRenderingControl が選択されます。私たちは、各アップロード方法 (HTTP Post および Silverlight) に対して、BaseFieldControl から継承するクラスを作成しました。このクラスは、FieldRenderingControls として使用できます。

HTTP Post を経由したアップロード

UploadMethod プロパティを HTTP Post アップロードに設定すると、ポッドキャストの新規作成/編集ページでは、フィールドに HTTP Post FieldRenderingControl が表示されます。このアップロード方法の機能は、多くのインターネット ユーザーによく知られており、新しいアイテムをドキュメント ライブラリに追加するための一般的な SharePoint 機能にも似ています。[参照] ボタンをクリックし、コンピューターからファイルを選択するだけで、そのファイルがテキスト ボックスの一覧に表示されます。次に、ポッドキャストに情報を設定し、[OK] をクリックすると、ポッドキャストがリストに保存されます。

image

図 5: ポッドキャスト リストの新規作成/編集ページに表示される HTTP Post のファイル アップロード方法

HTTP Post FieldRenderingControl は、ASP.NET FileUpload コントロールのグループを使用して、ユーザーがファイルを選択できるようにします。また、参照用のハイパーリンクで必要となるテキスト ボックスも表示します。[OK] をクリックしてポッドキャストを保存すると、フィールド コントロールはこれらのフィールドから情報を読み取り、処理します。アップロードの対象としてマークされたすべてのファイルは、ASP.NET FileUpload コントロールの SaveAs メソッドを使用して、サーバーに保存されます。

フィールド コントロールの "アップロード先" プロパティによって、ポッドキャストを保存するための基本ディレクトリが決まります。このディレクトリ内では、ポッドキャストの Web ID、List ID、および Item ID を使用して、入れ子構造のフォルダーが作成されます。そのため、ディレクトリ内のファイルが特定の 1 つのポッドキャスト用のものであることがわかります。また、複数の異なる PKS サイトに対して、同じベース URI を使用することもできます。

ファイルがアップロードされると、すべてのファイルのデータおよびアイテムの参照リンクが XML に書き込まれ、ユーザー設定の UploadFiles フィールドの値に基づいて保存されます。また、FileURL フィールドと RssFileURL フィールドの値がポッドキャストに合わせて更新されます。これらのフィールドは、プライマリ ポッドキャスト ファイルを RSS フィードとホーム ページからダウンロードできるようにする場合に必要になります。

Silverlight を使用して更新する

Podcasting Kit の HTTP Post メソッドは SharePoint のネイティブな機能にかなり近いものですが、いくつかの欠点もあることに注意してください。特に、ASP.NET の標準のアップロード方法には、ファイル アップロードの進捗状況について、ユーザーにフィードバックを返すメカニズムがないため、サイズの大きいファイルをアップロードするときに、ファイルがアップロードされているのか、サイトからの応答が停止しているのかを判別することが難しくなっています。

私たちは、ポッドキャストの新規アップロード ページの内部をホストするために、Silverlight アップローダーを構築することにしました [~/listname/NewForm.aspx and EditForm.aspx]。Silverlight アップローダーからは、ファイルのアップロードだけでなく、アイテムのファイルの追加、削除、および編集を行うことができます。ファイルのアップロードは、対応するリスト アイテムが実際に作成される前に実行されるため、SharePoint 以外の機能でファイルを保存することに伴う関係整合性の問題が発生するだけでなく、ファイルのアップロードとアイテムの作成との間の同期も失われます。ただし、この方法を使用すると、SharePoint を使用するよりも広がりのあるユーザー環境が実現されます。

Silverlight で複数のファイルをアップロードする際に使用するユーザー設定フィールド コントロールは、主に次の 3 つの部分から構成されています。

1. Silverlight コントロール。ユーザーの入力を処理して、Upload ASPX ページに送信可能なチャンクにファイルを分割します。

2. Upload ASPX ページ。ファイル チャンクを Silverlight コントロールから受信して、ローカル ファイル ストアに保存します。

3. SharePoint ユーザー設定フィールド コントロール。Silverlight コントロールを表示し、アップロードされたファイルを使用してフィールドの値を更新します。

image

図6: Silverlight コントロールのアーキテクチャ

Silverlight コントロール

Silverlight コントロールは、Podcasting Kit for SharePoint だけでなく、すべての Web サイトで使用できるスタンドアロンのコンポーネントとして設計されています。私たちは、これが将来、他のサイトで使用される興味深いコントロールになると考えています。Silverlight コントロールは、次の 2 つパラメーターが読み込まれることを前提としています。

  • Upload ASPX ページの場所。
  • ページ上で UploadFiles ユーザー設定フィールドとの通信に使用される非表示フィールド。

UploadFiles ユーザー設定フィールドでは、HTML 非表示フィールドを使用して、ポッドキャスト用に現在アップロードされているファイルと Silverlight コントロールの間の通信が行われます。新しいポッドキャストの場合、このフィールドは空白のままです。

Silverlight アップローダーの UI は、最上部に 2 つのボタンがあります。これらのボタンを使用することで、自分のローカル システムのファイルを追加したり、関連する Web コンテンツへのハイパーリンクを追加することができます。選択したファイルとハイパーリンクの情報がリストに追加されます。リスト内のアイテムは、ポッドキャストのプライマリ ファイルとして選択したり、削除することができます。ファイルのサイズに関する情報も表示されます。また、リストの一番下にはファイルの合計数と合計サイズが表示されます。

image

図 7: Upload Files Silverlight コントロール

[Upload] ボタンをクリックすると、ファイルがブロックに分割され、Upload.aspx ページに送信されます。Upload.aspx ページでは、これらのブロックが LFS に保存されます。このコントロールでサーバーに送信されるブロックは、4 KB から 2 MB までのさまざまなサイズに分割されます。これにより、そのときのネットワーク接続の速度に対応することが可能になります。

すべてのファイル ブロックは、Base 64 でエンコードされた文字列として Upload.aspx ページに送信されます。私たちがこの方法を採用したのは、データを書式なしの文字列として投稿のページ本体に配置するためです。Base 64 は非常にコンパクトなエンコーディングなので、ディスク領域の節約にもなります。ファイル データと共に Upload.aspx ページに送信されるのは、ファイル名、書き込まれるバイト オフセット、ファイルの末尾であるかどうかの情報、および以前にアップロードされたファイルを上書きするかどうかの情報です。

すべてのファイルがアップロードされると、Silverlight コントロールが各ファイルおよびハイパーリンクのメタデータを読み取って、非表示フィールドに書き込みます。この非表示フィールドは、UploadFiles フィールド コントロールによってページに書き込まれています。SharePoint でポッドキャスト用のデータを入力し、[OK] ボタンをクリックすると、UploadFiles フィールド コントロールが非表示フィールドのメタデータを読み取り、HTTP Post メソッドと同じ方法で保存します。

アップロードを処理するためにサーバー上の標準の ASPX ページを使用することは、あまり一般的ではないとも言えます。このような対応をした理由は、いくつかの設計上の制限のためです。Silverlight アプリケーションはクライアント コンピューター上に存在しており、サーバーのファイル システムに直接アクセスできません。このため、クライアントからデータを受け取るための、Web で公開できるメカニズムが必要になります。通常は、このようなタスク向けの Web サービスを使用するか、場合によっては Silverlight アプリケーションをホストするページのサーバー側のコードに対するコールバックを使用します。PKS プロジェクトでは、Web サービスを SharePoint に追加できないという具体的な要件があったため、Web サービスの使用は不可能でした。コールバックを使用することはできましたが、この方法は採用しませんでした。これは、Silverlight の アップロード コントロールをユーザー設定フィールドに関連付けずに、他のプロジェクトでも簡単に再利用できるようにするためです。ASPX ページを使用することで、XML Web サービスと同様の使用状況を実現でき、設計上の制限も維持できます。

image

図 8: Upload Files Silverlight コントロール

まとめ

完璧ではありませんが、ローカル ファイル ストアの機能によって、サイズの大きいファイルや、SharePoint リストに該当するファイルのコレクションを簡単に保存できるようになりました。以上の説明で、私たちが SharePoint のネイティブな機能を使用するのではなく、カスタム コードを作成することを選択した時期や理由について、ご理解いただけたと思います。

このソリューションは無料でダウンロードできます。このソリューションは Podcasting Kit for SharePoint の一部として提供されますが、すべての SharePoint インストールで使用できます。

Jeremy Campbell – 開発担当 (3Sharp)

Namita Prakash – SharePoint 開発担当

John Peltonen – 3Sharp 共同設立者

Erica Toelle – ビジネス アナリスト (3Sharp)

これは、ローカライズされたブログ投稿です。原文の記事は、http://blogs.msdn.com/sharepoint/archive/2009/01/29/how-did-they-do-it-podcasting-kit-for-sharepoint.aspx をご覧ください。

More Posts Next page »
 
Page view tracker