WPSC を使用したクライアント側のプログラミング

最終更新日: 2015年3月9日

適用対象: SharePoint Foundation 2010

この記事の内容
名前の競合
トークンの使い方
varPart および WebPart による Web パーツの参照
フォーム内での要素参照

Web Part Page Services Component (WPSC) とは、Web パーツ ページおよびそこに含まれる Web パーツを操作するスクリプトを記述するためのオブジェクト モデルです。WPSC コンポーネントは、クライアントが初めて Web パーツ ページにアクセスする際に、クライアント側コンピュータに追加されます。このコンポーネントは、Microsoft.SharePoint.WebPartPages.WebPart クラスから派生した Web パーツに適用されます。ASP.NET の System.Web.UI.WebControls.WebParts.WebPart クラスから派生した Web パーツには適用されません。

名前の競合

WPSC を使ったスクリプトを記述する際は、名前が競合しないよう、名前空間やトークンの機能を使用する必要があります。名前空間やトークンが使えるのは、Web パーツのイベント、メッセージ、状態などに対してです。また、ページをレンダリングする際、SharePoint Foundation Web パーツ インフラストラクチャ側で定義される変数や要素を使うことによっても、競合を回避できます。

トークンの使い方

ここでいう「トークン」とは、値を埋める場所だけ確保しておき、実際の値は実行時に決まるようにしたもののことです。コード内で使われる名前に、定義済みのトークンを付加することにより、スクリプト記述が簡潔になり、名前の衝突を避けることもできるのです。SharePoint Foundation Web パーツ インフラストラクチャは、ページをレンダリングする際、ページ内のトークンをすべて、対応する値に置き換えます。トークンには大文字と小文字の区別がありません。また、名前の先頭や末尾、中間など、どの位置にでも置くことができます。

トークンの置換機能は、名前の競合を避ける手段として非常に効果的です。設計時に、Web パーツ名、埋め込みコンテンツ、リンクされたコンテンツに、トークンを追加しておくと、 実行時に Web パーツ インフラストラクチャが、該当するアイテムに対し一意の名前が保証された値を生成して、トークンをこれで置き換えます。たとえば、HTML 上の ID や関数名に、接頭辞として「_WPQ_」というトークンを付加しておいたとします。すると Web パーツ インフラストラクチャが、レンダリング時に、これを WebPartQualifier プロパティの値で置き換えます。

以下に、定義済みのトークンを、アルファベット順に示します。

トークン名

置き換えられる値

_LogonUser_

ASPX ページで Request.ServerVariables("LOGON_USER") を実行して得られる値。一般に、クライアントのドメイン名とユーザー名を表し、イントラネット内でユーザーを特定するために使えます。

_WPID_

Web パーツ インスタンスの GUID を g_ 形式で表したもの (たとえば、g_632c887a_20ba_4e6d_98eb_7404ee4841f)。ページ内で一意の識別子になります。

_WPQ_

Web パーツ ページ内で一意な、Web パーツの識別子。HTML ID やスクリプト内の関数名に付加することにより、名前の競合を回避できます。

_WPR_

Web パーツのリソース フォルダの URL。クライアント側ではなく、サーバー側のフォルダです。

varPart および WebPart による Web パーツの参照

Web パーツ ページのレンダリング時に、WebPartPage Web サービスにより、各 Web パーツに値と要素の識別子が割り当てられます。クライアント側スクリプトで、この識別子とトークンを組み合わせて使うことにより、Web パーツが自分自身を参照する記述ができます。

varPart

Web パーツ ページを読み込む際に、各 Web パーツに変数 (たとえば、varPartWPQ1) が割り当てられます。この変数は、Web パーツの Part オブジェクトを参照しています。_WPQ_ トークンを記述しておけば、Web パーツはこの変数を使って、埋め込みコンテンツ内で自分自身を参照できます。変数値をハードコーディングすることもできますが (たとえば、varPart_WPQ_ とする代わりに直接 varPartWPQ2 と記述)、Web パーツの修飾子が変わり、面倒なことになるおそれがあります。どの Web パーツ ページでも Web パーツの修飾子が同じであるという保証はないからです。Web パーツを追加あるいは改名すると、ストレージ上のパーツの並び順が変わり、修飾子、したがって _WPQ_ トークンで表される値も変わってしまう可能性があります。できるだけ _WPQ_ トークンを使うようにしてください。

WebPart

Web パーツ ページを読み込む際、Web パーツは DIV 要素としてレンダリングされます。この要素には、Web パーツ インフラストラクチャが生成した識別子 (たとえば、WebPartWPQ1) が割り当てられます。この識別子を使い、WebPart と _WPQ_ トークンを組み合わせることにより、Web パーツの HTML DOM を操作することができます。つまり、「WebPart_WPQ_」という記述により、Web パーツが自分自身の HTML 構造を参照できるのです。とはいえ、Web パーツ ページの HTML DOM の操作は慎重に行う必要があります。Web パーツや Web パーツ ページ自身の DOM 構造を変えると、ブラウザの動作にも影響が及ぶ可能性があるからです。Web パーツあるいはその中の要素の InnerHTML を操作するのが、WebPart_WPQ_ の使い方として安全であり、一般的でもあります。たとえば、データを生成し、それを使って InnerHTML を更新する、というスクリプトを記述できます。

フォーム内での要素参照

Web パーツ ページ内の Web パーツはすべて、フォーム内に置かれます。これは、Web パーツ ページが実質的には ASPX ページであるからです。そして、フォーム内の要素を参照するには、フォーム ID で修飾するか、document.all という構文を使う必要があります。たとえば次のように記述してください。

<form id="MyForm">
<input type="text" id="MyText">
<input type="button" id="MyButton" onclick="buttonClicked">

<script>
function buttonClicked()
{
   MyForm.MyText.value="Hello World!";
}
</script>
</form>

関数内のコードは、次のように記述することもできます。

document.all("MyText").value="Hello World!";

どちらの記述方法でもかまいません。

注意

これは <INPUT> タグが使われている場合にのみ問題になります。

関連項目

概念

標準システム イベントのサポート

WPSC のデータ フロー

WPSC サービス

その他の技術情報

WPSC (Web Part Page Services Component) オブジェクト モデル