XML マニフェスト ファイル

移行 API は、コンテンツのインポートを正しく処理するために XML マニフェスト ファイルに依存しています。 マニフェスト ファイルを適切に定義された形式でCreateします。 AMR API では、この形式でメタデータもエクスポートされます。

XML 検証

マニフェスト ファイルのパッケージ構造は、 SharePoint コンテンツ移行スキーマの制約付きバージョンに基づいています。

無効な XML 文字のエンコード

AMR API では、フィールドに無効な XML 文字がエンコードされます。 に記載されている EncodedAttributes属性をデコードします。

移行 API では、無効な XML 文字エンコードはサポートされていません。

この例では、URL、ParentWebURL、Name、Version という属性がエンコードされています。

<File Url="testlib_x002F_File_0905-1653-31240"
      Id="e72e2015-91a4-4d07-ae9a-7b6c76918d2a"
      ParentWebId="7206fc09-e4af-48b3-8730-ed7321396d7a"
      ParentWebUrl="_x002F_"
      Name="File_0905-1653-31240"
      ListItemIntId="3"
      ListId="48ea9454-9538-47ae-926d-917df80bc93e"
      ParentId="33ff2f12-c818-4c8d-8578-c6d057172fd8"
      ScopeId="385cd4d5-86da-4183-bdac-2e83da1b05fc"
      TimeCreated="2021-11-08T03:57:05"
      TimeLastModified="2021-01-17T16:01:48"
      Version="_x0031_.0"
      FileSize="1"
      Level="1"
      EncodedAttributes="Url,ParentWebUrl,Name,Version">

場所

マニフェスト ファイルのAzure Blob Storage コンテナーのルート レベルにすべてのマニフェスト ファイルを配置します。

ArchivedFiles.xml

省略可能です。

アーカイブされた小さなファイルをバッチ処理するために使用されます。

ArchivedFiles.xml 例

<?xml version="1.0" encoding="utf-8"?>
<ArchivedFiles>
  <ArchivedFile Name="pack0.zip" Checksum="xxxxxx=">
    <File FileValue="01.dat" />
    <File FileValue="02.dat" />
    <File FileValue="03.dat" />
    <File FileValue="04.dat" />
    <File FileValue="05.dat" />
    <File FileValue="06.dat" />
 </ArchivedFile>
  <ArchivedFile Name="pack1.zip" Checksum="xxxxxx=">
    <File FileValue="07.dat" />
    <File FileValue="08.dat" />
    <File FileValue="09.dat" />
    <File FileValue="10.dat" />
    <File FileValue="11.dat" />
    <File FileValue="12.dat" />
  </ArchivedFile>
</ArchivedFiles>

ExportSettings.xml

必須です。

XML ファイルには、 および 他のクラスで指定されたエクスポート設定が SPExportSettings 含まれています。 また、移行先サイトでの後続のインポート プロセスで使用されるエクスポート設定も指定します。 また、移行パッケージにエクスポートされたすべてのオブジェクトのカタログも保持されます。

Web パーツを無視する

移行 API は、特定の種類のファイル内の SharePoint Web パーツをチェックして処理します。 SharePoint Server および SharePoint Online 以外のソースの場合は、 を に設定 IgnoreWebParts してこれらのチェックを trueバイパスします。 この方法により、Web パーツを移行しない場合の移行タスクのパフォーマンスが向上します。

コンテンツ ソースを指定する

移行 API には、コンテンツの SourceType ソースを含む値が必要です。 次の一覧の値が含まれている必要があります。

受け入れられる SourceType

  • AmazonS3
  • AzureStorage
  • Box
  • Dropbox
  • Egnyte
  • FileShare
  • GoogleCloudStorage
  • GoogleDrive
  • MicrosoftStream
  • OneDrive
  • SharePointOnline
  • SharePointOnPremServer
  • Other

を に Other宣言する場合は、コンテンツ ソース情報の詳細を提供する追加 DetailedSource の値を含めます。

ExportSettings.xml 例

<ExportSettings xmlns="urn:deployment-exportsettings-schema" SiteUrl="https://url" FileLocation="some paths" IncludeSecurity="All" SourceType="Other" DetailedSource="My special source type not in the list">
  <ExportObjects>
    <DeploymentObject Id="GUID for list" Type="List" ParentId="GUID for web" />
  </ExportObjects>
</ExportSettings>

LookupListMap.xml

省略可能です。

すべての SharePoint リスト アイテム参照を記録する単純な参照リストを保持する XML マニフェスト ファイル。 's azureContainerManifestUri パラメーターによって定義された Azure Blob Store コンテナーのルートにCreateMigrationJob配置します。

インポート パッケージにリストまたはドキュメント ライブラリのフィールドまたはビューの定義が含まれていない場合は必須ではありません。 このファイルを省略すると、ログに警告メッセージが生成されます。 この警告メッセージを回避するために、子なしの root ノードを含むファイルを含めます。

Manifest.xml

必須です。

コンテンツとコンテンツ パッケージの構造の両方の完全な一覧を含む XML マニフェスト ファイル。 移行 API では、このマニフェスト ファイルを使用して、ソースとそのコンポーネントを再構成します。

パッケージの Manifest.xml ファイルのすべてのインスタンスを Azure Blob Store コンテナーのルートに配置します。

このマニフェスト ファイルは、パッケージ内のメタデータのプライマリ記述子でもあり、List、Folder、Item 階層、およびファイルで定義されているユーザーやグループへの参照を含むアイテム のメタデータUserGroupMap.xml 提供します。

必要に応じて、複数 のManifest.xml を使用します。 マニフェストは、異なるファイル名で識別されます。 移行 API は、ファイルManifestFileのエントリ内の参照通じてすべてのマニフェストSystemData.xml検索します。

ドキュメント ライブラリ/リスト ID の整合性

ソースとターゲットの場所で、一貫性のある Web ID とドキュメント ライブラリ ID/リスト ID を使用します。 移行 API でインポート操作の親 Web が見つからないので、一貫性のない Web ID によってエラーが生成されます。

同様に、移行 API では、正しくないドキュメント ライブラリ ID とリスト ID を持つ項目をターゲット ドキュメント ライブラリまたはリストにインポートすることはできません。 移行先の Web に関係なく、移行 API が同じターゲット サイト コレクションにパッケージをインポートしないように、同じサイト コレクション内の ID を再利用しないでください。

GUID の整合性

GUID の競合を回避し、エラーをインポートするには、同じターゲットに同じパッケージを使用します。 同じ内容の新しいパッケージをインポートすると、問題が発生します。 ファイル共有のパッケージは、GUID をファイル、フォルダー、およびリスト アイテムに割り当てます。 元の GUID のレコードとして、ファイル共有からパッケージを保持します。 競合を回避し、変更を追跡するには、後のパッケージに同じ GUID を使用します。

コンテンツ識別子を保持する

インポート パッケージの識別子は、インポート中 にコンテンツ を識別するために明示的に使用されます。 この方法では、ドキュメント ライブラリのコンテンツの既存の識別子が保持されます。

ターゲット Web 識別子とリスト識別子を 明示的に参照します。

移行 API では、インポート時にコンテンツ タイプ識別子、ファイル/フォルダー項目 GUID、およびリスト アイテムの整数識別子が保持されます。 Migration API がパッケージ内で正しくない識別子を検出すると、インポートが失敗します。

この保持により、異なるパッケージを含む連続したインポートイテレーションが可能になり、項目が場所を移動できるようになります。

アクセス許可ロール

Manifest.xml には、次のロール関連のオブジェクトが含まれています。

Roles オブジェクト

Web 上で定義されているすべてのロールの一覧が含まれます。

Role オブジェクト

ID、内部アクセス許可権限マスク フラグ、および表示情報を持つロールを定義します。

RoleId 値

Role オブジェクトの識別子を定義します。

PermMask 値

権限マスク フラグを格納します。

RoleAssignments オブジェクト

すべての一意のアクセス許可 (RoleAssignment オブジェクト) の一覧が含まれます。

RoleAssignment オブジェクト

個別の Assignment オブジェクトの一覧が含まれます (存在する場合)。

Assignment オブジェクト

1 つの個別のユーザーまたはグループの実際のメンバーシップと実際のロールが含まれます。

  • RoleId の値は、Role オブジェクトの RoleId 値に対応します。
  • PrincipalId 値は、 内の User オブジェクトまたは Group オブジェクトの ID 値にマップ UserGroups.xml

アクセス許可の例

<SPObjects xmlns="urn:deployment-manifest-schema">
  …
  <SPObject Id="0b3c1b13-b260-453c-ac8d-8053a537d610" ObjectType="DeploymentRoles" ParentId="203e30e2-1139-4adf-b545-e74235f105c2" ParentWebId="203e30a2-1139-4acf-b535-e74235f105c2" ParentWebUrl="/teams/temp">
    <Roles>
      <Role RoleId="1073751825" Title="Test Role" Description="This is a test role" PermMask="206292717568" Hidden="true" RoleOrder="160" Type="1" />
      <Role RoleId="1073751826" Title="Test Role 2" Description="This is another test role" PermMask="756052856929" Hidden="false" RoleOrder="128" Type="2" />
      …
    </Roles>
  </SPObject>
  <SPObject Id="373ea0ba-107a-4a78-9563-bc642f9ab14d" ObjectType="DeploymentRoleAssignments" ParentId="203e30e2-1139-4adf-b545-e74235f105c2" ParentWebId="203e30a2-1139-4acf-b535-e74235f105c2" ParentWebUrl="/teams/temp">
    <RoleAssignments>
      <RoleAssignment ScopeId="ffcab9b9-94ef-4701-e6d9-19a370760e1e" RoleDefWebId="203e11c2-1139-4abe-b534-e74235f106c2" RoleDefWebUrl="teams/temp" ObjectId="9f743aaf-65f9-473e-0c37-37f147960560" ObjectType="1" ObjectUrl="teams/temp/IWConvertedForms" AnonymousPermMask="0" />
      <RoleAssignment ScopeId="c3f564f3-62cd-4b25-8da4-2da7722402ab" RoleDefWebId="203e30a2-1139-4acf-b535-e74255e105c2" RoleDefWebUrl="teams/temp" ObjectId="2b9b0a32-51fb-4af8-a218-c90f63fd1de4" ObjectType="1" ObjectUrl="teams/temp/Relationships List" AnonymousPermMask="0">
        <Assignment RoleId="1073751825" PrincipalId="5" />
        <Assignment RoleId="1073751825" PrincipalId="6" />
        <Assignment RoleId="1073751826" PrincipalId="4" />
        <Assignment RoleId="1073751828" PrincipalId="1" />
      </RoleAssignment>
      …
    </RoleAssignments>
  </SPObject>
  …
</SPObjects>

Requirements.xml

省略可能です。

SharePoint Server では通常、この XML マニフェスト ファイルが生成されます。 これには、移行ターゲット上のインストール要件の形式で展開要件の一覧が含まれています。

  • 機能定義
  • テンプレートのバージョン
  • Web パーツ アセンブリ
  • 言語パック
  • などです。

ファイル共有のルートの下に子ノードを含めない。 このファイルを省略すると、ログに警告メッセージが生成されます。

RootObjectMap.xml

省略可能です。

セカンダリ (依存) オブジェクトのマッピングの一覧を保持します。 移行 API では、このマニフェスト ファイルを使用して、依存オブジェクトを正しく配置します。

最も一般的なのは RootObject 、List 型の 1 つのオブジェクトです。 この項目のは ID ターゲット リストのリスト IDParentWebID 、移行を成功させるには、 がこのリストを含む親ターゲット Web の と一致 ID する必要があります。 このオブジェクトの 、WebUrl、および の値もIDManifest.xml ファイルにレイアウトされている関連する構造体とUrl一致する必要があります。

SystemData.xml

必須です。

さまざまな低レベルのシステム データが含まれています。 また、マニフェスト パッケージに複数のマニフェストがある場合 Manifest.xml ファイルの数とパスも記録します。

バージョン

SchemaVersion は、現在 Build のファームと DatabaseVersion ターゲット ファームの参照です。現在は "15.0.0.0" です。

SiteVersion は、ターゲット サイト コレクション UIVersion(現在 15は ) と一致する必要があります。

複数のマニフェスト

パッケージ内のすべての Manifest.xml ファイルをSystemData.xmlエントリとしてManifestFile一覧表示します。

変更できない SystemObjects

Migration API によって変更不可のままである、定義されているすべての SystemObjects 依存オブジェクトを一覧表示します。

SystemData.xml 例

SystemData.xmlファイルの 例は、ファイル共有のインポートからの共通オブジェクトを示しています。 パッケージごとに異なる IDs を使用し、s は URL異なる場合があります。

<?xml version="1.0" encoding="utf-8"?>
<SystemData xmlns="urn:deployment-systemdata-schema">
  <SchemaVersion Version="15.0.0.0" Build="16.0.3111.1200" DatabaseVersion="11552" SiteVersion="15" />
  <ManifestFiles>
    <ManifestFile Name="Manifest.xml" />
  </ManifestFiles>
  <SystemObjects>
    <SystemObject Id="34321c39-3254-4bd1-b749-c99e16d1f4ab" Type="Folder" Url="/personal/username" />
    <SystemObject Id="9efb9686-baab-432d-a192-858ac34c073f" Type="Web" Url="/personal/username" />
    <SystemObject Id="e8ec714f-91a0-4c6f-9926-08328c8b3e05" Type="List" Url="/personal/username/Documents/deleteme2" />
    <SystemObject Id="a05e1f95-5712-4cc2-958c-31cf0a2cfb62" Type="List" Url="/personal/username/_catalog/users" />
  </SystemObjects>
  <RootWebOnlyLists />
</SystemData>

UserGroupMap.xml

必須です。

アクセス許可を管理するためのユーザーとユーザー セキュリティ グループを記録します。 移行 API では、マニフェストを使用して、ユーザーとグループのメンバーシップとそのロールと特定の割り当てを確認します。 これらの割り当てには、より深い子オブジェクトがオーバーライドしない限り、オブジェクトとその子孫のレベルで設定された一意のアクセス許可が含まれます。

ユーザーまたはグループのエントリは必須ではありませんが、省略すると、インポート中に作成者またはセキュリティ情報が母集団から保護されます。 このような場合、移行 API によって警告が生成されます。

ユーザー識別子

1 つのパッケージに 1 回だけユーザーを識別します。

エクスポートされた Web 内のすべてのユーザーとグループをマニフェストします。

User オブジェクト

ドメイン グループとしての特定のセキュリティ 原則の識別、サインイン、セキュリティ 原則の base64 でエンコードされた SystemId (SID) など、特定のユーザーに関する情報が含まれます。

Group オブジェクト

特定のグループに関する情報と、そのグループの直接メンバーシップ リストが含まれます。

グループ オブジェクト内のメンバー オブジェクトのグループ オブジェクトの所有者値と UserId 値は、それぞれ他の User オブジェクトまたは Group オブジェクトの他の ID 値にマップされます。

次の例は、ユーザーとグループをマニフェストする方法を示しています。

<UserGroupMap xmlns="urn:deployment-usergroupmap-schema">
  <Users>
    <User Id="1" Name="John Doe" Login="DOMAIN\JDoe" Email="DJoe@contoso.com"
    IsDomainGroup="false" IsSiteAdmin="true" SystemId="AQUAAAAAAAUVAAAAXSj1f9U62DVDVOAqToYSAA==" IsDeleted="false" Flags="0" />
    <User Id="2" Name="Jane Smith" Login="DOMAIN\JSmith" Email="jsmith@contoso.com"
    IsDomainGroup="false" IsSiteAdmin="true" SystemId="AQUAAAAAAAUVAAAAXSj1f9U62DVDVOAqdUwNAA==" IsDeleted="false" Flags="0" />
    …
  </Users>
  <Groups>
    <Group Id="3" Name="Temp Group" Description="A Temp Group" Owner="2" OwnerIsUser="true" OnlyAllowMembersViewMembership="true">
      <Member UserId="2" />
    </Group>
    <Group Id="4" Name="Temp Group 2" Description="Another Temp Group" Owner="2" OwnerIsUser="false" RequestToJoinLeaveEmailSetting="JSmith@contoso.com" OnlyAllowMembersViewMembership="true">
      <Member UserId="1" />
      <Member UserId="2" />
    </Group>
    …
  </Groups>
</UserGroupMap>

ユーザーのサインインと SystemId の値が SharePoint の値と一致していることを確認します。

削除されたユーザー

削除されたアカウントの IsDeleted 場合は として true 値を含めます。 この方法により、インポート プロセスで参照エラーが発生するのを防ぎ、パフォーマンスに悪影響を与えます。

未解決のユーザー識別子

Migration API がサインイン情報を持つユーザーを解決できず、SystemId が指定されていない場合、Migration API はパッケージ内の関連付けられているメタデータ (Author や エディター など) でこのユーザーSystem Accountを置き換え、インポート ログに警告を生成します。

Failed to ensure user 'user@contoso.com'

SystemId の提供中に Migration API がサインインでユーザーを解決できない場合、Migration API 、指定されたサインインと SystemId を使用して新しい削除されたユーザーを作成します。 移行 API では、このユーザーをパッケージ内の関連付けられたメタデータと共に使用します。 移行 API では、インポート ログに警告が生成されます。

Failed to retrieve user 'user@contoso.com' attributes from the SiteUsers; falling back to passed in values

ユーザー識別子で UPN 以外のメール アドレスを使用しないようにする

ユーザー識別子の属性には Login UPN が必要です。 UPN 以外のメール アドレスは使用しないでください。 UPN 以外のメール アドレスを使用すると、SharePoint Online で予期しない動作が発生します。

次の例は、ユーザー識別子を使用する正しい方法と正しくない方法を示しています。

この場合、ユーザーは次の識別子を持っています。

正しい例

次の使用例は、UPN メール アドレスを持つユーザーを 1 回だけマニフェストします。

<User Id="1" Login="i:0#.f|membership|robert@contoso.com" …/>

正しくない例

この例では、UPN 以外のメール アドレスが 誤って 使用され、1 人のユーザーに対して複数の識別子が 誤って 含まれています。

<User Id="1" Login="i:0#.f|membership|robert@contoso.com" …/>
<User Id="2" Login="i:0#.f|membership|robert.downey@contoso.com" …/>

この例では、UPN 以外のメール アドレスが 誤って 使用されています。

<User Id="2" Login="i:0#.f|membership|robert.downey@contoso.com" …/>

ViewFormsList.xml

省略可能です。

この XML マニフェスト ファイルは、Web パーツの一覧を保持し、それぞれがビューかフォームかを追跡します。

インポート パッケージに Web パーツが含まれていない場合、このファイルは省略可能です。 このファイルを省略すると、ログに警告メッセージが生成されます。 または、警告メッセージを回避するために、子なしの root ノードを含むマニフェスト ファイルを含めます。