次の方法で共有


モバイル ページのレンダリング システム

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

適用対象: SharePoint Foundation 2010

このトピックでは、Microsoft SharePoint Foundation で RenderingTemplate コントロールおよびテンプレート セレクター コントロールを使用して、モバイル デバイスからアクセスできるページをレンダリングする方法について説明します。

ページ上のコントロール

モバイル ページは RenderingTemplate コントロールでレンダリングされますが、このコントロールはページから直接呼び出されません。代わりに、SPMobileComponent コントロール、または SPMobileComponent から派生したコントロールの種類がページで宣言されます。コントロールの TemplateName プロパティには、RenderingTemplate の ID が指定されます。レンダリング テンプレートは、%ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\CONTROLTEMPLATES 内にある .ascx ファイルで宣言されます。SPMobileComponent の派生クラスからのオブジェクトがページで宣言されている場合、その TemplateName プロパティの値は、現在のサイト定義、現在のページの種類、およびコントロールが宣言されているページの領域 (ヘッダー、コンテンツ、またはフッター) に基づいて内部的に決まります。実際の SPMobileComponent オブジェクトが宣言されている場合、宣言内で TemplateName プロパティが指定されます。

SharePoint Foundation に付属の RenderingTemplate コントロールは、MobileDefaultTemplates.ascx と GbwMobileDefaultTemplates.ascx で宣言されます。カスタムの RenderingTemplate は、同じフォルダーにあるカスタム .ascx ファイルで宣言されます。

以下に、モバイルの "複数リストのリスト" ページ (mbllists.aspx) の主なマークアップを示します。カスケード スタイル シート (CSS) スタイルをサポートするデバイス用のページのヘッダー領域など、一部の場所では、SPMobileComponent が宣言されており、その TemplateName プロパティは明示的に設定されています。ただし、CSS をサポートしないデバイス用のページのヘッダーなど、その他の場所では、SPMobileComponent の派生クラスのオブジェクトが宣言されています。この場合、クラスは SPMobilePageTitle です。このページでは、ID が MobileHomePageTitle のレンダリング テンプレートが呼び出されます。

注意

モバイル "HomePage" ページ型には、実際はサイトのホーム ページではないページが含まれます。この型には、リスト ビュー ページ、フォーム ページなど、他のカテゴリに該当しないページが含まれます。たとえば、モバイル "リストのリスト" ページ、mbllist.aspx は、HomePage 型です。

<SPMobile:SPMobileForm RunAt="Server" PageType="HomePage" Paginate="true">
  <DeviceSpecific>
    <Choice Filter="supportsCss">
      <HeaderTemplate>
        <SPMobile:SPMobileComponent RunAt="Server"Templatename="MobilePageTitleWithCss" Weightless="true" />
      </HeaderTemplate>
      <FooterTemplate>
        <SPMobile:SPMobileComponent RunAt="Server" 
          Templatename="MobilePageNavigationWithCss" Weightless="true" />
      </FooterTemplate>
    </Choice>
    <Choice>
      <HeaderTemplate>
        <SPMobile:SPMobileControlContainer RunAt="Server" Weightless="true">
          <SPMobile:SPMobilePageTitle RunAt="Server" />
          <SPMobile:SPMobileComponent RunAt="Server" 
            TemplateName="MobileDefaultSeparator" />
        </SPMobile:SPMobileControlContainer>
      </HeaderTemplate>
      <FooterTemplate>
        <SPMobile:SPMobileControlContainer RunAt="Server" Weightless="true">
          <SPMobile:SPMobileComponent RunAt="Server" 
            Templatename="MobilePaginateNavigation" />
          <SPMobile:SPMobileComponent RunAt="Server" 
            TemplateName="MobileDefaultSeparator" />
          <SPMobile:SPMobilePageNavigation RunAt="Server" />
        </SPMobile:SPMobileControlContainer>
      </FooterTemplate>
    </Choice>
  </DeviceSpecific>
  <SPMobile:SPMobilePageContents RunAt="Server" />
</SPMobile:SPMobileForm>

ASCX ファイル内

ページ上のコントロールによって呼び出される各 RenderingTemplate には、Template 要素があります。Template 要素のコンテンツは、通常、以下のパターンのいずれかに一致します。

ASP.NET Web コントロールの直接呼び出し

最も単純なケースでは、モバイル ページに挿入される Microsoft ASP.NET Web コントロールと SharePoint Foundation Web コントロールが Template 要素で直接呼び出されます。たとえば、MobileDefaultSeparator RenderingTemplate が、複数の SharePoint Foundation モバイル ページのヘッダーとフッター領域から呼び出されます。これは、次のマークアップで MobileDefaultTemplates.ascx に定義されます。

<SharePoint:RenderingTemplate RunAt="Server" id="MobileDefaultSeparator">
  <Template>
    <mobile:Panel RunAt="Server" Alignment="Center" EnableViewState="False">
      <mobile:DeviceSpecific RunAt="Server">
        <Choice Filter="IsMicrosoftMobileExplorer">
          <ContentTemplate>
            <hr width="100%" size="1">
          </ContentTemplate>
        </Choice>
        <Choice Filter="IsHtml32">
          <ContentTemplate>
            <hr width="100%" size="1" color="#D8D8D8">
          </ContentTemplate>
        </Choice>
        <Choice Filter="IsChtml10">
          <ContentTemplate>
            <hr width="100%" size="1">
          </ContentTemplate>
        </Choice>
        <Choice Filter="IsXhtmlMp">
          <ContentTemplate>
            <hr width="100%" size="1" style="color:#D8D8D8" />
          </ContentTemplate>
        </Choice>
        <Choice>
          <ContentTemplate>
            <mobile:LiteralText RunAt="Server" Text="-----" BreakAfter="true" />
          </ContentTemplate>
        </Choice>
      </mobile:DeviceSpecific>
    </mobile:Panel>
  </Template>
</SharePoint:RenderingTemplate>

このマークアップでは、ASP.NET Panel コントロールが宣言され、モバイル デバイスのブラウザーで使用されるマークアップ言語に従ってそのスタイルが設定されます。ブラウザーが、指定されたどの種類にも一致しない場合、既定のレンダリングによって、5 つのハイフンを含む区切り文字が LiteralText コントロール内に作成されます。

次のコードは、RenderingTemplate の宣言を示しています。この宣言では、SPMobileLabel オブジェクトが呼び出されます。

<SharePoint:RenderingTemplate RunAt="Server" id="MobileFormFieldSeparator">
  <Template>
    <SPMobile:SPMobileLabel RunAt="Server" Text="" BreakAfter="true" />
  </Template>
</SharePoint:RenderingTemplate>

SPMobileComponent オブジェクトの呼び出し

前の「ページ上のコントロール」で説明されているとおり、SPMobileComponent コントロールと、SPMobileComponent から派生したコントロールが SharePoint Foundation モバイル ページで使用され、レンダリング テンプレートが呼び出されます。したがって、RenderingTemplate の Template 要素にこれらのオブジェクトの 1 つへの呼び出しが含まれる場合があることは意外なことではありません。このようなことが起こるのは、RenderingTemplate がレンダリングする必要のあるコンテンツの一部が、これらの SPMobileComponent オブジェクトの 1 つでレンダリング (間接的に) されるものと完全に重複する場合です。たとえば、MobilePageNavigationWithCss RenderingTemplate を MobileDefaultTemplates.ascx に定義します。これに、SPMobileComponent の派生クラスである SPMobilePageNavigation への呼び出しを部分的に含めて、また、MobilePaginateNavigation に設定された TemplateName プロパティを持つ SPMobileComponent オブジェクトへの呼び出しも部分的に含めます。次のコードはこの宣言を示しています。

<SharePoint:RenderingTemplate RunAt="Server" 
  id="MobilePageNavigationWithCss">
  <Template>
    <SPMobile:SPMobileComponent RunAt="Server" 
      Templatename="MobilePaginateNavigation" />
    <SPMobile:SPMobileNoBreakSpace RunAt="Server" />
    <SPMobile:SPMobilePaddedPanel RunAt="Server" BackColor="#F6F6F6">
      <SPMobile:SPMobilePageNavigation RunAt="Server" />
    </SPMobile:SPMobilePaddedPanel>
  </Template>
</SharePoint:RenderingTemplate>

テンプレート セレクター オブジェクトの呼び出し

場合によって、Template 要素のコンテンツが、SPMobileTemplateSelector から派生するクラスのオブジェクトになることがあります。このようなクラスは 9 つあります。

派生元のクラスの名前が示すとおり、これらのコントロールは、実際にページの一部をレンダリングするために別の RenderingTemplate を選択します。たとえば、「ページ上のコントロール」で説明した MobileHomePageTitle RenderingTemplate の Template 要素の値は、SPMobileWebTitle です。SPMobileWebTitle は、モバイル ホーム ページのヘッダー (タイトル) 領域をレンダリングする RenderingTemplate を呼び出します。以下は、MobileDefaultTemplates.ascx での MobileHomePageTitle レンダリング テンプレートの宣言です。

<SharePoint:RenderingTemplate RunAt="Server" id="MobileHomePageTitle">
  <Template>
    <SPMobile:SPMobileWebTitle RunAt="Server" />
  </Template>
</SharePoint:RenderingTemplate>

SPMobileTemplateSelector オブジェクトは、セグメント ID を構築することで RenderingTemplate を選択します。ランタイムは、%ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\CONTROLTEMPLATES の .ascx ファイル内で、一致する ID を持つ RenderingTemplate を検索します。RenderingTemplate のセグメント ID の詳細については、以下の「セグメント化されたレンダリング テンプレート ID」を参照してください。ID がどのように構築されるかについては、上記の 9 つのクラスに関するリファレンス トピックと、後の「モバイル ホーム ページのセクションのレンダリング」と「リスト ビュー ページとフォーム ページでのセクションのレンダリング」を参照してください。

混在する呼び出し

RenderingTemplate の Template 要素には、次のように、さまざまな種類のコントロールの組み合わせに対する呼び出しを含めることもできます。

SPMobileTemplateSelector オブジェクト、SPMobileComponent の派生オブジェクト、および明示的な TemplateName 値を持つ SPMobileComponent オブジェクトを使用する呼び出しチェーンは、最終的に、ページ パーサーがモバイル デバイスのページ記述言語 (XHTML など) でレンダリングできるコントロールの呼び出しに分解される必要があります。

セグメント化されたレンダリング テンプレート ID

MobileDefaultTemplates.ascx および GbwMobileDefaultTemplates.ascx 内の多くの RenderingTemplate は、セグメント化された ID を持ちます。これは、次のカテゴリに分けることができます。

  • サイトの種類によって変えられるレンダリング テンプレート

  • リストの種類によって変えられるレンダリング テンプレート

  • フィールドの種類によって変えられるレンダリング テンプレート

  • 簡易ビューのリスト アイテム レンダリング テンプレート

  • リダイレクトの "レンダリング" テンプレート

  • ブログ投稿リストのレンダリング テンプレート

サイトの種類によって変えられるレンダリング テンプレート

サイト定義によってレンダリング動作が変わる RenderingTemplate は、次の形式のセグメント化された ID を持ちます。

IntendedPageUse_SiteTypeID_PageType_PageArea

PageArea の値には、Title (モバイル ページのヘッダー領域)、Navigation (フッター領域)、および Contents を使用できます。

SiteTypeID は、現在の Web サイトのサイト定義の名前または ID 番号です。SharePoint Foundation に付属のサイト定義の場合、SiteTypeID には STS、SGS、または BLOG を使用できます。

注意

MPS、CENTRALADMIN、TENANTADMIN、および従来の WIKI サイトでは、モバイル デバイスからのアクセスはサポートされていません。

カスタム サイト定義の場合、SiteTypeID は、サイト定義の ID 番号 (名前ではない) です (サイト定義の ID は、WebTemp.xml ファイルの Template 要素の ID 属性で設定します。サイト定義の ID 属性の詳細については、「WebTemp.xml」を参照してください)。

PageType と IntendedPageUse は、モバイル ページの種類を参照しますが、これらはモバイルページを異なる軸に沿って分類します。PageType は、ホーム ページ、リスト ビュー ページ、編集フォームなど、エンド ユーザーの視点からページの機能目的を参照します。値には、SPMobilePageType 列挙の値を使用できます。IntendedPageUse は、モバイル ページに対応するモバイル以外のページの種類に従ってモバイル ページを区別します。つまり、モバイル ページが目的とするターゲット ページの種類です。次の値を使用できます。

  • WebPartMobile - モバイル以外の Web パーツ ページの概要モバイル バージョンで使用することを目的とするテンプレート。

  • WebPartMobileDetail – モバイル以外の Web パーツ ページの詳細モバイル バージョンで使用することを目的とするテンプレート。

  • Moblog - モバイル ブログ サイトのページで使用することを目的とするテンプレート。

  • Mobile - 他のすべてのモバイル ページ。

以下に例を示します。

  • Mobile_STS_HomePage_Title

  • WebPartMobile_SGS_HomePage_Contents

リストの種類によって変えられるレンダリング テンプレート

リスト定義によってレンダリング動作が変わる RenderingTemplate は、セグメント化された ID を持ちます。その名前の形式は次のとおりです。

IntendedListUse_ListTypeID_PageType_PageArea

PageType と PageArea は、前のサブセクションでの説明と同じ意味を持ちます。ListTypeID は、現在のリストの種類の ID 番号 (105 など) または SPListTemplateType 列挙の値の 1 つ (Contacts など) です。サイト定義の Onet.xml ファイルで、リストがサイトの種類の一部として指定されている場合、ListTypeID は、Onet.xml の List 要素の Type 属性の値です。このファイルは、%ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\SiteTemplates\Site_Type\xml ディレクトリにあります。リストがユーザー インターフェイス (UI) でサイトに追加された場合、ListTypeID は、新しいリストの種類のベースとして使用されたリストの種類の ID です。

IntendedListUse は、特殊なリストがある場合に、テンプレートでレンダリングの対象とする特殊なリストを識別します。次の値を使用できます。

  • Mobile - 通常のリストの種類。

  • MobileFolder - リストのサブフォルダーでアイテムをレンダリングすることを目的とするテンプレート。

  • MobileDailyView - グループ作業サイトのカレンダーからイベントの日次リストをレンダリングすることを目的とするテンプレート。

以下に例を示します。

  • Mobile_Events_NewForm_Navigation

  • Mobile_425_EditForm_Contents

フィールドの種類によって変えられるレンダリング テンプレート

フィールドの種類によってレンダリング動作が変わるフィールド レンダリング テンプレートは、次の形式のセグメント化された ID を持ちます。

MobileCustomListField_ListTypeID_FieldType_Field

ListTypeID は、前のサブセクションでの説明と同じ意味を持ちます。FieldType はフィールドのデータ型です。これには、任意の SPFieldType 列挙の値 (Text、Number など) を使用できます。また、ユーザー設定フィールド型を定義する fldtypes*.xml ファイル内の <Field Name="TypeName"> 要素に定義されたユーザー設定フィールド型も使用できます (ユーザー設定フィールド型の詳細については、「[方法] ユーザー設定フィールド型の定義を作成する」を参照)。Field は、WorkPhone など、フィールドの内部名です。リスト定義の Schema.xml ファイルで、フィールドがリストの一部として指定されている場合、内部名は、schema.xml の Field 要素の Name 属性の値として検索できます。このファイルは、%ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\FEATURES\Feature_Folder ディレクトリにあります。フィールドが UI、つまり [列の作成] ページでリストに追加された場合、Field は、SPField.InternalName プロパティの値となり、オブジェクト モデルからのみ検索できます。

注意

Field は、フィールド (列) の内部名ですが、フィールドの表示名とは必ずしも同じではありません。UI でユーザーによって作成されたフィールドの場合、内部名は、ユーザーが選択した表示名から、システムによって生成されます。ユーザーが表示名にスペースや句読点を含めた場合、内部名では、それらの文字は、下線文字で囲まれた文字の Unicode 番号で置き換えられます。たとえば、ユーザーがフィールドに "Coming Soon" という名前を付けた場合、内部名は "Coming_x0020_Soon" になります。

以下に例を示します。

  • MobileCustomListField_Posts_DateTime_PublishedDate

  • MobileCustomListField_Whereabouts_User_Name

簡易ビューのリスト アイテム レンダリング テンプレート

リスト アイテムは、詳細モバイル ビュー、または簡易 ("概要" と呼ばれる場合もある) モバイル ビューとしてレンダリングできます。簡易ビューでリスト アイテムをレンダリングするためのセグメント化 ID テンプレートがいくつかあります。ID の形式は次のとおりです。

Mobile_ListTypeID_SimpleViewItemRendering

ListTypeID は、前の 2 つのサブセクションでの説明と同じ意味を持ちます。

ブログ投稿リストのレンダリング テンプレート

SPMobilePostsListTitle は、ブログ サイトの現在のビューの種類が MyPosts または AllPosts のどちらであるかに基づいて、Moblog_MyPosts_Title または Moblog_AllPosts_Title を選択して、モバイル ブログ サイトの投稿リストのタイトルを表示します。

リダイレクトの "レンダリング" テンプレート

MobileDefaultTemplates.ascx には、実際にレンダリングを行わない RenderingTemplate の種類が 1 つあります。代わりに、これをレンダリング テンプレート呼び出しチェーン内で使用して、異なるページへのリダイレクトを実行できます。ID の形式は次のとおりです。

Mobile_SiteTypeID_PageType_Redirect

SiteTypeID と PageType は、前の「サイトの種類によって変えられるレンダリング テンプレート」での説明と同じ意味を持ちます。この種類のレンダリング テンプレートは SPMobileHomePageRedirection を呼び出します。これは、モバイル デバイスからの要求を、PageFileName プロパティに指定されたページにリダイレクトします。既定は mblwp.aspx です。以下は、ブログ サイトのホーム ページにリダイレクトするレンダリング テンプレートの宣言です。

<SharePoint:RenderingTemplate RunAt="Server" 
  id="Mobile_BLOG_HomePage_Redirect">
  <Template>
    <SPMobile:SPMobileHomePageRedirection RunAt="Server" 
      PageFileName="bloghome.aspx" />
  </Template>
</SharePoint:RenderingTemplate>

モバイル ホーム ページのセクションのレンダリング

説明したように、"MobileHomePageTitle" の Template 要素の値は、SPMobileWebTitle です。SPMobileWebTitle は、モバイル ホーム ページのヘッダー (タイトル) 領域をレンダリングする RenderingTemplate を呼び出します。特に、これは、Mobile_SiteTypeID_HomePage_Title の ID を持つ RenderingTemplate を検索します。ここで、SiteTypeID は、現在の Web サイトのサイト定義の名前または ID 番号です。

現在の特定のサイト定義の RenderingTemplate が %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\CONTROLTEMPLATES 内のどの .ascx ファイルにも存在しない場合、レンダリング システムは Mobile_Default_HomePage_Title を使用します (これにより、コントロール SPMobileWeb が呼び出されます。このコントロールは、Label コントロールを使用して Web サイト タイトルをレンダリングします)。SharePoint Foundation に付属のホーム ページの RenderingTemplate の操作の詳細については、「[方法] モバイル ホーム ページをカスタマイズする」を参照してください。

SPMobileWebContentsSPMobileWebNavigation は、それぞれ、モバイル ホーム ページのメイン ページのコンテンツ領域とフッター (ナビゲーション) 領域をレンダリングする RenderingTemplate を選択します。つまり、最初の 3 つのセレクター クラスはすべて、Mobile_SiteTypeID_HomePage_PageArea というパターンの ID を持つ RenderingTemplate を探します。

リスト ビュー ページとフォーム ページでのセクションのレンダリング

SPMobileListTitleSPMobileListContents、および SPMobileListNavigation の各クラスはリスト ビューとフォーム ページで使用されます。これらの各クラスは、Mobile_ListTypeID_PageType_PageArea というパターンの ID を持つ RenderingTemplate を探します。ここで、PageType は、View、NewForm、EditForm、DispForm、または DeletePage のいずれかであり、ListTypeID は、前述の「セグメント化されたレンダリング テンプレート ID」で定義されています。

SharePoint Foundation に組み込まれているほとんどのリストの種類は、SPListTemplateType 列挙の値で表されます。この種類に関するリファレンス トピックでは、各 SPListTemplateType の基礎となる整数値が示されています。この整数値は、リストの種類の数値 ID に一致するように意図的に選択されました。したがって、リファレンス トピックは、リスト ID 番号のカタログとして有効です。

列挙内に一致する値を持たないリストの種類がいくつかあります。そのリストの種類の ID 番号を次の表に示します。カスタムのリストの種類の ID 番号も使用できます。カスタムのリストの種類の ID 番号は、Microsoft が SharePoint Foundation の将来のバージョンで使用する番号と競合しないように、10000 より大きい数字にする必要があります。最終的に、Microsoft SharePoint Server など、SharePoint Foundation に組み込まれる Microsoft 製品は、追加のリストの種類を定義できます。また、現に定義しています。

ID

説明

151

ヘルプ ライブラリ

400

スケジュール

401

FC グループ

425

新機能

1210

配布リスト

現在のリストの種類を指定する ID を持つ RenderingTemplate が存在しない場合、Mobile_Default_PageType_PageArea というパターンの ID を持つ RenderingTemplate が使用されます。SharePoint Foundation に付属の RenderingTemplate を表示するリストの詳細については、「[方法] モバイル リスト ビュー ページおよびフォーム ページをカスタマイズする」を参照してください。

フィールドの表示

SPMobileListFieldSelector は、リスト ビュー、[新規作成]、[編集]、または [表示] ページに特定のフィールドをレンダリングする RenderingTemplate を選択します。このテンプレートは、前の「セグメント化されたレンダリング テンプレート ID」で定義されている MobileCustomListField_ListTypeID_FieldType_Field というパターンを使用する ID を持つ RenderingTemplate を探します。

検索されている ID を持つ RenderingTemplate が存在しない場合、ID が MobileDefaultListField の RenderingTemplate が使用されます。SharePoint Foundation に付属しているフィールド レンダリング RenderingTemplate の操作の詳細については、「[方法] モバイル ページでフィールド レンダリングをカスタマイズする」を参照してください。

モバイル デバイス向けフィールド レンダリングとコンピュータ向けフィールド レンダリングの違い

SharePoint Foundation では、モバイル デバイス用のカスタム フィールド レンダリング コントロールによるフィールドのレンダリングは、コンピューター用のカスタム フィールド レンダリング コントロールによるフィールドのレンダリングと似ていますが、次の相違点に注意してください。

RenderingTemplates の入れ子

RenderingTemplate は入れ子にすることができます。「[方法] モバイル ホーム ページをカスタマイズする」の例を参照してください。

関連項目

タスク

[ウォークスルー] モバイル ホーム ページをカスタマイズする

[方法] モバイル リスト ビュー ページおよびフォーム ページをカスタマイズする

[ウォークスルー] モバイル リスト ビュー ページをカスタマイズする

[方法] モバイル ホーム ページをカスタマイズする

[チュートリアル] モバイル フォームのアイテムのタイトルをカスタマイズする

[方法] モバイル ページでフィールド レンダリングをカスタマイズする

概念

モバイル ページとリダイレクト システムの概要

モバイル ページのレイアウトと改ページ

省略記号とレンダリングの制限

[方法] ユーザー設定フィールド型の定義を作成する

Schema.xml ファイルについて

Onet.xml ファイルについて