マイクロソフト 365 PnP の新しい変換フレームワークの紹介
マイクロソフト 365 コミュニティは、新しいプロジェクトのパブリック プレビューを導入しています" Microsoft 365 PnP 変換フレームワーク。この新しいプロジェクトの目標は、既存のポータルを Microsoft SharePoint Online の最新ポータルに変換する顧客とパートナーを支援することです。
このプロジェクトは、SharePoint Online と SharePoint オンプレミス (2010 年、2013 年、2016 年、2019 年) の単一ページの近代化を対象とした数年前に導入された既存のプロジェクト「PnP モダナイゼーション フレームワーク」の進化です。ただし、新しい変換フレームワークは、Web ベース/コンテンツ ベースのソリューションを最新の SharePoint Online ポータルに変換するために使用できる汎用モデルに基づいています。
実際、新しいフレームワークはオープンで抽象的なアーキテクチャで構築されており、依存関係の注入や非同期開発などの最新の開発手法をサポートしています。内部的には、新しいフレームワークは PnP Core SDK の上に構築されており、.NET Standard 2.0 と .NET 5.0 を対象としており、任意のプラットフォーム (Windows、Linux、macOS) およびクラウドベースのサービスで使用できます。たとえば、コンテンツのページを SharePoint Online の最新ページに変換する Azure 関数を作成するのは本当に簡単です。

図 1 に示すように、フレームワークはいくつかの柱に基づいています。まず、最新のページに変換するコンテンツを読み取るために使用できる「何か」であるデータソースの概念があります。データ ソースは、プラグイン可能で、コミュニティ内の誰でも作成できる外部ライブラリに基づいています。
次に、外部データ ソースから取得したコンテンツの変換を処理する実際のエンジンである “変換エンジン" があります。大まかに言えば、変換エンジンは、.NET Core/.NET 5.0 で依存関係の注入を使用して簡単に構成およびカスタマイズできる、プラグ可能なマッパーのセットに依存しています。最後に、変換されたページは、フレームワークでサポートされている唯一のユニークな出力である SharePoint Online の最新サイトに保存されます。
最初に、フレームワークは SharePoint オンラインおよび SharePoint オンプレミス (2013、2016、および 2019) を使用可能なデータ ソースとしてサポートします。しかし、将来的には、パートナーやコミュニティプロジェクトによってリリースされるデータソースが増えると予想されます。たとえば、WordPress のデータ ソースや、市場で利用可能なその他のコンテンツ管理システムがある可能性があります。
機能の観点からは、単にインプロセス モデルを使用して単一のページを変換することも、Microsoft Azure 上などでホストされている分散アーキテクチャを使用してページのサイトやバッチを変換することもできます。PnP 変換フレームワークは、ネイティブですべてのアーキテクチャ コンポーネントとカスタマイズ エンドポイントを提供し、開発者が分散アーキテクチャを作成できるようにします。
たとえば、バックエンドの Azure 関数と Azure BLOB ストレージ キューを使用して変換の処理を分離およびスケーリングして変換を非同期的に処理するのに役立つコンポーネントがあります。独自のカスタム ソリューションで参照としてフレームワークを使用することも、PowerShell スクリプトを使用して単一ページの変換をトリガーするのには、PnP PowerShell を使用して使用します。どのような目標を持つ場合でも、新しい PnP 変換フレームワークは、適切なツールを使用して作業を提供します。
図 2 では、変換エンジンの高レベルアーキテクチャを確認できます。

ご覧のとおり、変換プロセスを管理するトランスフォーメーションエスタコンポーネントがあります。変換プロセスは、ライブおよびインプロセスで実行できる変換タスク、または Azure BLOB ストレージ キューや Azure Service Bus キューなどの変換状態マネージャーを介してバックエンド システムに転送される変換タスクで構成されています。
変換タスクは、変換蒸留器によって生成されます。既定ではインプロセスで実行されますが、バックエンド システムでも実行できる変換エブキュータでは、マッピング プロバイダのセットに基づいて実際の変換が実行されます。
開発者の観点からは、次の NuGet パッケージの 1 つ以上をプロジェクトにプラグインするだけで、フレームワークを簡単に使用できます。
- トランスフォーメーション: 変換エンジンと抽象型およびインターフェイスへの参照を取得するだけです。カスタム データ ソースを作成し、すべての抽象クラスとインターフェイスを独自のカスタム ライブラリに実装する必要がある場合はいつでも、このクラスを使用できます。
- 変換.SharePoint: サポートされているデータ ソースとして SharePoint オンラインまたは SharePoint を対象とする変換エンジンを参照します。
新しい PnP 変換フレームワークを使用するには、依存関係の挿入をサポートするように .NET プロジェクトを構成するだけで、必要なサービスを簡単にセットアップできます。次のコードの抜粋では、.NET Core 3.1 で作成され、依存関係の挿入を使用するように構成された .NET コンソール アプリケーションで、単一ページの変換をトリガーする方法を確認できます。 マイクロソフトエクステンションズ.ホスティング 対話型認証を使用した NuGet パッケージ:
var ホスト = ホスト.CreateDefaultBuilder()
依存関係の注入を使用してサービスを構成する
.サービスの構成((ホスティングコンテキスト、サービス) =>
{
PnP コア SDK ライブラリ サービスを追加します。
サービス。追加します。
Appsettings.json ファイルから PnP コア SDK ライブラリ サービスの構成を追加します。
サービス。を設定<PnPコアオプション>(ホスティングコンテキスト)
.設定.Getセクション(「PnPCore」)
PnP コア SDK 認証プロバイダーを追加します。
サービス。追加します。
PnP コア SDK 認証プロバイダーを追加します。
構成を appsettings.json ファイルから行います
サービス。を設定<PnPコア認証オプション>(ホスティングコンテキスト)
.設定.Getセクション(「PnPCore」)
いくつかのカスタム設定を使用して PnP 変換フレームワーク サービスを追加します。
サービス。変換を追加します。
pnpオプション =>
{
接続文字列 = @"c:temp"
},
ページオプション =>
{
ページオプション.コピーページメタデータ = 真;
ページ オプション.キープページ特定のアクセス許可 = 真;
をクリックすると、ページのMigrated_ = “Migrated_。
}
オプション =>
{
空のセクションと列 = 真を削除します。
ユーザー = 真です。
}
);
})
コンソールで実行していることをビルダーに知らせる
.ライフタイム() を使用します。
コンテナーへのサービスの追加
.ビルド();
コンソール ホストの起動
ホストを待ちます。スタート非同期()
必要に応じて DI スコープを作成する
(var スコープ = ホスト) を使用しています。サービス。作成スコープ())
{
PnP コア SDK コンテキスト ファクトリの作成
スコープは pnp コンテキストファクトリ = です。サービスプロバイダー
.必要なサービス<IPnPコンテキストファクトリ>();
ソースを読み取るために、好きなテクニックを使用して CSOM クライアントコンテキストを作成します。
クライアントコンテキストソースコンテキスト = .;クライアント コンテキストの作成方法は、ユーザーが必要です。
ターゲットを書き込む PnP コア SDK の PnP コンテキストを作成します。
を待つコンテキストコンテキストファクトリー.CreateAsync(テストコモン.ターゲットテストサイト)。
ソース ページの URI を定義する
var ソースUri = 新しい
ウリ(「https://<テナント>.sharepoint.com/sites/Classic/SitePages/sourcePage.aspx")。
ページを変換する
var 結果 = 待機ページトランスフォーマー.トランスフォームポイント同期(
ソースコンテキスト、ターゲットコンテキスト、ソースUri)。
}
クリーンアップ コンソール ホスト
ホスト。処分();
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
var ホスト = ホスト.既定のビルダーを作成します。() 依存関係の注入を使用してサービスを構成する .サービスの構成((ホスティングコント内線, サービス) => { PnP コア SDK ライブラリ サービスを追加します。 サービス.アッドパンプコア(); Appsettings.json ファイルから PnP コア SDK ライブラリ サービスの構成を追加します。 サービス.構成<オプション>(ホスティングコンテキスト .構成.セクションを取得します。(「PnPCore」)); PnP コア SDK 認証プロバイダーを追加します。 サービス.認証を追加します。(); PnP コア SDK 認証プロバイダーを追加します。 構成を appsettings.json ファイルから行います サービス.構成<認証オプション>(ホスティングコンテキスト .構成.セクションを取得します。(「PnPCore」)); いくつかのカスタム設定を使用して PnP 変換フレームワーク サービスを追加します。 サービス.変換を追加します。( pnp オプション => { pnp オプション.永続プロバイダー接続文字列 = @“c:temp" }, ページオプション => { ページオプション.ページメタデータのコピー = 真; ページオプション.ページの特定のアクセス許可 = 真; オプション.ターゲットページプレフィックス = 「Migrated_」; } オプション => { オプション.空のセクションと列を削除します。 = 真; オプション.マプトマップユーザー = 真; } ); }) コンソールで実行していることをビルダーに知らせる .コンソールライフタイムを使用する() コンテナーへのサービスの追加 .建てる(); コンソール ホストの起動 待つ ホスト.スタート非同期(); 必要に応じて DI スコープを作成する 使用 (var スコープ = ホスト.サービス.スコープを作成する()) { PnP コア SDK コンテキスト ファクトリの作成 var コンテキストファクトリー = スコープ.サービスプロバイダー .サービスを取得する<IPnP コンテキストファクトリー>(); ソースを読み取るために、好きなテクニックを使用して CSOM クライアントコンテキストを作成します。 クライアントコンテキスト ソースコンテキスト = ...; クライアント コンテキストの作成方法は、ユーザーが必要です。 ターゲットを書き込む PnP コア SDK の PnP コンテキストを作成します。 var ターゲットコンテキスト = 待つ コンテキストファクトリー.非同期を作成する(テストコモン.ターゲットテストサイト); ソース ページの URI を定義する var ソースUri = 新機能 ウリ(「https://<テナント>.sharepoint.com/sites/Classic/SitePages/sourcePage.aspx」); ページを変換する var 結果 = 待つ ページトランスフォーマー.同期を行う( ソースコンテキスト, ターゲットコンテキスト, ソースUri); } クリーンアップ コンソール ホスト ホスト.処分する(); |
ご覧のように、依存関係インジェクション コンテキストを構成し、ソースコンテキストとターゲット コンテキストを作成するためのいくつかの方法がありますが、最後の最後に変換自体は単なるメソッド呼び出しである TransformSharePointPageAsync です。
依存関係の挿入用にサービスを定義および構成する場合、独自のカスタム ロジックをプラグインするために、常にマッパーとサービスの独自のカスタマイズを登録できます。たとえば、カスタム ユーザー マッピング ロジックを提供する場合は、独自のサービスを構成する既定の動作をオーバーライドするだけで済みます。
既定では、PnP.Core.Transformation.SharePoint の AddPnPSharePoint トランスフォーメーション メソッドは、基本的な機能を備えた定義済みのマッピング サービスのセットを構成します。
PowerShell を使用して新しい PnP 変換フレームワークを使用する場合、別のオプションは、PnP PowerShell ライブラリでプレビューの下で利用可能な新しい Invoke-PnP トランスフォーメーション コマンドレットに依存することです。新しいコマンドレットを呼び出す PowerShell コードの抜粋を次に示します。
# ターゲット サイトに接続する
$targetConnection = 接続 PnPOnline https://<テナント>.sharepoint.com/sites/Modern -リターン接続
# ソース サイトに接続する
接続-PnPオンライン https://<テナント>.sharepoint.com/sites/Classic
# トリガー変換
呼び出し-PnP 変換 -ID ソースページ.aspx – ターゲット接続$targetConnection
# ターゲット サイトに接続する $ターゲット接続 = 繋ぐ–オンライン https:<テナント>.sharepoint.com/sites/Modern -リターンコネクション # ソース サイトに接続する 繋ぐ–オンライン https:<テナント>.sharepoint.com/sites/Classic # トリガー変換 呼び出す–プントランスフォーメーション –同一性 ソースページ.aspx –ターゲット接続 $ターゲット接続 |
ターゲット サイトとソース サイトへの接続以外に、変換するページの名前を指定するコマンドレットを呼び出すだけです。もちろん、変換をカスタマイズするためのオプションはたくさんありますが、基本的な構文は上記のサンプルに示したような単純な構文です。
内部的には、変換エンジンはカスタマイズ可能なマッパーのセットに依存します。ここにリストがあります:
- メタデータ マッピング プロバイダー: ページ のメタデータを処理し、ソース コンテンツのメタデータをターゲットの SharePoint Online ページ アイテムのフィールド値に変換します。
- ページ レイアウト マッピング プロバイダー: ページ レイアウトの定義を管理し、SharePoint 発行ページから変換する場合にのみ使用されます。
- 分類マッピング プロバイダー: 分類をターゲットの SharePoint Online 環境の管理メタデータ サービスでサポートされる値に変換します。
- URL マッピング プロバイダ: ソース ドキュメント内で参照される URL を、ターゲット環境の実際の URL に変換します。
- ユーザー マッピング プロバイダー: ソース プラットフォームのユーザーを、ターゲットの SharePoint Online 環境の Microsoft 365 ユーザーにマップします。
- Web パーツ マッピング プロバイダー: これは、変換エンジンの中核であり、コンテンツ ウィジェット、コンポーネント、またはデータ ソースの Web パーツを最新の SharePoint Online のクライアント側の Web パーツに変換します。
トランスフォームを実行する場合エンジンは、コンテンツ ページの抽象定義を作成するために上記のマッパーのいくつかを通過し、ページ ジェネレーターを使用して SharePoint Online で実際の最新ページを作成します。そのため、特殊なマッパーがページジェネレーターで必要なコンテンツの抽象定義を生成できる限り、データ ソースは任意のプラットフォームにすることができます。
現在の計画では、2021 年末までにライブラリの GA バージョンをリリースする予定です。今、あなたはパブリックプレビューで遊ぶことができます。それを見て、それを遊び、それをテストし、私たちはあなたがこの新しいプロジェクトについてどう思うか知らせてください。最後に、この記事で説明されているすべてのプロジェクトとライブラリはオープンソースであることを覚えておいてください。
そのため、さまざまな方法で貢献できます。たとえば、対応するリポジトリの問題リストを使用してフィードバックを提供できます。ただし、コード変更の提案を提出して、GitHub でプルリクエストを作成することもできます。
また、毎週のコミュニティコールに参加することで、積極的にコミュニティ生活に貢献することができます。起動方法がわからない場合は、ブラウザを開き、 http://aka.ms/m365pnp 「共有は思いやり」の取り組みを探します。そこでは、すばらしい Microsoft 365 コミュニティで旅を始めるのに役立つコミュニティ メンバーが見つかります。じゃあ、そこでお会いしましょう!
ディスカッション
コメント一覧
まだ、コメントがありません