次の方法で共有


発行ページ変換モデルの理解と構成 (2019 年 6 月のバージョン時点)

発行ページは、常にページ レイアウトとマスター ページに基づいています。 これら 2 つのページとデータを含むフィールドが組み合わされ、ユーザーがブラウザーに表示するページが構成されます。 発行ページを変換する場合は、使用されているページ レイアウトを発行ページ変換モデルにマップすることが必須です。 発行ページ変換コンポーネントには、すべての既定のページ レイアウトに対する "既定" のページ レイアウト マッピングがあるため、ポータルで既定のページ レイアウトを使用している場合は、対象となります。 実際には、ほとんどのポータルではカスタム ページ レイアウト (およびカスタム マスター ページ) が使用されるため、それらのカスタム ページ レイアウトのページ レイアウト マッピングが必要になります。 カスタム ページ レイアウトは、次の 2 つの方法で処理できます。

  • 推奨されるオプションは、カスタム ページ レイアウト マッピング ファイルを自分で指定することです。これにより、Web パーツに翻訳されるフィールドと、モダン ページ上のどこに配置されているか、どのフィールドがメタデータになるかなどを完全に制御できます。
  • 変換するページにページ レイアウト マッピングが見つからない場合は、その場でマッピングを生成し、それを使用します。 この方法の欠点は、すべてのコンテンツがモダン ページの同じセクションと列に表示されるということです。

ページ レイアウト マッピング ファイルの生成

カスタム ページ レイアウトを使用している場合は、より正確なモダン ページを取得できるように、カスタム ページ レイアウト マッピング ファイルを使用することをお勧めします。 幸いなことに、これらのカスタム レイアウト ファイルを手作りする必要はありません。生成には .Net API と PnP PowerShell のサポートがあります。

PowerShell の使用

コマンドレットを Export-PnPPageMapping 使用すると、次のことができます。

  • 組み込みのマッピング ファイル (-BuiltInPageLayoutMapping パラメーター) をエクスポートします。このファイルは、既定のページ レイアウトに使用されます。 独自のマッピング ファイルで既定のページ レイアウトのカスタム マッピングを指定した場合、そのマッピングは OOB マッピングよりも優先されます
  • 接続されたポータルでページ レイアウトを分析し、それらをマッピング ファイル (-CustomPageLayoutMapping パラメーター) としてエクスポートします。見つかったすべてのカスタム ページ レイアウトが分析され、エクスポートされます。 OOB ページ レイアウトも分析する場合は、 パラメーターを -AnalyzeOOBPageLayouts 使用します。
# Connect to your "classic" portal
Connect-PnPOnline -Url https://contoso.sharepoint.com/sites/classicportal -Interactive

# Analyze and export the page layout mapping files
Export-PnPPageMapping -BuiltInPageLayoutMapping -CustomPageLayoutMapping -Folder c:\temp

.Net の使用

.Net では、 クラスを使用 PageLayoutAnalyser してページ レイアウトを分析する必要があります。 次の 2 つのスニペットは、すべてのページ レイアウトまたは特定の発行ページで使用されるページ レイアウトを分析する方法を示しています。

string siteUrl = "https://contoso.sharepoint.com/sites/classicportal";
AuthenticationManager am = new AuthenticationManager("<Azure AD client id>", "joe@contoso.onmicrosoft.com", "Pwd as SecureString");
using (var cc = am.GetSharePointOnlineAuthenticatedContextTenant(siteUrl))
{
    var analyzer = new PageLayoutAnalyser(cc);
    // Analyze all found page layouts
    analyzer.AnalyseAll();  
    analyzer.GenerateMappingFile("c:\\temp", "custompagelayoutmapping.xml");
}
string siteUrl = "https://contoso.sharepoint.com/sites/classicportal";
AuthenticationManager am = new AuthenticationManager("<Azure AD client id>", "joe@contoso.onmicrosoft.com", "Pwd as SecureString");
using (var cc = am.GetSharePointOnlineAuthenticatedContextTenant(siteUrl))
{
    var analyzer = new PageLayoutAnalyser(cc);
    // Analyze all the unique page layouts for publishing pages starting with an "a"
    var pages = cc.Web.GetPagesFromList("Pages", "a");
    foreach (var page in pages)
    {
        analyzer.AnalysePageLayoutFromPublishingPage(page);
    }

    analyzer.GenerateMappingFile("c:\\temp", "custompagelayoutmapping.xml");
}

説明されているページ レイアウト マッピング モデル

ページ レイアウト マッピング ファイルを開くと、次の最上位要素が存在します。

  • アドオン: ページ変換のユーザーとして、カスタム ロジックを適用してニーズを実現する必要がある場合があります。たとえば、カスタム SPFX Web パーツで動作するように特定のプロパティを変換する必要があります。 フレームワークでは、関数を使用してアセンブリを追加できるようにすることで、これをサポートしています。..単に AddOn セクションでそれらを定義し、後で指定された名前でプレフィックスを付けてカスタム関数を参照するだけで、発行ページ変換でカスタム コードが使用されます。

  • PageLayouts: この要素には、使用する予定の各ページ レイアウトの情報が含まれています。 ページ レイアウトごとに、ヘッダー、Web パーツ、メタデータ、Web パーツ ゾーン、固定 Web パーツの定義が表示されます。

詳細については後の章で説明します。

ページ レイアウト モデルの PageLayout 定義

ページ レイアウト マッピング モデルでページ レイアウト マッピングがどのように構成されているかを分析しましょう。これは、サンプル定義に基づいて行うのが最適です。

    <PageLayout Name="MyPageLayout" AlsoAppliesTo="MyOtherPageLayout;MyOtherPageLayout2" AssociatedContentType="CustomPage1" PageLayoutTemplate="AutoDetect" IncludeVerticalColumn="true" PageHeader="Custom">
      <SectionEmphasis VerticalColumnEmphasis="Soft">
        <Section Row="3" Emphasis="Neutral" />
      </SectionEmphasis>
      <Header Type="FullWidthImage" Alignment="Left" ShowPublishedDate="true">
        <Field Name="PublishingRollupImage;PublishingPageImage" HeaderProperty="ImageServerRelativeUrl" Functions="ToImageUrl({@name})" />
        <Field Name="ArticleByLine" HeaderProperty="TopicHeader" Functions=""/>
        <Field Name="PublishingContact" HeaderProperty="Authors" Functions="ToAuthors({PublishingContact})"/>
      </Header>
      <MetaData ShowPageProperties="true" PagePropertiesRow="1" PagePropertiesColumn="4" PagePropertiesOrder="1">
        <Field Name="PublishingContactName;PublishingContactEmail" TargetFieldName="MyPageContact" Functions="" />
        <Field Name="MyCategory" TargetFieldName="Category" Functions="" ShowInPageProperties="true" />
      </MetaData>
      <WebParts>
        <Field Name="PublishingPageImage" TargetWebPart="SharePointPnP.Modernization.WikiImagePart" Row="1" Column="1" Order="1">
          <Property Name="ImageUrl" Type="string" Functions="ToImageUrl({PublishingPageImage})"/>
          <Property Name="AlternativeText" Type="string" Functions="ToImageAltText({PublishingPageImage})" />
        </Field>
        <Field Name="PublishingPageContent" TargetWebPart="SharePointPnP.Modernization.WikiTextPart" Row="1" Column="2" Order="1">
          <Property Name="Text" Type="string" Functions="" />
        </Field>
      </WebParts>
      <WebPartZones>
        <WebPartZone Row="2" Column="1" Order="1" ZoneId="g_0C7F16935FAC4709915E2D77092A90DE" ZoneIndex="0">
          <!-- Optional element, only needed if you want to use custom position of the web parts coming from a web part zone -->
          <WebPartZoneLayout>
            <WebPartOccurrence Type="Microsoft.SharePoint.WebPartPages.ContentEditorWebPart, Microsoft.SharePoint, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" Row="3" Column="2"/>
            <WebPartOccurrence Type="Microsoft.SharePoint.WebPartPages.ContentEditorWebPart, Microsoft.SharePoint, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" Row="3" Column="1" Order="2"/>
            <WebPartOccurrence Type="Microsoft.SharePoint.WebPartPages.XsltListViewWebPart, Microsoft.SharePoint, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" Row="3" Column="1" Order="1"/>
          </WebPartZoneLayout>
        </WebPartZone>
      </WebPartZones>
      <FixedWebParts>
        <WebPart Row="1" Column="2" Order="1" Type="Microsoft.SharePoint.WebPartPages.ContentEditorWebPart, Microsoft.SharePoint, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c">
          <Property Name="TITLE" Type="string" Value="Example Embedded Web Content Editor"/>
          <Property Name="CONTENT" Type="string" Value="PnP Rocks!"/>
        </WebPart>
      </FixedWebParts>
    </PageLayout>

注:

これらのファイルの編集中は、 pagelayoutmapping.xsd スキーマ を使用することをお勧めします。 ページ変換に指定したファイルは、そのスキーマに対して検証され、指定されたページ レイアウト マッピング ファイルが無効な場合、変換は失敗します。

PageLayout 要素

PageLayout 要素では、次のプロパティが使用されます。

  • [名前]: ページ レイアウトの名前が含まれます。
  • AlsoAppliesTo: このマッピングを複数のページ レイアウトに使用する場合は、これらの追加のページ レイアウトの名前を、この属性のセミコロン区切りリストとして指定できます。 Name プロパティは最初のページ レイアウトの名前になります。AlsoAppliesTo には追加のページ レイアウトだけが含まれます。
  • AssociatedContentType: 使用するモダン サイト ページ コンテンツ タイプの名前。 既定のサイト ページ コンテンツ タイプを使用する場合は、空白のままにします。
  • PageLayoutTemplate: 使用するレイアウト システム... AutoDetect は、すべてのケースで正常に動作しますが、必要に応じて特定の Wiki レイアウトを選択することもできます。
  • IncludeVerticalColumn: 作成されたターゲット ページを指定する省略可能な要素には、垂直列が必要です。 垂直列を使用する場合は、縦列を追加の列としてターゲットにするため、垂直列を追加する前に 3 つの列がある場合は、4 列になり、ページ コンテンツの列値を 4 に設定して垂直列に配置できます。
  • PageHeader: 使用するページ ヘッダーの種類を制御します。 既定値は Custom as ですが、ヘッダーなしまたはDefault既定のモダン ページ ヘッダーに切り替えることができますNone

SectionEmphasis 要素

省略可能な SectionEmphasis 要素では、次のプロパティが使用されます。

  • VerticalColumnEmphasis: このプロパティを使用して、垂直列の強調を None、Neutral、Soft、Strong に設定します

セクションごとに、必要に応じて Section 要素を使用してセクション強調を指定できます。

  • [行]: このセクションの行番号を示します。最初のセクションの番号は 1 になります
  • 強調: セクションの強調を None、Neutral、Soft、Strong に設定します

Header 要素

Header 要素では、次のプロパティが使用されます。

  • : 既定では、 FullWidthImage ヘッダーがヘッダー イメージを全幅で表示できるようにします。 代替オプションは、 ColorBlockCutInShapeNoImageです。 この属性は、PageHeader 属性が に Custom設定されている場合にのみ関連します。
  • 配置: ページ ヘッダーのコンテンツの配置方法を制御します。 既定値は です Left。代替オプションは です Center
  • ShowPublishedDate: ページの発行日を表示するかどうかを定義します。 既定値は true です。

モダン ヘッダーで使用するフィールドごとに、次を指定する Field 要素を追加する必要があります。

  • 名前: クラシック発行ページのフィールドの名前。 たとえば、値としてを追加 PublishingRollupImage;PublishingPageImage すると、 が PublishingRollupImage 設定された場合は が取得され、設定されていない場合は が PublishingPageImage 試行されます。 必要な数のオーバーライドを追加できます
  • HeaderProperty: 設定するヘッダー プロパティの名前
  • 関数: を空に設定すると、クラシック発行ページのフィールド値はそのまま取得されますが、ここで関数を指定すると、その関数の出力が使用されます。 複数のフィールドを指定した場合 (したがって、フィールドオーバーライドオプションを使用)、関数で使用するフィールドを として指定する必要があります。 {@name}

モダン ページ ヘッダーを構築する場合、発行ページから取得されるデータを設定できる 4 つのページ ヘッダー プロパティがあります。

  • ImageServerRelativeUrl: ヘッダーに画像を表示する必要がある場合、このフィールドは、ページと同じサイト コレクションに存在するイメージのサーバー相対イメージ パスを定義する必要があります。 既定では、従来の発行ページ PublishingRollupImage フィールドが使用されますが、Img タグが含まれるため、フィールドの内容は関数を ToImageUrl 介してクリーンアップされます。
  • TopicHeader: 既定では、クラシック発行ページ ArticleByLine フィールドがモダン ページ ヘッダーのトピック ヘッダーとして使用されます
  • 作成者: 作成者を設定すると、このページのメイン連絡先をページ ヘッダーに表示できます。 既定では、従来の発行ページ PublishingContact フィールドが使用されますが、これはユーザー フィールドであるため、フィールドの内容は関数を ToAuthors 介して変換されます。
  • AlternativeText: 既定ではマップされませんが、必要に応じて、モダン ヘッダーの代替テキスト プロパティを埋めるためにカスタム マッピングを追加できます

たとえば、トピック ヘッダーを設定したくない場合は、それぞれの Field 要素を削除またはコメントするだけです。

ページ ヘッダーイメージオプション

既定のマッピングでは、フィールドで定義されているイメージが PublishingRollupImage ページ ヘッダーとして取得されますが、必要に応じて別の発行イメージ フィールドを選択するか、ソース サイトまたはターゲット サイトに住むイメージのハード コーディングされた値を指定できます。 次のサンプルは、静的イメージを持つヘッダーを示しています。

<Header Type="FullWidthImage" Alignment="Left" ShowPublishedDate="true">
  <!-- Note that static values do require specifying them between '' -->
  <Field Name="PublishingRollupImage" HeaderProperty="ImageServerRelativeUrl" Functions="StaticString('/sites/classicportal/images/myimage.jpg')" />
  <Field Name="ArticleByLine" HeaderProperty="TopicHeader" Functions=""/>
  <Field Name="PublishingContact" HeaderProperty="Authors" Functions="ToAuthors({PublishingContact})"/>
</Header>

MetaData 要素

metadata 要素は、モダン ページのメタデータとして引き継ぐ必要があるクラシック発行ページ フィールドを定義します。 場合によっては、OOB ページ プロパティ Web パーツを使用してメタデータも表したい場合は、次の省略可能な属性を使用して指定します。

  • ShowPageProperties: 結果のモダン ページにページ プロパティ Web パーツが追加されます
  • PagePropertiesRow: ページ プロパティ Web パーツを保持する行
  • PagePropertiesColumn: ページ プロパティ Web パーツを保持する列
  • PagePropertiesOrder: 定義された行/列のページ プロパティ Web パーツの順序

引き継ぐフィールドごとに、次を指定する Field 要素を追加する必要があります。

  • 名前: クラシック発行ページのフィールドの名前。 たとえば、値としてを追加 PublishingContactName;PublishingContactEmail すると、 が PublishingContactName 設定された場合は が取得され、設定されていない場合は が PublishingContactEmail 試行されます。 必要な数のオーバーライドを追加できます
  • TargetFieldName: ターゲット モダン ページのフィールドの名前
  • 関数: を空に設定すると、クラシック発行ページのフィールド値はそのまま取得されますが、ここで関数を指定すると、その関数の出力が使用されます。 複数のフィールドを指定した場合 (したがって、フィールドオーバーライドオプションを使用)、関数で使用するフィールドを として指定する必要があります。 {@name}
  • ShowInPageProperties: true に設定されている場合と、ページ プロパティ Web パーツが表示されている場合、このフィールドがページ プロパティ Web パーツに表示されるよりもオンになっている場合

注:

  • 関数のサポートは分類フィールドでは使用できません

WebParts 要素

(Web パーツやテキストなど) ターゲット ページのビジュアル要素にする必要があるクラシック発行ページの各フィールドは、Web パーツ セクションで定義する必要があります。

  • 名前: クラシック発行ページのフィールドの名前。
  • TargetWebPart: モダン ページでこのフィールドを視覚化するターゲット Web パーツの種類。 サポートされているターゲット Web パーツは、 SharePointPnP.Modernization.WikiTextPartSharePointPnP.Modernization.WikiImagePartMicrosoft.SharePoint.Publishing.WebControls.SummaryLinkWebPart, Microsoft.SharePoint.Publishing, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429cです。
  • : ターゲット Web パーツを配置する行。 1 以上である必要があります。
  • : ターゲット Web パーツを配置する列。 1、2、または 3 である必要があります。
  • 順序: 定義された行/列内のターゲット Web パーツの順序。

選択した TargetWebPart に応じて、変換中に必要なデータを保持する Web パーツ プロパティを指定する必要があります。 各プロパティには、次のプロパティがあります。

  • 名前: プロパティの名前。 これらのプロパティ名は、 ページ変換モデルで使用されるプロパティと一致する必要があります。
  • : プロパティの型。 これらのプロパティ型は、 ページ変換モデルで使用されるプロパティと一致する必要があります。
  • 関数: が空に設定されている場合、プロパティ値はソース クラシック発行ページのフィールドの値になります。 関数を使用して、最初にフィールドの内容を変換したり、クラシック発行ページの別のフィールドのデータを使用したりできます。

WebPartZones 要素

ページ レイアウトに Web パーツ ゾーンが含まれている場合は、ここで定義する必要があります。 これは、変換された Web パーツをモダン ページに正しく配置するために必要です。 次のプロパティが使用されます。

  • ZoneId: ゾーンの名前
  • ZoneIndex: ゾーンのインデックス (整数)
  • : このゾーンでホストされている Web パーツを配置する行。 1 以上である必要があります。
  • : このゾーンでホストされている Web パーツを配置する列。 1、2、または 3 である必要があります。
  • 順序: このゾーンでホストされている Web パーツの定義済みの行/列の順序

発行ページに Web パーツ ゾーンに複数の Web パーツがあり、各 Web パーツをターゲット ページ上に異なる方法で配置したい場合があります。 これを行うには、省略可能な WebPartZoneLayout 要素を使用します。

<WebPartZoneLayout>
  <WebPartOccurrence Type="Microsoft.SharePoint.WebPartPages.ContentEditorWebPart, Microsoft.SharePoint, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" Row="3" Column="2"/>
  <WebPartOccurrence Type="Microsoft.SharePoint.WebPartPages.ContentEditorWebPart, Microsoft.SharePoint, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" Row="3" Column="1" Order="2"/>
  <WebPartOccurrence Type="Microsoft.SharePoint.WebPartPages.XsltListViewWebPart, Microsoft.SharePoint, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" Row="3" Column="1" Order="1"/>
</WebPartZoneLayout>

上記の定義は、最初の ContentEditorWebPart が行 3 列 2 に移動するという結果になります。 2 番目の ContentEditorWebPart は行 3、列 1 は順序 2、最初の XSLTListView Web パーツは行 3、列 1 は順序 1 になります。 Web パーツ ゾーンに対応する Web パーツがない場合は、必要な数の WebPartOccurrence 要素を定義できます。WebPartOccurrence 要素は無視されます。 Web パーツ ゾーンに WebPartOccurrence 要素として一覧表示されていない Web パーツがある場合、その Web パーツは WebPartZone 要素から行、列、および注文情報を取得します。

FixedWebParts 要素

ページ レイアウトに "固定" Web パーツが含まれている場合があります。これは、ページ レイアウト内でハードコーディングされた Web パーツであるため、ページ レイアウトを使用するすべてのページに存在します。 これらの "固定" Web パーツを検出する API がないため、ページ レイアウト マッピング モデルの一部として定義する必要があります。

"固定" Web パーツでは、次のプロパティを設定できます。

  • : 固定 Web パーツの型。 使用可能な型の一覧については、 こちらを 参照してください。
  • : "固定" Web パーツを配置する行。 1 以上である必要があります。
  • : "固定" Web パーツを配置する列。 1、2、または 3 である必要があります。
  • 順序: 同じ行と列に複数の Web パーツを配置した場合に関連する順序。

"固定" Web パーツごとに、関連するプロパティを定義する必要があります。 通常、これらのプロパティは、クラシック ページ レイアウトで定義されているとおりに引き継ぐ必要があります。 プロパティごとに、次の属性を設定できます。

  • プロパティ: プロパティの名前。 これらのプロパティ名は、 ページ変換モデルで使用されるプロパティと一致する必要があります。
  • : プロパティの型。 これらのプロパティ型は、 ページ変換モデルで使用されるプロパティと一致する必要があります。
  • : このプロパティの値。 値を XML エンコードすることを忘れないでください。

ページ レイアウト モデルの AddOns 定義

アドオンを使用すると、次の 2 つの手順に従って、カスタム ロジックをページ レイアウト マッピング モデルに挿入できます。

  • カスタム関数をホストするカスタム アセンブリを作成する
  • このカスタム アセンブリを AddOns 要素内で宣言します。

独自のカスタム関数またはセレクター アセンブリを作成します。

独自の関数を作成するには、次に示すように、プロジェクト内で SharePoint.Modernization.Framework アセンブリを参照してから、SharePointPnP.Modernization.Framework.Functions.FunctionsBase クラスを継承するクラスを作成する必要があります。

using Microsoft.SharePoint.Client;
using SharePointPnP.Modernization.Framework.Functions;
using System;

namespace Contoso.Modernization
{
    public class MyCustomFunctions: FunctionsBase
    {
        public MyCustomFunctions(ClientContext clientContext) : base(clientContext)
        {
        }

        public string MyListAddServerRelativeUrl(Guid listId)
        {
            if (listId == Guid.Empty)
            {
                return "";
            }
            else
            {
                var list = this.clientContext.Web.GetListById(listId);
                list.EnsureProperties(p => p.RootFolder.ServerRelativeUrl);
                return list.RootFolder.ServerRelativeUrl;
            }
        }

    }
}

カスタム アセンブリの宣言

ユーザー関数を使用するには、次に示すように、ライブラリまたはクラスごとに 1 つの参照を AddOns 要素に追加して、それらをモデルで宣言する必要があります。

<AddOn Name="Custom" Type="Contoso.Modernization.MyCustomFunctions" Assembly="Contoso.Modernization.dll" />

または、完全修飾パスを指定する必要があります。

<AddOn Name="Custom" Type="Contoso.Modernization.MyCustomFunctions" Assembly="c:\transform\Contoso.Modernization.dll" />

宣言ごとに名前が指定されている (上のサンプルでは Custom) ことにご注意ください。

独自のカスタム関数およびセレクターの使用

アセンブリの定義が完了すると、次の例の Custom というプレフィックスのような名前でそれらを参照することにより、独自のカスタム関数やセレクターを使用できます。

<Property Name="ListId" Type="guid" Functions="{ListServerRelativeUrl} = Custom.MyListAddServerRelativeUrl({ListId})"/>

ページ レイアウト マッピングに関する FAQ

ソース ページの作成情報を保持する

PnP PowerShell アプローチを使用する場合は、コマンドレットで コマンドレットをConvertTo-PnPPage使用-KeepPageCreationModificationInformationします。 .Net アプローチを使用している場合は、パラメーターを KeepPageCreationModificationInformation true に設定します。 このオプションを使用すると、ソース ページの [作成]、[変更済み]、[作成者]、および [エディター] フィールドの値がターゲット ページに表示されます。

注:

ページ変換の一環として、ページをニュースとして昇格させるか、ページを公開すると、エディター フィールドがページ変換を実行しているアカウントに設定されます

作成したページをニュースとして宣伝したい

ページ レイアウトからニュース ページとして作成されたページの昇格は、コマンドレットの パラメーター -KeepPageCreationModificationInformation (PnP PowerShell アプローチを使用している場合) を使用-PostAsNewsするか、またはパラメーターを true (.Net アプローチを使用する場合) に設定PostAsNewsすることで実行できます。

オプションとオプションをPostAsNews組み合わせて使用すると、FirstPublishedDateFieldフィールドはソース ページの変更日に設定KeepPageCreationModificationInformationされます。 フィールドは FirstPublishedDateField 、ニュースロールアップ中に表示される日付値です。

作成したページにハードコーディングされたテキストを挿入する

ページ レイアウトにテキスト スニペットが含まれている場合があります。これは、実際のページのコンテンツではないため、変換されません。 その場合は、次のようにマップする "fake" フィールドを定義できます。

<WebParts>
  ...
  <Field Name="ID" TargetWebPart="SharePointPnP.Modernization.WikiTextPart" Row="1" Column="3">
    <Property Name="Text" Type="string" Functions="StaticString('&lt;H1&gt;This is some extra text&lt;/H1&gt;')" />
  </Field>
  ...
</WebParts>

注:

StaticString 関数で提供される HTML は XML でエンコードされ、ソース ページ HTML のように書式設定する必要があります。この HTML は、最新のテキスト エディターに準拠している HTML に変換されます

フィールドのコンテンツのプレフィックスまたはサフィックスを付ける

前の章で使用した方法では、ページに余分なテキストを追加できますが、余分なテキストが独自のテキスト部分に追加されるという欠点があります。 余分なテキストを変換する実際のテキストと統合する場合は、次の方法でこれを行うことができます。 既存のフィールド コンテンツにプレフィックスまたはサフィックスを付けることができ、必要に応じて、フィールドにコンテンツが含まれている場合にのみプレフィックス/サフィックスを実行できます。 および PrefixAndSuffix 関数の PrefixSuffix bool パラメーターは、フィールドコンテンツが空の場合にプレフィックス/サフィックスを実行する必要があるかどうかを定義します。'true' は、フィールドが空の場合でもアクションを適用することを意味します。

以下の関数の詳細については、「 ページ変換関数とセレクター 」を参照してください。

<WebParts>
...
  <Field Name="PublishingPageContent" TargetWebPart="SharePointPnP.Modernization.WikiTextPart" Row="1" Column="2">
    <Property Name="Text" Type="string" Functions="PrefixAndSuffix('&lt;H1&gt;Prefix some extra text&lt;/H1&gt;','&lt;H1&gt;Suffix some extra text&lt;/H1&gt;',{PublishingPageContent},'false')" />
  </Field>
  ...
  <Field Name="PublishingPageContent" TargetWebPart="SharePointPnP.Modernization.WikiTextPart" Row="1" Column="2">
    <Property Name="Text" Type="string" Functions="Prefix('&lt;H1&gt;Prefix some extra text&lt;/H1&gt;',{PublishingPageContent},'true')" />
  </Field>
  ...
  <Field Name="PublishingPageContent" TargetWebPart="SharePointPnP.Modernization.WikiTextPart" Row="1" Column="2">
    <Property Name="Text" Type="string" Functions="Suffix('&lt;H1&gt;Suffix some extra text&lt;/H1&gt;',{PublishingPageContent},'false')" />
  </Field>
...
</WebParts>

マネージド メタデータ フィールドに 1 つ以上の用語を設定する

ソース ページのメタデータにマネージド メタデータ フィールドがある場合は、ターゲット ページに対して同様のマネージド メタデータ フィールドが必要になる場合があります。 特定のページ変換には現在、マネージド メタデータ マッピング機能があり、問題が発生します。 考えられる回避策は、複数値管理メタデータ フィールドの場合に、選択した用語または用語のセットをターゲット管理メタデータ フィールドに設定することです。 これは、次の例に示すように、 関数を DefaultTaxonomyFieldValue 使用して実行できます。

<MetaData ShowPageProperties="true" PagePropertiesRow="1" PagePropertiesColumn="4" PagePropertiesOrder="1">
...
  <Field Name="TaxField2" TargetFieldName="Metadata2" Functions="DefaultTaxonomyFieldValue({TaxField2},'a65537e8-aa27-4b3a-bad6-f0f61f84b9f7|69524923-a5a0-44d1-b5ec-7f7c6d0ec160','true')" ShowInPageProperties="true"/>
...
</MetaData>

関数の詳細については、「 ページ変換関数とセレクターDefaultTaxonomyFieldValue を参照してください。

作成したページに追加の Web パーツを追加する

クラシック発行ページをモダン ページに変換する場合は、クラシック発行ページにその Web パーツのクラシック バージョンが存在せずに、作成したページにモダン Web パーツを 追加 したい場合があります。 これは、次に示すように、webpartmapping.xmlとページ レイアウト マッピング ファイルを調整することで行うことができます。

最初に、この標準の SPFX Hello World Web パーツに示すように、カスタム Web パーツをファイル内の要素に追加WebPartsして、webpartmapping.xmlファイルに定義します。

<WebParts>
  ...
  <!-- Custom Hello world web part-->
  <WebPart Type="SharePointPnP.Demo.HelloWorld" CrossSiteTransformationSupported="true">
    <Properties>
      <Property Name="HelloWorld" Type="string" />
    </Properties>
   <Mappings>
    <Mapping Default="true" Name="default">
      <ClientSideWebPart Type="Custom" ControlId="157b22d0-8006-4ec7-bf4b-ed62383fea76" Order="10" JsonControlData="&#123;&quot;serverProcessedContent&quot;:&#123;&quot;htmlStrings&quot;:&#123;&#125;,&quot;searchablePlainTexts&quot;:&#123;&#125;,&quot;imageSources&quot;:&#123;&#125;,&quot;links&quot;:&#123;&#125;&#125;,&quot;dataVersion&quot;:&quot;1.0&quot;,&quot;properties&quot;:&#123;&quot;description&quot;:&quot;{HelloWorld}&quot;,&quot;test&quot;:&quot;Multi-line text field&quot;,&quot;test1&quot;:true,&quot;test2&quot;:&quot;2&quot;,&quot;test3&quot;:true&#125;&#125;"/>
    </Mapping>
  </Mappings>
</WebPart>
  ...
</WebParts>

上記の ClientSideWebPart 要素でカスタム Web パーツを正しく定義する方法がない場合は、次の手順に従います。

  • サイト内のSharePoint Framework Workbench に移動します (例: https://contoso.sharepoint.com/sites/myportalsite/_layouts/workbench.aspx)
  • カスタム Web パーツをワークベンチに追加し、必要に応じ構成する
  • ツール バーの [Web パーツ データ] ボタンをクリックし、[モダン ページ] ボタンをクリックします。
  • WebPartData json 構造体をコピーし、それを使用して次の手順を完了します。
    • ControlId guid 値は、id json プロパティの値です。
    • コピーしたスニペットから、id、instanceIf、title、description という json プロパティを削除します。 この時点で、次の点が残っています。 {"serverProcessedContent":{"htmlStrings":{},"searchablePlainTexts":{},"imageSources":{},"links":{}},"dataVersion":"1.0","properties":{"description":"HelloWorld from Bert","test":"Multi-line text field","test1":true,"test2":"2","test3":true}}
    • XML でこの文字列をエンコードすると、次の情報が提供されます。 &#123;&quot;serverProcessedContent&quot;:&#123;&quot;htmlStrings&quot;:&#123;&#125;,&quot;searchablePlainTexts&quot;:&#123;&#125;,&quot;imageSources&quot;:&#123;&#125;,&quot;links&quot;:&#123;&#125;&#125;,&quot;dataVersion&quot;:&quot;1.0&quot;,&quot;properties&quot;:&#123;&quot;description&quot;:&quot;HelloWorld from Bert&quot;,&quot;test&quot;:&quot;Multi-line text field&quot;,&quot;test1&quot;:true,&quot;test2&quot;:&quot;2&quot;,&quot;test3&quot;:true&#125;&#125;
    • 必要に応じて、この文字列に Web パーツ パラメーターを挿入します (上のサンプルの {HelloWorld} など)。 &#123;&quot;serverProcessedContent&quot;:&#123;&quot;htmlStrings&quot;:&#123;&#125;,&quot;searchablePlainTexts&quot;:&#123;&#125;,&quot;imageSources&quot;:&#123;&#125;,&quot;links&quot;:&#123;&#125;&#125;,&quot;dataVersion&quot;:&quot;1.0&quot;,&quot;properties&quot;:&#123;&quot;description&quot;:&quot;{HelloWorld}&quot;,&quot;test&quot;:&quot;Multi-line text field&quot;,&quot;test1&quot;:true,&quot;test2&quot;:&quot;2&quot;,&quot;test3&quot;:true&#125;&#125;
    • 結果の文字列を JsonControlData プロパティに貼り付けます

この設定が完了したら、このカスタム Web パーツに変換される WebParts セクションにフィールドを追加して、ページ レイアウト マッピングを更新する必要があります。

<WebParts>
  ...
  <!-- Add an extra web part on the page -->
  <Field Name="ID"  TargetWebPart="SharePointPnP.Demo.HelloWorld" Row="4" Column="1" Order="1">
    <Property Name="HelloWorld" Type="string" Functions="StaticString('PnP Rocks!')"/>
  </Field>
  ...
</WebParts>

変換の一部としてカスタム webpartmapping.xml ファイル (-WebPartMappingFile .Net を使用する場合は PowerShell コマンドレット パラメーター、 PublishingPageTransformator コンストラクター) を指定してください。

私は多くのAdd-Inパーツを使用しており、これらをカスタムSPFX Webパーツに変換したいと考えています

ページ変換の既定の動作は、アドインがモダン ページで動作するように、モダン ページのアドイン パーツを引き継ぐだけです。 ただし、一部のアドイン パーツをカスタム SPFX ベースの Web パーツに選択的に変換する場合は、アドイン パーツの一部を削除し、残りのアドイン パーツを保持すると、既定のマッピングでは十分ではありません。 次の例では、関数を StaticString 使用してアドイン タイトルをマッピング セレクター値としてフィードしていることがわかります。 そのため、Web パーツのタイトルに基づいてマッピングが選択されます。 最初のアドインはモダン ページでアドインとして引き継がれ、2 番目のアドインはカスタム SPFX ベースの代替に変換され、最後のアドインは単に削除されます。

カスタム SPFX ベースの Web パーツにマッピングする場合、これらのプロパティがマッピング ファイルの [プロパティ] ノードに一覧表示されていない場合でも、任意のアドイン パーツ プロパティを使用して SPFX ベースの代替手段 (例: 下のサンプルの {HelloWorld}) を構成できます。 カスタム マッピング ファイルを作成する方法の詳細については、前の章も参照してください。

<WebPart Type="Microsoft.SharePoint.WebPartPages.ClientWebPart, Microsoft.SharePoint, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" CrossSiteTransformationSupported="true">
  <!-- Note: the add-in can depend on assets that live in the source site, which is not something we can detect -->
  <Properties>
    <Property Name="FeatureId" Type="guid"/>
    <Property Name="ProductWebId" Type="guid"/>
    <Property Name="ProductId" Type="guid"/>
  </Properties>
  <Mappings Selector="StaticString({Title})">
    <Mapping Name="My Custom Report" Default="true">
      <!-- We keep this web part -->
      <ClientSideWebPart Type="ClientWebPart" Order="10" JsonControlData="{}"/>
    </Mapping>
    <Mapping Name="News Ticker" Default="false">
      <!--This web part will be transformed to a custom SPFX based web part -->
      <ClientSideWebPart Type="Custom" ControlId="157b22d0-8006-4ec7-bf4b-ed62383fea76" Order="10" JsonControlData="&#123;&quot;serverProcessedContent&quot;:&#123;&quot;htmlStrings&quot;:&#123;&#125;,&quot;searchablePlainTexts&quot;:&#123;&#125;,&quot;imageSources&quot;:&#123;&#125;,&quot;links&quot;:&#123;&#125;&#125;,&quot;dataVersion&quot;:&quot;1.0&quot;,&quot;properties&quot;:&#123;&quot;description&quot;:&quot;{HelloWorld}&quot;,&quot;test&quot;:&quot;Multi-line text field&quot;,&quot;test1&quot;:true,&quot;test2&quot;:&quot;2&quot;,&quot;test3&quot;:true&#125;&#125;"/>
    </Mapping>
    <Mapping Name="Some other add-in" Default="false">
      <!-- This add-in will not be taken over -->
    </Mapping>
  </Mappings>
</WebPart>

アドイン パーツのプロパティを組み合わせてセレクター文字列を生成することで、アドイン パーツのプロパティを考慮してマッピングをより正確にすることもできます。

<WebPart Type="Microsoft.SharePoint.WebPartPages.ClientWebPart, Microsoft.SharePoint, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" CrossSiteTransformationSupported="true">
  <!-- Note: the add-in can depend on assets that live in the source site, which is not something we can detect -->
  <Properties>
    <Property Name="FeatureId" Type="guid"/>
    <Property Name="ProductWebId" Type="guid"/>
    <Property Name="ProductId" Type="guid"/>
  </Properties>
  <Mappings Selector="ConcatenateWithPipeDelimiter({Title},{effect})">
    <Mapping Name="News Ticker|Slide" Default="true">
      <ClientSideText Text="***TEST.{Title} web part - Slide mapping chosen! Slider theme = {theme}***" Order="10" />
    </Mapping>
    <Mapping Name="News Ticker|Scroll" Default="false">
      <ClientSideText Text="***TEST.{Title} web part - Scroll mapping chosen! Slider theme = {theme}***" Order="10" />
    </Mapping>
  </Mappings>
</WebPart>

ページ プレビュー イメージを制御できますか

ページにページ ヘッダー イメージがある場合、そのイメージはページ プレビュー イメージとしても使用されます。 ただし、ページ プレビュー イメージを制御する場合は、関数を使用するか、次のToPreviewImageUrlサンプルに示すようにハード コーディングされた値を指定してフィールドを設定BannerImageUrlできます。

<!-- When you do have a publishing image field that will need to be set as preview image -->
<Field Name="PreviewImage" TargetFieldName="BannerImageUrl" Functions="ToPreviewImageUrl({PreviewImage})" />

<!-- When you do have a hard coded preview image already available on the target site. Note that the source field name (PublishingContactEmail in below sample) must exist, although it's not used here  -->
<Field Name="PublishingContactEmail" TargetFieldName="BannerImageUrl" Functions="StaticString('https://contoso.sharepoint.com/_layouts/15/getpreview.ashx?guidSite=88eebac1710b464cb6816639340fac55&amp;guidWeb=277fe40db9d24da5bbc6827714184958&amp;guidFile=91bf17fd54e849149a3ad6b4f006304e&amp;ext=jpg')" />

<!-- When you want to refer a static image living in the source site  -->
<Field Name="PreviewImage" TargetFieldName="BannerImageUrl" Functions="ToPreviewImageUrl('/sites/classicportal/images/myimage.jpg')" />

変換によって最新の QuickLinks Web パーツ (SummaryLinkWebPart の変換など) が発生する場合、ページ変換フレームワークでは、QuickLinks Web パーツの既定の基本構成が使用されます。 ただし、別の構成が必要な場合は、QuickLinksJsonProperties プロパティを指定して行うことができます。 次のサンプルに示すように、エンコードされた JSON プロパティを StaticString 関数でラップします。

<WebParts>
  ...
  <Field Name="SummaryLinks" TargetWebPart="Microsoft.SharePoint.Publishing.WebControls.SummaryLinkWebPart, Microsoft.SharePoint.Publishing, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" Row="1" Column="2">
    <!-- No function specified, means the content of the PublishingPageContent field will be assigned to the value of the first listed web part property -->
    <Property Name="SummaryLinkStore" Type="string" />
    <Property Name="Title" Type="string" Functions="EmptyString()"/>
    <Property Name="QuickLinksJsonProperties" Type="string" Functions="StaticString('{&quot;isMigrated&quot;: false, &quot;layoutId&quot;: &quot;Button&quot;, &quot;shouldShowThumbnail&quot;: true, &quot;buttonLayoutOptions&quot;: { &quot;showDescription&quot;: false, &quot;buttonTreatment&quot;: 1, &quot;iconPositionType&quot;: 2, &quot;textAlignmentVertical&quot;: 1, &quot;textAlignmentHorizontal&quot;: 2, &quot;linesOfText&quot;: 2}, &quot;listLayoutOptions&quot;: { &quot;showDescription&quot;: false, &quot;showIcon&quot;: true}, &quot;waffleLayoutOptions&quot;: { &quot;iconSize&quot;: 1, &quot;onlyShowThumbnail&quot;: false}, &quot;hideWebPartWhenEmpty&quot;: true}')" />
  </Field>
  ...
</WebParts>

サンプルの JSON には、設定できるすべての構成オプションが示されていますが、必要なものだけを定義することもできます。 JSON が有効で、構造が維持されている限り、カスタムの QuickLinks 構成が取得されます。