SharePoint インポート移行 API (CreationMigrationJob)
API ドキュメント
以下の API の説明は、SharePoint クライアント側オブジェクト モデル (CSOM) に基づいています。 ソリューションで CSOM を参照するときは、NuGet パッケージを使用することをお勧めします。
最新バージョンの SharePoint Online クライアント側オブジェクト モデル (CSOM) パッケージは、NuGet ギャラリーにあります。 ID Microsoft.SharePointOnline.CSOM
を使用します。
重要
15 GB を超えるファイルは、QuickXorHash を使用して必要なチェックサムを作成しなければなりません。 ここに示す例を参照してください。
この QuickXorHash / チェックサムは、暗号化される前 (ファイルが暗号化中の場合) に元のファイルとして計算される必要があります。 これは MD5hash 要件とは異なります。
2 GB 未満のファイルには、以前の MD5Hash のメソッドが引き続き必要です。ただし、この要件は将来のある時点で削除される予定です。
メソッド
CreateMigrationJob
このメソッドでは、新しい移行インポート ジョブが作成されて、後で別のタイマー ジョブが処理できるようにキューに格納されます。 ジョブでは、このメソッドで指定した Azure Blob Storage コンテナー内にある正しい形式 (事前に定義された形式) のインポート パッケージが使用されます。 移行ジョブ処理の SLA は、事前に構成されたキューと作業負荷調整の設定を通じて制御され、送信されたジョブに対して保証された SLA や戻り時間はありません。
構文
public Guid CreateMigrationJob(
Guid gWebId,
string azureContainerSourceUri,
string azureContainerManifestUri,
string azureQueueReportUri)
パラメーター
gWebID
パッケージのインポートの対象となるターゲット Web の一意識別子です。 インポートに関する他の情報と識別子は、インポート パッケージ自体で指定します。 この ID は、CSOM の呼び出しを使用してターゲット Web のクエリを行うことにより、プログラムによって見つけることができます。
azureContainerSourceUri
ブロック型のバイナリ ファイルを含む、Azure Blob Storage コンテナーにアクセスするための SAS トークンを含む有効な URL。 SAS トークンは Read と List のアクセス許可のみで作成されている必要があります。そうでなければ、移行ジョブは失敗します。 SAS トークンには、少なくとも、ジョブが送信されるときより前に始まり、正常なインポートが完了するのに妥当な時間が経過するまでの有効期間が必要です。
必要なアクセス許可は、Azure Storage API では次のとおりです。
(SharedAccessBlobPermissions.Read | SharedAccessBlobPermissions.List)
注:
SAS トークンに対して読み取りと一覧表示のアクセス許可を適用する変更は、今後のビルドで行われます。 それまでの間は強制されません。 ただし、これらの値を使用するのがベスト プラクティスです。
インポート中に顧客側でファイルを変更できないようにするため、コンテナー内のすべてのファイルには、少なくとも 1 つのスナップショットを適用しておく必要があります。 スナップショットを持たないファイルはインポート中にスキップされ、エラーがスローされますが、ジョブはインポートを続行しようとします。 インポート パイプラインでは、インポートの時点で利用できるファイルの最新のスナップショットが使用されます。 ファイルをAzure Blob Storageにアップロードした後にスナップショットを作成するために使用されるコードの例を次に示します。
CloudBlockBlob blob = blobContainerObj.GetBlockBlobReference(file);
blob.UploadFromStream(stm);
blob.CreateSnapshot();
注:
すべてのファイルで最新のスナップショットを要求して使用するための変更は今後のビルドで予定されていますが、それまでは無視されます。
azureContainerManifestUri
XML ファイルが記述されているマニフェストと他のパッケージのためのブロック BLOB が含まれる Azure Blob Storage コンテナーにアクセスするために SAS トークンを含む有効な URL です。 この場所は、ログの出力にも使用されます。 このコンテナーは、azureContainerSourceUri に使用されたものと同じにすることはできません。 この SAS トークンは Read、List、Write のアクセス許可のみで作成されている必要があります。そうでなければ、移行ジョブは失敗します。 SAS トークンには、少なくとも、ジョブが送信されるときより前に始まり、正常なインポートが完了するのに妥当な時間が経過するまでの有効期間が必要です。
注:
SAS トークンに対して Read、List、Write アクセス許可を強制する変更は、今後のビルドで予定されています。それまでは強制されませんが、これらの値を使用する場合のベスト プラクティスです。 現在のビルドを使用すると問題が発生する場合は、一時的な回避策として List アクセス許可を削除してみてください。このアクセス許可はまもなく必須になることに注意してください。
インポート中に顧客側でファイルを変更できないようにするため、コンテナー内のすべてのファイルには、少なくとも 1 つのスナップショットを適用しておく必要があります。 スナップショットを持たないファイルでは、インポート中にエラーが発生し、エラーがスローされ、移行ジョブ全体が失敗する可能性があります。
注:
すべてのファイルで最新のスナップショットを要求して使用するための変更は、今後のビルドで予定されています。 それまでは無視されます。
azureQueueReportUri
移行ジョブの進行状況の通知を返すために使用されるユーザー提供の Azure キューにアクセスするための SAS トークンを含む有効な URL です。 インポート中に通知キューを使用しない場合は、この値を null にすることができます。 この値が null ではなく、この URI の SAS トークンに適切なアクセス権が付与されている場合は、リアルタイムの状態更新に使用されます。 この SAS トークンは、Add、Read、Update のアクセス許可のみで作成されている必要があります。そうでない場合、移行ジョブではキューにイベントを追加できません。 必要なアクセス許可は、Azure Storage API では次のとおりです。
(SharedAccessQueuePermissions.Add | SharedAccessQueuePermissions.Read | SharedAccessQueuePermissions.Update)
受け付けられると、通知キューが提供されていてアクセス権が有効な場合は、ジョブ ID が通知キューに書き込まれます。 通知キューは同時に複数の移行ジョブで使用でき、各ジョブは通知キューに返される値でそれ自身を識別します。
次に、Azure レポート キューにログインしたすべてのイベントの種類の例を示します。
Event:JobQueued
JobId:845daca4-5529-4b0e-85ab-a603efee5b12
Time:09/29/2020 19:56:02.883
SiteId:48917234-de43-474a-9f1b-8d98ffa08425
DbId:8fd09323-b23f-430d-8957-213586ce3861
TotalRetryCount:0
MigrationType:None
MigrationDirection:Import
CorrelationId:c8d97e9f-802f-0000-ceac-44663834d510
Event:JobPostponed
JobId:845daca4-5529-4b0e-85ab-a603efee5b12
Time:09/29/2020 19:56:57.598
NextPickupTime:09/29/2020 20:16:57.519
SiteId:48917234-de43-474a-9f1b-8d98ffa08425
DbId:8fd09323-b23f-430d-8957-213586ce3861
JobsInQueue:
TotalRetryCount:0
MigrationType:None
MigrationDirection:Import
CorrelationId:d5d97e9f-702c-0000-ceb9-354fefa5e9f6
Event:JobLogFileCreate
JobId:071f9aad-36e6-4bef-9f09-40b5c7498ecd
Time:09/29/2020 19:56:29.053
FileName:Import-071f9aad-36e6-4bef-9f09-40b5c7498ecd-1.log
CorrelationId:22ca20ec-23de-468b-add3-4e52e90d3a68
Event:JobStart
JobId:071f9aad-36e6-4bef-9f09-40b5c7498ecd
Time:09/29/2020 19:56:29.100
SiteId:48917234-de43-474a-9f1b-8d98ffa08425
WebId:36b66979-4a43-4b93-9b92-909c7186ff98
DBId:8fd09323-b23f-430d-8957-213586ce3861
FarmId:211e600c-f48d-4319-ba92-61150c8e8e8c
ServerId:cfd27448-822a-420b-bcc8-4f39629b01bc
SubscriptionId:51812136-3cba-482d-9696-532cddceab31
TotalRetryCount:0
MigrationType:None
MigrationDirection:Import
CorrelationId:c308c0ea-a7f5-4be9-acd4-1ebd39867434
Event:JobProgress
JobId:845daca4-5529-4b0e-85ab-a603efee5b12
Time:09/29/2020 19:56:32.265
FilesCreated:15
BytesProcessed:45
ObjectsProcessed:217
TotalExpectedSPObjects:403
TotalErrors:0
TotalWarnings:0
TotalRetryCount:0
MigrationType:None
MigrationDirection:Import
WaitTimeOnSqlThrottlingMilliseconds:0
TotalDurationInMs:0
CpuDurationInMs:0
SqlDurationInMs:0
SqlQueryCount:0
CreatedOrUpdatedFileStatsBySize:{"0-1K":{"Count":15,"TotalSize":45,"TotalDownloadTime":251,"TotalCreationTime":6754}}
ObjectsStatsByType:{"SPUser":{"Count":1,"TotalTime":289,"AccumulatedVersions":0,"ObjectsWithVersions":0},"SPFolder":{"Count":2,"TotalTime":144,"AccumulatedVersions":0,"ObjectsWithVersions":0},"SPDocumentLibrary":{"Count":1,"TotalTime":173,"AccumulatedVersions":0,"ObjectsWithVersions":0},"SPFile":{"Count":200,"TotalTime":6765,"AccumulatedVersions":0,"ObjectsWithVersions":0},"SPListItem":{"Count":14,"TotalTime":2111,"AccumulatedVersions":0,"ObjectsWithVersions":0}}
TotalExpectedBytes:0
CorrelationId:ccd97e9f-a0cc-0000-ceb9-37a900bec68d
Event:JobEnd
JobId:16d658cf-ecd3-485f-9c9e-1ca268565e24
Time:09/29/2020 20:29:38.180
FilesCreated:200
BytesProcessed:600
ObjectsProcessed:403
TotalExpectedSPObjects:403
TotalErrors:0
TotalWarnings:0
TotalRetryCount:0
MigrationType:None
MigrationDirection:Import
WaitTimeOnSqlThrottlingMilliseconds:0
TotalDurationInMs:372294.0861
CpuDurationInMs:17351
SqlDurationInMs:98359
SqlQueryCount:1998
CreatedOrUpdatedFileStatsBySize:{"0-1K":{"Count":200,"TotalSize":600,"TotalDownloadTime":15448,"TotalCreationTime":275662}}
ObjectsStatsByType:{"SPUser":{"Count":1,"TotalTime":44,"AccumulatedVersions":0,"ObjectsWithVersions":0},"SPFolder":{"Count":2,"TotalTime":108,"AccumulatedVersions":0,"ObjectsWithVersions":0},"SPDocumentLibrary":{"Count":1,"TotalTime":50,"AccumulatedVersions":0,"ObjectsWithVersions":0},"SPFile":{"Count":200,"TotalTime":293628,"AccumulatedVersions":0,"ObjectsWithVersions":0},"SPListItem":{"Count":200,"TotalTime":76541,"AccumulatedVersions":0,"ObjectsWithVersions":0}}
TotalExpectedBytes:0
CorrelationId:59db7e9f-a003-0000-ceb9-300001119ee3
Event:JobDeleted
JobId:071f9aad-36e6-4bef-9f09-40b5c7498ecd
Time:09/29/2020 19:56:29.053
CorrelationId:22ca20ec-23de-468b-add3-4e52e90d3a68
Event:JobCancelled
JobId:071f9aad-36e6-4bef-9f09-40b5c7498ecd
Time:09/29/2020 19:58:29.053
TotalRetryCount:0
CancelledByUser:false
MigrationType:None
MigrationDirection:Import
CorrelationId:22ca20ec-23de-468b-add3-4e52e90d3a68
Event:JobError
JobId:b427d8d7-2b91-4da0-aee5-4b5a5a5d867e
Time: 02/05/2019 06:56:09.732
TotalRetryCount:0
MigrationType:None
MigrationDirection:Import
ObjectType:File
Url:Shared Documents/file.pdf
Id:fae7b4b0-2912-11e9-b0f3-7b554a52d6ab
ErrorCode:-2147024816
ErrorType:Microsoft.SharePoint.SPException
Message:ErrorMessage
CorrelationId:d8e9bc9e-20e2-8000-aa83-48a62fc5ce75
Event:JobFatalError
JobId:8f728c13-95d0-4d54-96bc-4ee912bd32ce
Time: 02/05/2019 06:57:20.523
TotalRetryCount:0
MigrationType:None
MigrationDirection:Import
ObjectType:
Url:
Id:
ErrorCode:-2147213196
ErrorType:Microsoft.SharePoint.SPException
Message:ErrorMessage
CorrelationId:b370d5a0-105d-4000-241f-9b2d70449d7b
Event:JobWarning
JobId:b427d8d7-2b91-4da0-aee5-4b5a5a5d867e
Time: 02/05/2019 06:56:09.732
TotalRetryCount:0
MigrationType:None
MigrationDirection:Import
ObjectType:File
Url:Shared Documents/file.pdf
Id:fae7b4b0-2912-11e9-b0f3-7b554a52d6ab
ErrorCode:-2147024816
ErrorType:Microsoft.SharePoint.SPException
Message:ErrorMessage
CorrelationId:d8e9bc9e-20e2-8000-aa83-48a62fc5ce75
Event:FinishManifestFileUpload
JobId:b427d8d7-2b91-4da0-aee5-4b5a5a5d867e
Time:02/05/2019 06:56:09.732
ManifestFileName:Filename
CorrelationId:d8e9bc9e-20e2-8000-aa83-48a62fc5ce75
戻り値
ジョブがキューに正常に格納された場合は、移行ジョブの一意識別子が返されます。失敗した場合は、null 値が返されます。 移行ジョブがキューに存在する間、または GetMigrationJobStatus メソッドを使って処理されている間は、移行ジョブの一意識別子を使って、移行ジョブの状態のクエリを行うことができます。
例:
Guid MigrationJobId = TargetSite.CreateMigrationJob(
TargetWebId,
azureContainerSourceUri,
azureContainerManifestUri,
azureQueueReportUri);
GetMigrationJobStatus
このメソッドでは、指定した移行ジョブに対するキューの状態のクエリが行われます。 CreateMigrationJob メソッドを呼び出した後の省略可能なチェックです。 移行ジョブが完了すると、キューに表示されなくなり、通知キューやログ出力の詳細な状態を確認する必要があります。
構文
[ClientNS.ClientCallableMethod]
public SPMigrationJobState GetMigrationJobStatus(Guid MigrationJobId)
パラメーター
ID
CreateMigrationJob メソッドから返される移行ジョブの一意識別子です。
戻り値
ジョブがキューで見つかった場合は、SPMigrationJobState オブジェクトを使って移行ジョブの状態が返されます。見つからない場合は、値 None (0) が返されます。
例
SPMigrationJobState CurrentJobState = TargetSite.GetMigrationJobStatus(MigrationJobId);
列挙型
SPMigrationJobState
SPMigrationJobState は、インポート キューで可能性のある主要な状態を追跡する列挙型です。
メンバー
メンバ名 | 説明 |
---|---|
なし | 移行ジョブは現在、完了して削除されたか、または無効なジョブ識別子のため、キューには見つかりません。 値は 0 です。 |
Queued | 移行ジョブは現在、キューで見つかっていますが、処理されていません。 値は 2 です。 |
Processing | 移行ジョブは現在、キューで見つかっており、アクティブに処理されています。 値は 4 です。 |
インポート パッケージの構造
パッケージの構造は、コンテンツ展開パッケージ スキーマの制約バージョンに基づいています。 元の完全なスキーマのドキュメントについては、「 コンテンツ移行スキーマ」を参照してください。 Microsoft Docsで公開されるまで、制約付き構造体については、付録のこのドキュメントを参照してください。
XML ファイル | スキーマ ファイル | 説明 |
---|---|---|
ExportSettings.xml | DeploymentExportSettings スキーマ | コンテンツ移行パッケージにエクスポートされる ExportSettings.XML ファイルの検証を提供します。 ExportSettings。 XML では、次の処理が実行されます。
|
LookupListMap.xml | DeploymentLookupListMap スキーマ | LookupListMap の検証を提供します。 コンテンツ移行パッケージにエクスポートされた XML ファイル。 LookupListMap.XML では、SharePoint リスト アイテムの (リスト アイテムからリスト アイテムへの) 参照を記録する簡単なルックアップ リストが保持されています。 |
Manifest.xml | DeploymentManifest スキーマ | コンテンツ移行パッケージにエクスポートされる Manifest.xml ファイルの検証を提供します。 ソース サイトのコンテンツおよび構造のリストを含む包括的なマニフェストを提供します。 移行操作では、マニフェスト ファイルを使用して、移行先サイトにインポートされるときにソース サイトとそのコンポーネントを再構成します。 |
Requirements.xml | DeploymentRequirements スキーマ | コンテンツ移行パッケージにエクスポートされる Requirements.xml ファイルの検証を提供します。 Requirements.xml は、機能定義、テンプレートのバージョン、Web パーツ アセンブリ、言語パックなどの移行先のインストール要件の形式で展開要件リストを保持します。 |
RootObjectMap.xml | DeploymentRootObjectMap スキーマ | コンテンツ移行パッケージにエクスポートされる RootObjectMap.xml ファイルの検証を提供します。RootObjectMap.xml にはセカンダリ (依存) オブジェクトのマッピングのリストが保持されており、それにより、移行操作のインポート フェーズでは、ルート オブジェクト マッピングの場所を基準にして依存オブジェクトを正しく配置できます。 |
SystemData.xml | DeploymentSystemData スキーマ | コンテンツ移行にエクスポートされた SystemData.xml ファイルの検証を提供 package.SystemData.xml、さまざまな低レベルのシステム データを収集します。 Manifest.xml ファイルの数と名前が記録されます (移行で複数のマニフェストが使われる場合)。 |
UserGroupMap.xml | DeploymentUserGroupMap スキーマ | コンテンツ移行パッケージにエクスポートされる UserGroup.xml ファイルの検証を提供します。 UserGroup.xml には、アクセスのセキュリティとアクセス許可に関して、ユーザーおよびユーザー セキュリティ グループのリストが保持されています。 |
ViewFormsList.xml | DeploymentViewFormsList スキーマ | コンテンツ移行パッケージにエクスポートされる ViewFormsList.xml ファイルの検証を提供します。ViewFormsList.xml では、Web パーツのリストが保持され、それぞれがビューであるかフォームであるかが追跡されます。 |
内容の構造
パッケージ構造のマニフェスト内で参照されているファイルの内容は、CreateMigrationJob の azureContainerSourceUri
パラメーターによって定義されている Azure BLOB ストア コンテナー内のフラット構造または階層構造に格納される必要があります。 たとえば、従来のバージョンのエクスポートから生成されたインポート パッケージは階層型ではなく、#.dat のようなパターンでルート レベルに格納されているすべてのファイルが格納されます。#シンボルは 0 から始まる 16 進文字であり、パッケージ内でファイル名は繰り返されません。 または、ファイル共有から生成されるパッケージでは、ソース フォルダー階層とファイル名が同じ階層内に保持される場合があります。
構造に関する主な要件は、Manifest.XML ファイルの FileValue 参照で、インポート用の Azure BLOB ストアの場所に格納されている内容の正確な名前と物理的な階層を参照する必要があるということです。 インポート操作のコピー先のファイル名とフォルダー階層は、物理的な名前付けと階層とは直接関係せず、代わりに Manifest.XML ファイルを介して定義されます。
ArchivedFiles.XML
含まれている場合、 ArchivedFiles.XML ファイルは、CreateMigrationJob の azureContainerManifestUri パラメーターによって定義された Azure BLOB ストレージ コンテナーのルートにあると予想されます。 QuickXorHash/Checksum は、 QuickXorHash アルゴリズムを使用して、省略可能な pack0.zip ファイルに対して計算する必要があります。 Manifest.xml 内の小さなファイルがアーカイブされていない場合 (ArchiveFiles.xml には表示されません)、以前と同様に処理できます (機能オフと同等)。
このファイルを使用すると、ファイルをバッチで転送できます。 ArchivedFiles.xml がクライアントによって提供されると (既定のシナリオ)、サーバー側は .xml スキーマの正確性を検証し、各パック内のファイルをインポートします。 ArchivedFiles.XML がクライアントによって提供されない場合、機能は無効になります。
前提条件
QuickXorHash/Checksum は、 QuickXorHash アルゴリズムを使用して、省略可能な pack0.zip ファイルに対して計算する必要があります。 QuickXorHash は、すべての小さいファイルを連結する .zip ファイル用に作成されます。
アイテム | 要件 |
---|---|
暗号化 | zip ファイルは暗号化する必要があります。 |
ファイルのサイズ | 100 KB 未満。 注: ファイル サイズは、暗号化されたファイルに基づいて計算されます。 |
圧縮 | アーカイブしている小さなデータ ファイルを zip ファイルに圧縮しないでください。 |
Zip ファイルのサイズ | 最大サイズ 10 MB |
パッケージごとの Zip ファイル | 最大 2 |
表 1: 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
ExportSettings.XML ファイルは、CreateMigrationJob の azureContainerManifestUri
パラメーターによって定義されている Azure BLOB ストア コンテナーのルートに存在することが期待されます。 この必須のファイルは、制約付きの DeploymentExportSettings.XSD を使用して検証されます。この XSD には、現在公開されている完全な 2013 パッケージ スキーマからのいくつかの限られた変更が含まれます。
主な要件は、ExportSettings の SiteUrl
の値には、インポート パッケージの残りの部分に使用されるソース URL と同じ URL が設定されている必要があるということです。 ソースがファイル共有の場合は、URL はパッケージの残りの部分でソース URL として事前に指定されています。一方、ソース サイトでのエクスポート操作によって生成されたパッケージの場合は、元のソース サイト コレクションの URL です。
SourceType 必須
2023 年 1 月 1 日以降、移行 API を呼び出すときは SourceType フィールドが必須になります。 1 以降では、フィールドが見つからない場合に警告メッセージが送信されます。
受け入れられた SourceType 値:
- AmazonS3
- AzureStorage
- Box
- Dropbox
- Egnyte
- FileShare
- GoogleCloudStorage
- GoogleDrive
- MicrosoftStream
- OneDrive
- SharePointOnline
- SharePointOnPremServer
- その他
Other に宣言する場合は、詳細な情報を提供するために DetailedSource を含めます。
例:
<ExportSettings xmlns="urn:deployment-exportsettings-schema" SiteUrl="https://some site 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
LookupListMap.XML ファイルが含まれる場合は、CreateMigrationJob の azureContainerManifestUri パラメーターによって定義されている Azure BLOB ストア コンテナーのルートに存在することが期待されます。 このオプションのファイルは、制約付きの DeploymentLookupListMap.XSD を使用して検証されます。この XSD には、現在公開されている完全な 2013 パッケージ スキーマからの変更はありません。
パイプラインのインポート パッケージには、リストまたはドキュメント ライブラリのフィールドまたはビューの定義が含まれていないため、 通常、LookupListMap.XML ファイルにはルートの下に子ノードが含まれていないため、必要に応じてパッケージから除外することもできますが、この場合は警告がログに記録される可能性があります。
Manifest.XML
パッケージの Manifest.XML ファイルのすべてのインスタンスは、CreateMigrationJob の azureContainerManifestUri
パラメーターによって定義されている Azure BLOB ストア コンテナーのルートに存在することが期待されます。 この必須のファイルは、制約付きの DeploymentManifest.XSD を使用して検証されます。この XSD では、現在公開されている完全な 2013 パッケージ スキーマから、複数の大きな変更と、型の大幅な削減が行われています。
Manifest.XML は、パッケージ内のメタデータに対する主要な記述子であり、UserGroupMap.XML ファイルで定義されているユーザーとグループに対する参照を含むアイテムのメタデータと共に、リスト/フォルダー/アイテムの階層構造を提供します。 複数の Manifest.XML ファイルが存在する場合があり (異なるファイル名によって一意に識別できます)、すべてのファイルが、SystemData.XML ファイルの ManifestFile エントリ内の参照を使用してインポート パイプラインによって見つかります。
パイプラインを介して正常にインポートできる Manifest.XML のメイン要件は、Web ID とドキュメント ライブラリ ID/リスト ID がターゲットの場所と一致していることです。 ターゲットの場所と一致しない Web ID が使用されている場合、インポート操作の親 Web が見つからないため、エラーが発生します。
同様に、ドキュメント ライブラリ ID/リスト ID が正しくないと、ターゲットのドキュメント ライブラリまたはリストにインポートできません。 ID は同じサイト コレクション内で再利用しないでください。そのため、コピー先の Web に関係なく、同じパッケージを同じターゲット サイト コレクションにインポートしないでください。
ドキュメント ライブラリ内またはリスト内の個々のファイルとフォルダーについて、それらの識別子は同じ場所に対する複数のインポート イベントの間で一致している必要があります。 具体的には、ファイル共有から生成されたパッケージのインポートを実行すると、最初に、各ファイルおよびフォルダーに対する新しい GUID と共に、それらを表すリスト アイテムの一致する GUID を生成する必要があります。 そのため、同じパッケージを使用して同じターゲットに対する 2 回目のインポートを実行すると同じ ID が維持されますが、同じ内容の新しいパッケージを使用して同じターゲットに対する 2 回目のインポートを実行すると、ID の競合が発生し、競合するすべてのアイテムでインポート エラーが発生します。
ファイル共有から最初に生成されるパッケージは、実質的に、生成された元の ID に対するレコードの形式であり、意図しない ID の競合を防ぎ、似た ID で確実に正しい上書き、削除、または移動アクティビティが行われるようにするために、後続のパッケージ生成に対する参照として使用できる可能性があります。
Requirements.XML
Requirements.XML ファイルは、CreateMigrationJob の azureContainerManifestUri パラメーターによって定義されている Azure BLOB ストア コンテナーのルートに存在することが期待されます。 このオプションのファイルは、制約付きの DeploymentRequirements.XSD を使用して検証されます。この XSD には、現在公開されている完全な 2013 パッケージ スキーマからの変更はありません。
ファイル共有の場合、このファイルは通常、ルートの下の子ノードを含まないものと期待されるため、不要な場合はパッケージから除外することもできます。ただし、その場合は警告が記録されます。
RootObjectMap.XML
RootObjectMap.XML ファイルは、CreateMigrationJob の azureContainerManifestUri
パラメーターによって定義されている Azure BLOB ストア コンテナーのルートに存在することが期待されます。 この必須のファイルは、制約付きの DeploymentRootObjectMap.XSD を使用して検証されます。この XSD には、現在公開されている完全な 2013 パッケージ スキーマからのいくつかの限られた変更が含まれます。 含まれる最も一般的な RootObject
は、List 型の 1 つのオブジェクトです。 このアイテムの ID はターゲット リストのリスト ID である必要があり、移行が成功するためには、ParentWebID
はこのリストを含む親ターゲット Web の ID と一致している必要があります。 このオブジェクトの ID、WebUrl、Url の値も、 Manifest.XML ファイルにレイアウトされている関連する構造と一致している必要があります。
SystemData.XML
SystemData.XML ファイルは、CreateMigrationJob の azureContainerManifestUri
パラメーターによって定義されている Azure BLOB ストア コンテナーのルートに存在することが期待されます。 この必須のファイルは、制約付きの DeploymentSystemData.XSD を使用して検証されます。この XSD には、現在公開されている完全な 2013 パッケージ スキーマからの変更はありません。
SchemaVersion
の情報はターゲット ファームの現在のビルドとデータベース バージョン (バージョン「15.0.0.0」) であることが期待され、SiteVersion
の値はターゲット サイト コレクションの UIVersion
(つまり、最も一般的なのは「15」) と常に一致していることが期待されます。 パッケージの各 Manifest.XML ファイルが、このファイルの ManifestFile
エントリ内に列記されていることが期待されます。
インポート操作が正しく動作するためには、移行コードによって変更されずに維持される必要がある依存オブジェクトを定義している SystemObjects も、ここに一覧表示されている必要があります。 次に示すのは、ファイル共有に基づくインポートからの SystemObjects.XML ファイルでの一般的なオブジェクトの例です。ID はパッケージごとに異なることが期待され、URL は異なる場合があることに注意してください。
表 1: SystemData.XML ファイルの例
<?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
UserGroupMap.XML ファイルは、CreateMigrationJob の azureContainerManifestUri
パラメーターによって定義されている Azure BLOB ストア コンテナーのルートに存在することが期待されます。 この必須のファイルは、制約付きの DeploymentUserGroupMap.XSD を使用して検証されます。この XSD には、現在公開されている完全な 2013 パッケージ スキーマからの変更はありません。
UserGroupMap.XML ファイルに User または Group エントリを含めることはできませんが、含めると、インポートの間に作成者またはセキュリティの情報が設定されず、警告が記録されます。 ユーザーのサインインと SID の値は、SharePoint Online の値と一致するように調整する必要があります。また、アカウントが存在しなくなった場合は、参照エラーやインポート操作中の別の速度低下を防ぐために、 として IsDeleted = “true”
一覧表示する必要があります。
ViewFormsList.XML
ViewForms.XML ファイルが含まれる場合は、CreateMigrationJob の azureContainerManifestUri
パラメーターによって定義されている Azure BLOB ストア コンテナーのルートに存在することが期待されます。 このオプションのファイルは、制約付きの DeploymentViewFormsList.XSD を使用して検証されます。この XSD には、現在公開されている完全な 2013 パッケージ スキーマからの変更はありません。
パイプラインのインポート パッケージには、リストまたはドキュメント ライブラリのフィールドまたはビューの定義が含まれていないため、 通常、ViewFormsList.XML ファイルにはルートの下に子ノードが含まれていないため、必要に応じてパッケージから除外することもできますが、この場合は警告がログに記録される可能性があります。
ログ記録
インポート パイプラインによって作成されるログは、エラーや警告がいつ、どこで発生したのかを特定するためにコンピューターが簡単に解析できる必要があり、ユーザーや ISV に障害が発生した場所と理由を伝えます。
azureContainerManifestUri
で指定されている SAS トークンは書き込みアクセスを許可するので、完了すると、これらのログはこの URI の場所にコピーされます。 同じ出力ログが、ターゲット サイト コレクションの場所 "_catalogs/Maintenance Logs" にも、テキスト ファイルとして格納されます。 ログがコピー先の場所にコピーされるのは、ジョブが完了してキューから削除された場合だけです。
完全なインポート ログのような複数の種類のログを、それぞれインポートの警告やエラーのサブセットのみを含む警告およびエラー ファイルと共に、含めることができます。 ログ ファイルは一意の datetime
および job id
スタンプによって、試みられたインポート イベントごとに固有になるので、デバッグのときに便利です。
"ディスク送付" オプションを使用した、これらに対する変更
Migration API を使用するには、Azure に一時的なストレージ コンテナーが必要です。 一時的なストレージにファイルをアップロードするには、すべてのファイルでプロパティとしてチェックサムが必要です。 15 GB を超えるファイルの場合、これは QuickXorHash を使用して行われます (下の例を参照)。 2 GB 以下のファイルの場合、すべてのファイルのプロパティとして MD5 が必要です。
ただし、ハード ドライブでデータを送付するときは、このプロパティは自動的に割り当てられません。 回避策として、移行 API を調整して、マニフェストの一部としてすべてのファイルにチェックサムを渡せるようにしました。 これは、データを暗号化するときの IV 値にも適用されます。
MD5 は、Azure へのアップロード時点ではなくソースで生成されるため、Microsoft は、ソース MD5 と直接突き合わせてファイルの整合性を確認できます。
Azure BLOB コンテナーの内容
Migration API では、内容の受け渡しと、ログおよびキューのレポートのためにも、Azure コンテナーが必要です。 これは概要として次のように分割できます。
コンテンツ | マニフェスト |
---|---|
ファイルとフォルダー | XML ファイル |
manifest.xml には 2 つの新しいオプション パラメーターがあります。
- チェックサム
- MD5Hash
パッケージの準備
移行ジョブを呼び出す方法に変更はありません。パッケージの生成だけを変更する必要があります。
Manifest コンテナーの 1 つのファイルは Manifest.xml という名前です。 ファイル ノードには、 Checksum と MD5Hash の 2 つの省略可能な属性が追加されています。
15 GB を超えるファイルの例:
<?xml version="1.0" encoding="utf-8"?>
<SPObjects xmlns="urn:deployment-manifest-schema">
<SPObject Id="75be48d8-59a5-4558-8dd8-5eb2c4e94bc5" ObjectType="SPFolder" ParentId="d43a7f16-e50b-4591-861f-684e78e89e12" ParentWebId="2f887e64-876b-4fa7-bb03-0a9ca1cf3d33" ParentWebUrl="/" Url="/Shared Documents">
<Folder Id="75be48d8-59a5-4558-8dd8-5eb2c4e94bc5" Url="Shared Documents" Name="Shared Documents" ParentFolderId="d43a7f16-e50b-4591-861f-684e78e89e12" ParentWebId="2f887e64-876b-4fa7-bb03-0a9ca1cf3d33" ParentWebUrl="/" ContainingDocumentLibrary="a69654d6-eb09-4638-aa6b-a7e8ff86f555" TimeCreated="2021-01-06T18:50:15" TimeLastModified="2021-01-06T18:50:15" SortBehavior="1" />
</SPObject>
<SPObject Id="a69654d6-eb09-4638-aa6b-a7e8ff86f555" ObjectType="SPDocumentLibrary" ParentId="2f887e64-876b-4fa7-bb03-0a9ca1cf3d33" ParentWebId="2f887e64-876b-4fa7-bb03-0a9ca1cf3d33" ParentWebUrl="/" Url="/Shared Documents">
<DocumentLibrary Id="a69654d6-eb09-4638-aa6b-a7e8ff86f555" BaseTemplate="DocumentLibrary" RootFolderId="75be48d8-59a5-4558-8dd8-5eb2c4e94bc5" RootFolderUrl="/Shared Documents" ParentWebId="2f887e64-876b-4fa7-bb03-0a9ca1cf3d33" ParentWebUrl="/" Title="Documents" HasUniqueRoleAssignments="true">
<ContentTypes />
</DocumentLibrary>
</SPObject>
<SPObject Id="aef2bb11-7ee8-4343-87cd-5938d260e647" ObjectType="SPFile" ParentId="75be48d8-59a5-4558-8dd8-5eb2c4e94bc5" ParentWebId="2f887e64-876b-4fa7-bb03-0a9ca1cf3d33" ParentWebUrl="/" Url="/Shared Documents/MyFile.txt">
<File Url="Shared Documents/MyFile.txt" Id="aef2bb11-7ee8-4343-87cd-5938d260e647" ParentWebId="2f887e64-876b-4fa7-bb03-0a9ca1cf3d33" ParentWebUrl="/" Name="MyFile.txt" ListItemIntId="1" ListId="a69654d6-eb09-4638-aa6b-a7e8ff86f555" ParentId="75be48d8-59a5-4558-8dd8-5eb2c4e94bc5" TimeCreated="2021-01-06T18:43:38" TimeLastModified="2018-06-07T17:54:28" Version="1.0" FileValue="MyFile.txt" FileSize="17662712" Author="1" ModifiedBy="1" Checksum="3k59aOUae2xygD5B/jtxY4x0Xko=" />
</SPObject>
<SPObject Id="52e75f2f-e8d7-4c6d-bf06-3b98d8429e0f" ObjectType="SPListItem" ParentId="a69654d6-eb09-4638-aa6b-a7e8ff86f555" ParentWebId="2f887e64-876b-4fa7-bb03-0a9ca1cf3d33" ParentWebUrl="/" Url="/Shared Documents/MyFile.txt">
<ListItem FileUrl="Shared Documents/MyFile.txt" DocType="File" ParentFolderId="75be48d8-59a5-4558-8dd8-5eb2c4e94bc5" Order="100" Id="52e75f2f-e8d7-4c6d-bf06-3b98d8429e0f" ParentWebId="2f887e64-876b-4fa7-bb03-0a9ca1cf3d33" ParentListId="a69654d6-eb09-4638-aa6b-a7e8ff86f555" Name="MyFile.txt" DirName="/Shared Documents" IntId="1" DocId="aef2bb11-7ee8-4343-87cd-5938d260e647" Version="1.0" Author="1" ModifiedBy="1" TimeLastModified="2018-06-07T17:54:28" TimeCreated="2021-01-06T18:43:38" ModerationStatus="Approved">
<Fields />
</ListItem>
</SPObject>
</SPObjects>
2 GB 未満のファイルの例:
<File … MD5Hash="CXPP/MWYxY87NjjnLZrFg==" />
ベスト プラクティスと特別な注意事項
パッケージのサイズ
API で 15 GB のファイルがサポートされている場合でも、パッケージのサイズは最大で 250 MB または 250 アイテム (どちらか先に達した方) にすることをお勧めします。 推奨のサイズ制限より大きいファイルがある場合は、それだけを 1 つのパッケージにして送信する必要があります。 同じことがバージョンにも当てはまります。サイズ制限やアイテム数は、バージョンごとに加算されます。 さらに、1 つのファイルのすべてのバージョンを、同じパッケージにする必要があります。
ファイルのサイズ
注:
移行 API は、15 GB を超える個別のファイルをサポートします。 この最大サイズは SharePoint Online で設定された最新の値です。
圧縮されていないパッケージのみがサポートされる
インポート パイプラインでは、圧縮パッケージはサポートされていません。 ファイルの内容は、マニフェストおよび関連する記述 XML ファイルとは別の Azure Storage コンテナーに格納する必要があります。 この決定は、移行の両端での処理時間 (圧縮および解凍) のオーバーヘッドを防ぎ、さらにパッケージの作成と変更を簡単にすることを目的として行われました。 zip アーカイブなどの個々のファイルの圧縮は、コンテンツではなく、インポート パッケージでアーカイブ自体として参照されている限りサポートされます。
API ではファイルの複数のバージョンのインポートがサポートされる
インポート パッケージでは、SharePoint で定められている通常の制限の範囲内で、ファイルの複数のバージョン (メジャーおよびマイナー) を参照できます。 一部のバージョンが既に SPO に存在する場合でも、そのファイルの各バージョンがパッケージに含まれていることが重要です。
API では識別子の保持がサポートされる
インポート パッケージ内で明示的に使用される識別子は、内容を識別するためにインポート中に使用されます。 これにより、ドキュメント ライブラリの内容に対する既存の識別子を、ソース環境から保持できます。 ただし、インポート パッケージの作成または変換中に、パッケージがターゲット Web とリスト識別子を明示的に参照することを要求する複雑さも課されます。 コンテンツ タイプ識別子、ファイル/フォルダーのアイテムの GUID、およびリスト アイテムの整数識別子はすべて、インポート中に保持されます。 パッケージで正しくない識別子が指定されている場合、インポートは失敗します。
さらに、識別子の保持のために、インポート イベントは、異なるパッケージを使用して連続したイテレーションで実行される可能性があり、識別子が変更されていない場合にアイテムが場所に移動する可能性があります。
これは上書き API である
インポート パイプラインではファイルおよびリスト アイテムのメタデータでのバージョン管理データのインポートがサポートされていますが、現時点では、ファイルを送信した後、同じファイルを変更して再送信すると、インポート プロセスでは、元のファイルとすべてのバージョンが削除されて、現在インポートされているパッケージに含まれるものに置き換えられます。
Active-Active シナリオはサポートされていません
つまり、ターゲット サイトは移行が終了するまでユーザーに対して非アクティブなままであることが期待されます。 エンド ユーザーのダウンタイムを減らす方法として、ソースは最後の移行イベントまで読み取り書き込み状態を維持できますが、移行が完了したら、ユーザーが新しい SPO ターゲットの使用を開始して、前のリポジトリの使用を停止するための切り替えが必要です。
Azure でのアクセス許可
ソース BLOB が変更されないようにするため、インポート パイプラインでは、File コンテナーに対して Read および List アクセス フラグのみが設定された SAS キーを受け付けます。 同様に、インポート パイプラインでは、インポート操作の最後にログ ファイルを書き戻すことができるように、Manifest コンテナーに対して Read、List、Write アクセス権を持つ SAS キーが必要です。 これらの条件が満たされていない場合、パイプラインはジョブの作成時に拒否します。
インポートが成功するためには、Azure のすべてのファイルのスナップショットを作成する必要がある
ソース BLOB でファイルの意図しない変更が行われないように、インポート パイプラインでは、Azure 内でスナップショットが作成されているファイルのみがインポートされます。 そうでない場合、インポート パイプラインはこの状態のファイルをスキップし、エラーをスローします。 インポート パイプラインでは、インポートの時点で利用できるファイルの最新のスナップショットが使用されます。
セキュリティと暗号化
インポート パイプラインでは、Azure Blob Storage のセキュリティ モデルがそのまま使用されます。 つまり、他の Azure コンテナーと区別される Azure コンテナーに対して特別な処理は行いません。 さらに、インポート パイプラインは現在、顧客からのコンテンツの暗号化キーを受け入れていません。 暗号化された内容は SharePoint がリストできる不透明なファイルとして扱われますが、インデックスを作成することはできず、暗号化されたファイルが UI で環境にアップロードされた場合と同じです。
イベントとイベント ハンドラー
インポート パイプラインでは、イベント ハンドラーをリスト アイテムで参照することはできますが、現時点では、リスト レベルでイベント ハンドラーを定義することはできません。 インポート パイプラインでは、アイテムがインポートされるとイベントが発生しないため、インポート イベントのために既存のイベント ハンドラーが起動することはありません。
UserGroup.XML でのユーザー識別子を入力しています
送信されたパッケージで UserGroup.XML を生成する場合は、次のガイドラインに従います。
- 1 人のユーザーは、1 つのパッケージ内で 1 回だけ識別されます
- ユーザー識別子の 'login' 属性には UPN が必要です。 UPN 以外のメール アドレスを入力しないでください。
重要
2022 年 3 月 2 日の時点で、Migration API は 1 つのパッケージでユーザーごとに最大 1 つの識別子を検証して適用するようになりました。
UPN 以外のメールを使用してもジョブが失敗することはありませんが、SharePoint Online で予期しない結果が発生する可能性があります。
例
次の例は、UserGroup.XML でユーザー識別子を入力する正しい方法と正しくない方法を示しています。
この場合、ユーザーは次の識別子を持っています。
- UPN: robert@contoso.com
- Email: robert.downey@contoso.com。
正しい例
この例では、ユーザーは UPN 電子メール アドレスを使用して 1 回だけ入力します。
<User Id="1" Login="i:0#.f|membership|robert@contoso.com" …/>
正しくない例
例 1: この例では、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" …/>
例 2: この例では、UPN 以外のメール アドレスが誤って使用されています。
<User Id="2" Login="i:0#.f|membership|robert.downey@contoso.com" …/>
ユーザーの解決
Migration API が UserGroup.xml で提供されたログインを使用してユーザーを解決できず、システム ID が指定されていない場合:
このユーザーはパッケージ内の関連付けられたメタデータで「システム アカウント」に置き換えられます (作成者、編集者など)。
ImportLogs で警告が報告されます 。 "ユーザー ''user@contoso.com を確認できませんでした"
移行 API が、UserGroup.xml で提供されているサインインを使用してユーザーを解決できず、システム ID (オンプレミス AD のユーザーの SID) が提供されている場合は、次のようになります。
指定されたサインインと SystemId を持つ新しい削除されたユーザーが作成され、パッケージ内の関連付けられたメタデータで使用されます。
警告は ImportLogs で報告されます。"SiteUsers からユーザー 'user@contoso.com' 属性を取得できませんでした。渡された値にフォールバックする"
付録
略語の定義
略語 | 定義 |
---|---|
BOT | タイマー ジョブを実行している SharePoint サーバー |
CDB | サイト コレクションとコンテンツを含むコンテンツ データベース |
CFE | コンテンツ ファームのフロント エンド サーバー |
SPO | SharePoint Online |
ABS | Azure Blob Storage |
役に立つリソース
- SharePoint Online クライアント コンポーネント SDK
- Azure Windows Azure SDK for .NET - 2.4
- OneDrive for Business サイトの一括作成
- OneDrive for Business を使用してコンピューターに SharePoint ライブラリを同期するときの制限事項
- リストまたはライブラリに追加できないファイルの種類
インポート パッケージのセキュリティ構造の使用
このセクションでは、アクセス許可に関するセキュリティを含むエクスポート パッケージに含まれる内容の概要について説明します。 これにより、ユーザーおよびグループのメンバーシップとロール、および特定の割り当てを決定することができます (より深い子オブジェクトで上書きされない限り、オブジェクト レベルとその子で設定された固有のアクセス許可)。
パッケージ ファイルのセキュリティ識別子を解釈する方法
UserGroup.xml ファイルでは、エクスポートされた Web 内のすべてのユーザーとグループが定義されています。 このファイル内のアイテムは次のとおりです。
- ユーザー オブジェクトには、特定のユーザーに関する情報が含まれます。これには、ドメイン グループとしての特定のセキュリティ 原則の識別、サインイン、およびセキュリティ 原則の Base 64 でエンコードされた SystemId (SID) が含まれます。
- Group オブジェクトには、特定のグループについての情報と、そのグループの直接メンバーシップ リストが含まれます。
- グループ オブジェクトの Owner の値と、グループ オブジェクト内のメンバー オブジェクトの UserId の値は、それぞれ他のユーザー オブジェクトまたはグループ オブジェクトの他の ID 値にマップします。
表 2: UserGroupMap で注釈された Users と Groups
<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>
Manifest.xml には、エクスポートされた Web 内のすべての内容に関するメタデータが含まれます。 このファイル内のアイテムは次のとおりです。
- Roles オブジェクトには、Web で定義されているロールの一覧が含まれます。
- Role オブジェクトでは、ID、内部アクセス許可権限マスク フラグ、表示情報など、個々のロールが定義されています。
- RoleId 値では、Role オブジェクトの識別子が定義されています。
- PermMask 値には、権限マスク フラグが含まれます。
- RoleAssignments オブジェクトには、固有の権限 (RoleAssignment オブジェクト) の一覧が含まれます。
- RoleAssignment オブジェクトには、個別の Assignment オブジェクトの一覧が含まれます (ある場合)。
- 個々の RoleAssignment オブジェクトには、1 つの個別のユーザーまたはグループの実際のメンバーシップと、実際の Role が含まれます。
- RoleId の値は、Role オブジェクトの RoleId 値に対応します。
- PrincipalId 値は、UserGroups.xml 内のユーザー オブジェクトまたはグループ オブジェクトの ID 値にマップされます。
表 3: マニフェストで注釈された Roles と RoleAssignments
<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>
制約のある XSD 構造
インポート パイプラインのパッケージ検証に使用される XSD ファイルは、元の 2013 完全なスキーマとは異なる場合に含まれます。これは 、公式の SharePoint ドキュメントで確認できます。
DeploymentExportSettings.XSD
表 4: 制約のある DeploymentExportSettings.XSD
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema targetNamespace="urn:deployment-exportsettings-schema" elementFormDefault="qualified"
xmlns="urn:deployment-exportsettings-schema"
xmlns:mstns="urn:deployment-exportsettings-schema"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- Guid SimpleType definition -->
<xs:simpleType name="Guid">
<xs:restriction base="xs:string"></xs:restriction>
</xs:simpleType>
<!-- Used for SPExportObjects -->
<xs:simpleType name="SPDeploymentObjectType">
<xs:restriction base="xs:string">
<xs:enumeration value="Folder" />
<xs:enumeration value="List" />
<xs:enumeration value="ListItem" />
<xs:enumeration value="File" />
</xs:restriction>
</xs:simpleType>
<!-- Used for SPExportObjects -->
<xs:simpleType name="SPIncludeDescendants">
<xs:restriction base="xs:string">
<xs:enumeration value="None" />
<xs:enumeration value="Content" />
<xs:enumeration value="All" />
</xs:restriction>
</xs:simpleType>
<!-- From SPDeploymentSettings -->
<xs:simpleType name="SPIncludeSecurity">
<xs:restriction base="xs:string">
<xs:enumeration value="None" />
<xs:enumeration value="WssOnly" />
<xs:enumeration value="All" />
</xs:restriction>
</xs:simpleType>
<!-- From SPExportSettings -->
<xs:simpleType name="SPIncludeVersions">
<xs:restriction base="xs:string">
<xs:enumeration value="LastMajor" />
<xs:enumeration value="CurrentVersion" />
<xs:enumeration value="LastMajorAndMinor" />
<xs:enumeration value="All" />
</xs:restriction>
</xs:simpleType>
<!-- From SPExportSettings -->
<xs:simpleType name="SPExportMethodType">
<xs:restriction base="xs:string">
<xs:enumeration value="ExportAll" />
<xs:enumeration value="ExportChanges" />
</xs:restriction>
</xs:simpleType>
<!-- This defines that the XML can contain 0-N instances of the -->
<!-- SPExportObjects element -->
<xs:complexType name="SPExportSettings">
<xs:sequence>
<xs:element name="ExportObjects" type="SPExportObjectCollection" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<!-- SPDeploymentSettings -->
<xs:attribute name="SiteUrl" type="xs:string" use="required" />
<xs:attribute name="FileLocation" type="xs:string" />
<xs:attribute name="BaseFileName" type="xs:string" />
<xs:attribute name="IncludeSecurity" type="SPIncludeSecurity" />
<!-- SPExportSettings -->
<xs:attribute name="IncludeVersions" type="SPIncludeVersions" />
<xs:attribute name="ExportMethod" type="SPExportMethodType" />
<xs:attribute name="ExportChangeToken" type="xs:string" />
<xs:attribute name="ExportPublicSchema" type="xs:boolean" default="true" />
<xs:attribute name="ExportFrontEndFileStreams" type="xs:boolean" default="true" />
<xs:attribute name="ExcludeDependencies" type="xs:boolean" />
<xs:anyAttribute namespace="##any" processContents="skip" />
</xs:complexType>
<xs:complexType name="SPExportObjectCollection">
<xs:sequence>
<xs:element name="DeploymentObject" type="SPExportObject" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="SPExportObject">
<!-- SPDeploymentObject -->
<xs:attribute name="Id" type="Guid" />
<xs:attribute name="Type" type="SPDeploymentObjectType" />
<xs:attribute name="ParentId" type="Guid" />
<!-- SPExportObject -->
<xs:attribute name="Url" type="xs:string" />
<xs:attribute name="ExcludeChildren" type="xs:boolean" />
<xs:attribute name="IncludeDescendants" type="SPIncludeDescendants" />
<xs:attribute name="ExportChangeToken" type="xs:string" />
</xs:complexType>
<!--This defines that the XML can contain 0-N instances of the ExportSettings element-->
<xs:element name="ExportSettings" type="SPExportSettings" />
</xs:schema>
<!Including CommentFlags settings
<Comments>
<Comment Id="1" Text="SGVsbG8gd29ybGQgdmlkZW8gY29tbWVudCE=" ParentId="0" UserId="12" Created="2021-05-14T22:35:30.353Z" UIVersion="512" />
<Comment Id="2" Text="SGVsbG8gd29ybGQgdmlkZW8gcmVwbHku" ParentId="1" UserId="12" Created=2021-05-14T22:36:14.08Z" UIVersion="512" />
</Comments>
DeploymentLookupListMap.XSD
現在公開されている完全な 2013 パッケージ スキーマからの変更はありません。
DeploymentManifest.XSD
表 5: 制約のある DeploymentManifest.XSD
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema targetNamespace="urn:deployment-manifest-schema" elementFormDefault="qualified"
xmlns="urn:deployment-manifest-schema"
xmlns:mstns="urn:deployment-manifest-schema"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- From CoreDefinitions.xsd -->
<xs:simpleType name="TRUEFALSE">
<xs:restriction base="xs:string">
<xs:enumeration value="TRUE" />
<xs:enumeration value="FALSE" />
<xs:enumeration value="true" />
<xs:enumeration value="false" />
</xs:restriction>
</xs:simpleType>
<!-- Guid SimpleType definition -->
<xs:simpleType name="Guid">
<xs:restriction base="xs:string"></xs:restriction>
</xs:simpleType>
<!-- SPGenericObjectCollection definition -->
<xs:complexType name="SPGenericObjectCollection">
<xs:sequence>
<xs:element name="SPObject" type="SPGenericObject" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<!-- Generic complex Type definition that wraps a SharePoint top-level element -->
<xs:complexType name="SPGenericObject">
<xs:sequence>
<xs:choice minOccurs="0" maxOccurs="1">
<xs:element name="List" type="SPList" />
<xs:element name="DocumentLibrary" type="SPDocumentLibrary" />
<xs:element name="ListItem" type="SPListItem" />
<xs:element name="Folder" type="SPFolder" />
<xs:element name="File" type="SPFile" />
<xs:element name="ContentType" type="SPContentType" />
<xs:element name="UserX" type="DeploymentUserX" />
<xs:element name="GroupX" type="DeploymentGroupX" />
<xs:element name="Roles" type="DeploymentRoles" />
<xs:element name="RoleX" type="DeploymentRoleX" />
<xs:element name="RoleAssignments" type="DeploymentRoleAssignments" />
<xs:element name="RoleAssignmentX" type="DeploymentRoleAssignmentX" />
</xs:choice>
</xs:sequence>
<xs:attribute name="ObjectType" type="SPObjectType" />
<xs:attribute name="Id" type="Guid" />
<xs:attribute name="ParentId" type="Guid" />
<xs:attribute name="Name" type="xs:string" />
<xs:attribute name="IsDeleted" type="xs:boolean" />
<xs:attribute name="IsSiteRename" type="xs:boolean" />
<xs:attribute name="ParentWebId" type="Guid" />
<xs:attribute name="ParentWebUrl" type="xs:string" use="optional" />
<xs:attribute name="ContentTypeId" type="xs:string" use ="optional" />
<xs:attribute name="Url" type="xs:string" />
</xs:complexType>
<xs:simpleType name="SPDictionaryEntryValueType">
<xs:restriction base="xs:string">
<xs:enumeration value="String" />
<xs:enumeration value="Integer" />
<xs:enumeration value="Time" />
<xs:enumeration value="StringVector" />
<xs:enumeration value="Boolean" />
<xs:enumeration value="FileSystemTime" />
<xs:enumeration value="IntVector" />
<xs:enumeration value="Double" />
<xs:enumeration value="LongText" />
<xs:enumeration value="Empty" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="SPDictionaryEntryAccess">
<xs:restriction base="xs:string">
<xs:enumeration value="ReadOnly" />
<xs:enumeration value="ReadWrite" />
</xs:restriction>
</xs:simpleType>
<!-- Enumeration of all the top-level serialized SharePoint Types -->
<xs:simpleType name="SPObjectType">
<xs:restriction base="xs:string">
<xs:enumeration value="SPList" />
<xs:enumeration value="SPDocumentLibrary" />
<xs:enumeration value="SPListItem" />
<xs:enumeration value="SPFolder" />
<xs:enumeration value="SPFile" />
<xs:enumeration value="SPContentType" />
<xs:enumeration value="SPDocumentTemplate" />
<xs:enumeration value="DeploymentUserX" />
<xs:enumeration value="DeploymentGroupX" />
<xs:enumeration value="DeploymentRoles" />
<xs:enumeration value="DeploymentRoleX" />
<xs:enumeration value="DeploymentRoleAssignments" />
<xs:enumeration value="DeploymentRoleAssignmentX" />
</xs:restriction>
</xs:simpleType>
<!-- Enumeration of all the non-top level serialized SharePoint Types -->
<xs:simpleType name="OtherObjectType">
<xs:restriction base="xs:string">
<xs:enumeration value="SPFileVersion" />
<xs:enumeration value="SPListEvent" />
<xs:enumeration value="SPListItemVersion" />
<xs:enumeration value="SPModerationInfo" />
</xs:restriction>
</xs:simpleType>
<!-- DeploymentRole definition -->
<xs:complexType name="DeploymentRole">
<xs:attribute name="RoleId" type="xs:string" use="required" />
<xs:attribute name="Title" type="xs:string" use="required" />
<xs:attribute name="Description" type="xs:string" use="optional" />
<xs:attribute name="PermMask" type="xs:string" use="required" />
<xs:attribute name="Hidden" type="xs:boolean" use="required" />
<xs:attribute name="RoleOrder" type="xs:string" use="optional" />
<xs:attribute name="Type" type="xs:string" use="optional" />
</xs:complexType>
<!-- DeploymentRoles definition -->
<xs:complexType name="DeploymentRoles">
<xs:sequence>
<xs:element name="Role" type="DeploymentRole" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<!-- DeploymentAssignment definition -->
<xs:complexType name="DeploymentAssignment">
<xs:attribute name="RoleId" type="xs:string" use="required" />
<xs:attribute name="PrincipalId" type="xs:string" use="required" />
</xs:complexType>
<!-- DeploymentRoleAssignment Definition -->
<xs:complexType name="DeploymentRoleAssignment">
<xs:sequence>
<xs:element name="Assignment" type="DeploymentAssignment" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="ScopeId" type="xs:string" use="required" />
<xs:attribute name="RoleDefWebId" type="xs:string" use="required" />
<xs:attribute name="RoleDefWebUrl" type="xs:string" use="required" />
<xs:attribute name="ObjectId" type="xs:string" use="required" />
<xs:attribute name="ObjectType" type="xs:string" use="required" />
<xs:attribute name="ObjectUrl" type="xs:string" use="required" />
<xs:attribute name="AnonymousPermMask" type="xs:string" />
</xs:complexType>
<xs:complexType name="DeploymentRoleAssignments">
<xs:sequence>
<xs:element name="RoleAssignment" type="DeploymentRoleAssignment" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<!-- SPProperty definition -->
<xs:complexType name="DictionaryEntry">
<xs:attribute name="Name" type="xs:string" use="required" />
<xs:attribute name="Value" type="xs:string" use="optional" />
<xs:attribute name="Value2" type="xs:string" use="optional" />
<xs:attribute name="Id" type="Guid" use="optional" />
<xs:attribute name="Type" type="SPDictionaryEntryValueType" default="String" use="optional" />
<xs:attribute name="Access" type="SPDictionaryEntryAccess" default="ReadWrite" use="optional" />
</xs:complexType>
<!-- Dictionary definition -->
<xs:complexType name="Dictionary">
<xs:sequence>
<xs:element name="Property" type="DictionaryEntry" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<!-- SPAttachment definition -->
<xs:complexType name="SPAttachment">
<xs:sequence>
<xs:element name="Properties" type="Dictionary" minOccurs="0" />
</xs:sequence>
<xs:attribute name="Name" type="xs:string" />
<xs:attribute name="DirName" type="xs:string" />
<xs:attribute name="Url" type="xs:string" />
<xs:attribute name="Id" type="Guid" />
<xs:attribute name="ParentWebId" type="Guid" />
<!-- Map to file on disk -->
<xs:attribute name="FileValue" type="xs:string" />
<xs:attribute name="MetaInfo" type="xs:string" use="optional" />
<xs:attribute name="Author" type="xs:string" use="optional" />
<xs:attribute name="ModifiedBy" type="xs:string" use="optional" />
<xs:attribute name="TimeCreated" type="xs:dateTime" use="optional" />
<xs:attribute name="TimeLastModified" type="xs:dateTime" use="optional" />
<!-- Case where it fails at export time but too late to ignore -->
<xs:attribute name="FailureMessage" type="xs:string" use="optional" />
</xs:complexType>
<!-- SPAttachmentCollection definition -->
<xs:complexType name="SPAttachmentCollection">
<xs:sequence>
<xs:element name="Attachment" type="SPAttachment" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<!-- SPLink definition -->
<xs:complexType name="SPLink">
<xs:sequence></xs:sequence>
<xs:attribute name="TargetId" type="Guid" use="required" />
<xs:attribute name="TargetUrl" type="xs:string" use="required" />
<xs:attribute name="IsDirty" type="xs:boolean" use="required" />
<xs:attribute name="WebPartId" type="Guid" use="optional" />
<xs:attribute name="LinkNumber" type="xs:int" use="optional" />
<xs:attribute name="Type" type="xs:unsignedByte" use="optional" />
<xs:attribute name="Security" type="xs:unsignedByte" use="optional" />
<xs:attribute name="Dynamic" type="xs:unsignedByte" use="optional" />
<xs:attribute name="ServerRel" type="xs:boolean" use="optional" />
<xs:attribute name="Level" type="xs:unsignedByte" use="optional" />
<xs:attribute name="Search" type="xs:string" use="optional" />
</xs:complexType>
<!-- SPLinkCollection definition -->
<xs:complexType name="SPLinkCollection">
<xs:sequence>
<xs:element name="Link" type="SPLink" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<!-- AnonymousState definition -->
<xs:simpleType name="AnonymousState">
<xs:restriction base="xs:string">
<xs:enumeration value="Disabled" />
<xs:enumeration value="Enabled" />
<xs:enumeration value="On" />
</xs:restriction>
</xs:simpleType>
<!-- SPModerationStatusType definition -->
<xs:simpleType name="SPModerationStatusType">
<xs:restriction base="xs:string">
<xs:enumeration value="Approved" />
<xs:enumeration value="Denied" />
<xs:enumeration value="Pending" />
<xs:enumeration value="Draft" />
<xs:enumeration value="Scheduled" />
</xs:restriction>
</xs:simpleType>
<!-- SPModerationInformation definition -->
<xs:complexType name="SPModerationInformation">
<xs:attribute name="Comment" type="xs:string" />
<xs:attribute name="ModerationStatus" type="SPModerationStatusType" />
</xs:complexType>
<!-- SPBaseType definition -->
<xs:simpleType name="SPBaseType">
<xs:restriction base="xs:string">
<xs:enumeration value="UnspecifiedBaseType" />
<xs:enumeration value="GenericList" />
<xs:enumeration value="DocumentLibrary" />
<xs:enumeration value="Unused" />
<xs:enumeration value="DiscussionBoard" />
<xs:enumeration value="Survey" />
<xs:enumeration value="Issue" />
</xs:restriction>
</xs:simpleType>
<!-- SPListTemplateType definition -->
<xs:simpleType name="SPListTemplateType">
<xs:restriction base="xs:string"></xs:restriction>
</xs:simpleType>
<!-- DraftVisibilityType definition -->
<xs:simpleType name="DraftVisibilityType">
<xs:restriction base="xs:string">
<xs:enumeration value="Reader" />
<xs:enumeration value="Author" />
<xs:enumeration value="Approver" />
</xs:restriction>
</xs:simpleType>
<!-- SPEventHostType definition -->
<xs:simpleType name="SPEventHostType">
<xs:restriction base="xs:string">
<xs:enumeration value="Site" />
<xs:enumeration value="Web" />
<xs:enumeration value="List" />
<xs:enumeration value="ListItem" />
<xs:enumeration value="ContentType" />
<xs:enumeration value="Feature" />
</xs:restriction>
</xs:simpleType>
<!-- SPEventReceiverSynchronization definition -->
<xs:simpleType name="SPEventReceiverSynchronization">
<xs:restriction base="xs:string">
<xs:enumeration value="Default" />
<xs:enumeration value="Synchronous" />
<xs:enumeration value="Asynchronous" />
</xs:restriction>
</xs:simpleType>
<!-- SPEventReceiverType definition -->
<xs:simpleType name="SPEventReceiverType">
<xs:restriction base="xs:string">
<xs:enumeration value="ItemAdding" />
<xs:enumeration value="ItemUpdating" />
<xs:enumeration value="ItemDeleting" />
<xs:enumeration value="ItemCheckingIn" />
<xs:enumeration value="ItemCheckingOut" />
<xs:enumeration value="ItemUncheckingOut" />
<xs:enumeration value="ItemAttachmentAdding" />
<xs:enumeration value="ItemAttachmentDeleting" />
<xs:enumeration value="ItemFileMoving" />
<xs:enumeration value="ItemVersionDeleting" />
<xs:enumeration value="FieldAdding" />
<xs:enumeration value="FieldUpdating" />
<xs:enumeration value="FieldDeleting" />
<xs:enumeration value="ListAdding" />
<xs:enumeration value="ListDeleting" />
<xs:enumeration value="SiteDeleting" />
<xs:enumeration value="WebDeleting" />
<xs:enumeration value="WebMoving" />
<xs:enumeration value="WebAdding" />
<xs:enumeration value="GroupAdding" />
<xs:enumeration value="GroupUpdating" />
<xs:enumeration value="GroupDeleting" />
<xs:enumeration value="GroupUserAdding" />
<xs:enumeration value="GroupUserDeleting" />
<xs:enumeration value="RoleDefinitionAdding" />
<xs:enumeration value="RoleDefinitionUpdating" />
<xs:enumeration value="RoleDefinitionDeleting" />
<xs:enumeration value="RoleAssignmentAdding" />
<xs:enumeration value="RoleAssignmentDeleting" />
<xs:enumeration value="InheritanceBreaking" />
<xs:enumeration value="InheritanceResetting" />
<xs:enumeration value="ItemAdded" />
<xs:enumeration value="ItemUpdated" />
<xs:enumeration value="ItemDeleted" />
<xs:enumeration value="ItemCheckedIn" />
<xs:enumeration value="ItemCheckedOut" />
<xs:enumeration value="ItemUncheckedOut" />
<xs:enumeration value="ItemAttachmentAdded" />
<xs:enumeration value="ItemAttachmentDeleted" />
<xs:enumeration value="ItemFileMoved" />
<xs:enumeration value="ItemFileConverted" />
<xs:enumeration value="ItemFileTransformed" />
<xs:enumeration value="ItemVersionDeleted" />
<xs:enumeration value="FieldAdded" />
<xs:enumeration value="FieldUpdated" />
<xs:enumeration value="FieldDeleted" />
<xs:enumeration value="ListAdded" />
<xs:enumeration value="ListDeleted" />
<xs:enumeration value="SiteDeleted" />
<xs:enumeration value="WebDeleted" />
<xs:enumeration value="WebMoved" />
<xs:enumeration value="WebProvisioned" />
<xs:enumeration value="WebRestored" />
<xs:enumeration value="GroupAdded" />
<xs:enumeration value="GroupUpdated" />
<xs:enumeration value="GroupDeleted" />
<xs:enumeration value="GroupUserAdded" />
<xs:enumeration value="GroupUserDeleted" />
<xs:enumeration value="RoleDefinitionAdded" />
<xs:enumeration value="RoleDefinitionUpdated" />
<xs:enumeration value="RoleDefinitionDeleted" />
<xs:enumeration value="RoleAssignmentAdded" />
<xs:enumeration value="RoleAssignmentDeleted" />
<xs:enumeration value="InheritanceBroken" />
<xs:enumeration value="InheritanceReset" />
<xs:enumeration value="EmailReceived" />
<xs:enumeration value="ContextEvent" />
<xs:enumeration value="InvalidReceiver" />
<xs:enumeration value="WorkflowCompleted" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="DefaultItemOpen">
<xs:restriction base="xs:string">
<xs:enumeration value="Browser" />
<xs:enumeration value="PreferClient" />
</xs:restriction>
</xs:simpleType>
<!-- SPList definition -->
<xs:complexType name="SPList">
<xs:sequence >
<xs:choice minOccurs="0" maxOccurs="11">
<xs:element name="ContentTypes" type="SPContentTypeCollection" minOccurs="0" maxOccurs="1" />
<xs:element name="DeletedContentTypes" type="ListDeletedContentTypes" minOccurs="0" maxOccurs="1" />
</xs:choice>
</xs:sequence>
<xs:attribute name="Id" type="Guid" use="required" />
<xs:attribute name="Title" type="xs:string" use="required" />
<xs:attribute name="RootFolderId" type="Guid" />
<xs:attribute name="RootFolderUrl" type="xs:string" use="required" />
<xs:attribute name="ParentWebId" type="Guid" use="required" />
<xs:attribute name="ParentWebUrl" type="xs:string" use="optional" />
<xs:attribute name="BaseType" type="SPBaseType" />
<xs:attribute name="BaseTemplate" type="SPListTemplateType" use="required" />
</xs:complexType>
<xs:complexType name="SPFieldCollection" mixed="true">
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="FieldRef" type="SPFieldLink" minOccurs="0" maxOccurs="unbounded" />
<xs:element name="Field" type="SPField" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="SPField">
<xs:sequence>
<xs:any minOccurs="0" maxOccurs="unbounded" namespace="##any" processContents="skip" />
</xs:sequence>
<xs:attribute name="ID" type="Guid" />
<xs:attribute name="FieldId" type="Guid" use="optional" />
<xs:attribute name="Name" type="xs:string" />
<xs:attribute name="Value" type="xs:string" />
<xs:attribute name="DisplayName" type="xs:string" />
<xs:attribute name="RowOrdinal" type="xs:int" />
<xs:attribute name="RowOrdinal2" type="xs:int" use="optional" />
<xs:attribute name="Type" type="xs:string" />
<xs:attribute name="ColName" type="xs:string" />
<xs:attribute name="ColName2" type="xs:string" use="optional" />
<xs:attribute name="Title" type="xs:string" use="optional" />
<xs:attribute name="Description" type="xs:string" use="optional" />
<xs:attribute name="DefaultValue" type="xs:string" use="optional" />
<xs:attribute name="DefaultFormula" type="xs:string" use="optional" />
<xs:attribute name="FromBaseType" type="xs:string" use="optional" />
<xs:attribute name="Sealed" type="xs:string" />
<xs:attribute name="CanToggleHidden" type="xs:string" use="optional" />
<xs:attribute name="DisplaySize" type="xs:string" use="optional" />
<xs:attribute name="Required" type="xs:string" use="optional" />
<xs:attribute name="ReadOnly" type="xs:string" use="optional" />
<xs:attribute name="Hidden" type="xs:string" use="optional" />
<xs:attribute name="Direction" type="xs:string" use="optional" />
<xs:attribute name="IMEMode" type="xs:string" use="optional" />
<xs:attribute name="SortableBySchema" type="xs:string" use="optional" />
<xs:attribute name="Sortable" type="xs:string" use="optional" />
<xs:attribute name="FilterableBySchema" type="xs:string" use="optional" />
<xs:attribute name="Filterable" type="xs:string" use="optional" />
<xs:attribute name="FilterableNoRecurrenceBySchema" type="xs:string" use="optional" />
<xs:attribute name="FilterableNoRecurrence" type="xs:string" use="optional" />
<xs:attribute name="Reorderable" type="xs:string" use="optional" />
<xs:attribute name="Format" type="xs:string" use="optional" />
<xs:attribute name="FillInChoice" type="xs:string" use="optional" />
<xs:attribute name="SchemaXml" type="xs:string" use="optional" />
<xs:attribute name="JSLink" type="xs:string" use="optional" />
<xs:attribute name="CAMLRendering" type="xs:string" use="optional" />
<xs:attribute name="ServerRender" type="xs:string" use="optional" />
<xs:attribute name="ListItemMenu" type="xs:string" use="optional" />
<xs:attribute name="ListItemMenuAllowed" type="xs:string" use="optional" />
<xs:attribute name="LinkToItem" type="xs:string" use="optional" />
<xs:attribute name="LinkToItemAllowed" type="xs:string" use="optional" />
<xs:attribute name="CalloutMenu" type="xs:string" use="optional" />
<xs:attribute name="CalloutMenuAllowed" type="xs:string" use="optional" />
<!-- Label definition -->
<xs:attribute name="ListDefaultCompliancetagWrittenTime" type="xs:dateTime" use="optional" />
<xs:attribute name="ListDefaultComplianceTagUserId" type="xs:int" use="optional" />
<!-- ListDefaultComplianceFlags is a Flags dependes on the Label, if the Label has Keep or KeepAndDelete ( that will have the 0x01 bit set). If the Label is a record label, that will have 0x01 and 0x04 set -->
<xs:attribute name="ListDefaultComplianceFlags" type="xs:int" use="optional" />
<xs:attribute name="ListDefaultComplianceTag" type="xs:string" use="optional" />
<!-- end of Label definition -->
<xs:anyAttribute namespace="##any" processContents="skip" />
</xs:complexType>
<!-- FieldDataCollection definition -->
<xs:complexType name="FieldDataCollection">
<xs:sequence>
<xs:element name="Field" type="DictionaryEntry" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<!-- SPEventReceiverDefinitionCollection definition -->
<xs:complexType name="SPEventReceiverDefinitionCollection">
<xs:sequence>
<xs:element name="EventReceiver" type="SPEventReceiverDefinition" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<!-- SPEventReceiverDefinition definition -->
<xs:complexType name="SPEventReceiverDefinition">
<xs:attribute name="Id" type="Guid" use="required" />
<xs:attribute name="Name" type="xs:string" use="required" />
<xs:attribute name="WebId" type="Guid" use="required" />
<xs:attribute name="HostId" type="Guid" use="required" />
<xs:attribute name="HostType" type="SPEventHostType" use="required" />
<xs:attribute name="Synchronization" type="SPEventReceiverSynchronization" use="optional" />
<xs:attribute name="Type" type="SPEventReceiverType" use="required" />
<xs:attribute name="SequenceNumber" type="xs:int" use="required" />
<xs:attribute name="Url" type="xs:string" use="optional" />
<xs:attribute name="Assembly" type="xs:string" use="optional" />
<xs:attribute name="Class" type="xs:string" use="optional" />
<xs:attribute name="SolutionId" type="Guid" use="optional" />
<xs:attribute name="Data" type="xs:string" use="optional" />
<xs:attribute name="Filter" type="xs:string" use="optional" />
<xs:attribute name="Credential" type="xs:int" use="optional" />
<xs:attribute name="ItemId" type="xs:int" use="optional" />
</xs:complexType>
<!-- ListDeletedContentTypes definition -->
<xs:complexType name="ListDeletedContentTypes">
<xs:sequence>
<xs:element name="DeletedContentType" type="DeletedContentType" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<!-- DeletedContentType definition -->
<xs:complexType name="DeletedContentType">
<xs:attribute name="ContentTypeId" type="xs:string" use="required" />
</xs:complexType>
<!-- SPDocumentLibrary definition -->
<xs:complexType name="SPDocumentLibrary">
<xs:complexContent>
<xs:extension base="SPList">
<xs:attribute name="DocumentTemplateUrl" type="xs:string" />
<xs:attribute name="IsCatalog" type="xs:boolean" />
<xs:attribute name="ThumbnailSize" type="xs:int" />
<xs:attribute name="WebImageHeight" type="xs:int" />
<xs:attribute name="WebImageWidth" type="xs:int" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- SPFolder definition -->
<xs:complexType name="SPFolder">
<xs:sequence>
<xs:element name="Properties" type="Dictionary" minOccurs="0" />
</xs:sequence>
<xs:attribute name="Id" type="Guid" />
<xs:attribute name="Name" type="xs:string" />
<xs:attribute name="Url" type="xs:string" />
<xs:attribute name="ParentFolderId" type="Guid" />
<xs:attribute name="ParentWebId" type="Guid" />
<xs:attribute name="ParentWebUrl" type="xs:string" use="optional" />
<xs:attribute name="ContainingDocumentLibrary" type="Guid" />
<xs:attribute name="WelcomePageUrl" type="xs:string" use="optional" />
<xs:attribute name="WelcomePageParameters" type="xs:string" use="optional" />
<xs:attribute name="ListItemIntId" type="xs:int" use="optional" />
<xs:attribute name="Author" type="xs:string" use="optional" />
<xs:attribute name="ModifiedBy" type="xs:string" use="optional" />
<xs:attribute name="TimeCreated" type="xs:dateTime" use="optional" />
<xs:attribute name="TimeLastModified" type="xs:dateTime" use="optional" />
<xs:attribute name="ProgId" type="xs:string" use="optional" />
<xs:attribute name="SortBehavior" type="xs:string" use="optional" />
</xs:complexType>
<!-- SPFileVersion Collection definition -->
<xs:complexType name="SPFileVersionCollection">
<xs:sequence>
<xs:element name="File" type="SPFile" minOccurs="1" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<!-- SPListItemVersion Collection definition -->
<xs:complexType name="SPListItemVersionCollection">
<xs:sequence>
<xs:element name="ListItem" type="SPListItem" minOccurs="1" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<!-- SPFileVersionEvent Collection definition -->
<xs:complexType name="SPFileVersionEventCollection">
<xs:sequence>
<xs:element name="VersionEvent" type="SPFileVersionEvent" minOccurs="1" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="SPFileVersionEvent">
<xs:attribute name="Id" type="xs:int" />
<xs:attribute name="UIVersion" type="xs:int" />
<xs:attribute name="Type" type="xs:int" />
<xs:attribute name="Time" type="xs:dateTime" />
<xs:attribute name="UserId" type="xs:int" />
</xs:complexType>
<!-- SPFile definition -->
<xs:complexType name="SPFile">
<xs:sequence>
<xs:element name="Properties" type="Dictionary" minOccurs="0" />
<xs:element name="Versions" type="SPFileVersionCollection" minOccurs="0" maxOccurs="1" />
<xs:element name="Links" type="SPLinkCollection" minOccurs="0" maxOccurs="1" />
<xs:element name="EventReceivers" type="SPEventReceiverDefinitionCollection" minOccurs="0" maxOccurs="1" />
<xs:element name="VersionEvents" type="SPFileVersionEventCollection" minOccurs="0" maxOccurs="1" />
</xs:sequence>
<xs:attribute name="Name" type="xs:string" />
<xs:attribute name="Id" type="Guid" />
<xs:attribute name="Url" type="xs:string" />
<xs:attribute name="ListItemIntId" type="xs:int" />
<xs:attribute name="InDocumentLibrary" type="xs:boolean" />
<xs:attribute name="ParentWebId" type="Guid" />
<xs:attribute name="ParentWebUrl" type="xs:string" />
<xs:attribute name="ParentId" type="Guid" />
<xs:attribute name="ListId" type="Guid" use="optional" />
<!-- Map to file on disk -->
<xs:attribute name="FileValue" type="xs:string" use="optional" />
<xs:attribute name="CheckinComment" type="xs:string" use="optional" />
<xs:attribute name="Version" type="xs:string" use="optional" default="1.0" />
<xs:attribute name="Author" type="xs:string" use="optional" />
<xs:attribute name="ModifiedBy" type="xs:string" use="optional" />
<xs:attribute name="TimeCreated" type="xs:dateTime" use="optional" />
<xs:attribute name="TimeLastModified" type="xs:dateTime" use="optional" />
<!-- Case where it fails at export time but too late to ignore -->
<xs:attribute name="FailureMessage" type="xs:string" use="optional" />
<!-- Setup Path Information -->
<xs:attribute name="IsGhosted" type="xs:boolean" use="optional" />
<xs:attribute name="SetupPath" type="xs:string" use="optional" />
<xs:attribute name="SetupPathUser" type="xs:string" use="optional" />
<!-- Use: 2, 3, 4 OR 15 -->
<xs:attribute name="SetupPathVersion" type="xs:byte" default="15" />
<xs:anyAttribute namespace="##any" processContents="skip" />
</xs:complexType>
<!-- Doc Type of List Item -->
<xs:simpleType name="ListItemDocType">
<xs:restriction base="xs:string">
<xs:enumeration value="File" />
<xs:enumeration value="Folder" />
<xs:enumeration value="Unknown" />
</xs:restriction>
</xs:simpleType>
<!-- SPListItem definition -->
<xs:complexType name="SPListItem">
<xs:sequence>
<xs:choice minOccurs="0" maxOccurs="5">
<xs:element name="Fields" type="SPFieldCollection" minOccurs="0" maxOccurs="1" />
<xs:element name="Versions" type="SPListItemVersionCollection" minOccurs="0" maxOccurs="1" />
<xs:element name="Attachments" type="SPAttachmentCollection" minOccurs="0" maxOccurs="1" />
<xs:element name="Links" type="SPLinkCollection" minOccurs="0" maxOccurs="1" />
<xs:element name="EventReceivers" type="SPEventReceiverDefinitionCollection" minOccurs="0" maxOccurs="1" />
</xs:choice>
</xs:sequence>
<xs:attribute name="Name" type="xs:string" />
<xs:attribute name="DirName" type="xs:string" />
<xs:attribute name="FileUrl" type="xs:string" use="optional" />
<xs:attribute name="Version" type="xs:string" use="optional" default="1.0" />
<xs:attribute name="Id" type="Guid" />
<xs:attribute name="IntId" type="xs:int" />
<xs:attribute name="DocId" type="Guid" use="optional" />
<xs:attribute name="Author" type="xs:string" use="optional" />
<xs:attribute name="ModifiedBy" type="xs:string" use="optional" />
<xs:attribute name="TimeCreated" type="xs:dateTime" use="optional" />
<xs:attribute name="TimeLastModified" type="xs:dateTime" use="optional" />
<xs:attribute name="ParentWebId" type="Guid" />
<xs:attribute name="ParentListId" type="Guid" />
<xs:attribute name="ParentFolderId" type="Guid" use="optional" />
<xs:attribute name="ModerationStatus" type="SPModerationStatusType" use="optional" />
<xs:attribute name="ModerationComment" type="xs:string" use="optional" />
<xs:attribute name="ContentTypeId" type="xs:string" />
<xs:attribute name="ProgId" type="xs:string" use="optional" />
<xs:attribute name="Order" type="xs:float" use="optional" />
<xs:attribute name="ThreadIndex" type="xs:string" use="optional" />
<xs:attribute name="UserSolutionActivated" type="xs:boolean" use="optional" />
<xs:attribute name="DocType" type="ListItemDocType" default="File" />
<!-- UserInfo -->
<xs:attribute name="UserLoginName" type="xs:string" use="optional" />
<xs:attribute name="GroupName" type="xs:string" use="optional" />
<!-- Case where it fails at export time but too late to ignore -->
<xs:attribute name="FailureMessage" type="xs:string" use="optional" />
<xs:anyAttribute namespace="##any" processContents="skip" />
</xs:complexType>
<xs:complexType name="SPFieldLink">
<xs:attribute name="Name" type="xs:string" />
<xs:attribute name="ID" type="Guid" use="optional" />
<xs:attribute name="Customization" type="xs:string" use="optional" />
<xs:attribute name="Default" type="xs:string" use="optional" />
<xs:attribute name="ColName" type="xs:string" use="optional" />
<xs:attribute name="ColName2" type="xs:string" use="optional" />
<xs:attribute name="RowOrdinal" type="xs:int" use="optional" />
<xs:attribute name="RowOrdinal2" type="xs:int" use="optional" />
<xs:attribute name="Hidden" type="TRUEFALSE" use="optional" />
<xs:attribute name="Required" type="TRUEFALSE" use="optional" />
<xs:attribute name="Explicit" type="xs:string" use="optional" />
<xs:attribute name="ShowInNewForm" type="xs:string" use="optional" />
<xs:attribute name="ShowInEditForm" type="xs:string" use="optional" />
<xs:attribute name="DisplayName" type="xs:string" use="optional" />
<xs:attribute name="Node" type="xs:string" use="optional" />
<xs:anyAttribute namespace="##any" processContents="skip" />
</xs:complexType>
<xs:complexType name="SPXmlDocumentCollection">
<xs:sequence >
<xs:any minOccurs="0" maxOccurs="unbounded" namespace="##any" processContents="skip" />
</xs:sequence>
<xs:anyAttribute namespace="##any" processContents="skip" />
</xs:complexType>
<xs:complexType name="SPContentType">
<xs:sequence>
<xs:any minOccurs="0" maxOccurs="unbounded" namespace="##any" processContents="skip" />
</xs:sequence>
<xs:attribute name="ID" type="Guid" />
<xs:attribute name="Name" type="xs:string" />
<xs:attribute name="Scope" type="xs:string" />
<xs:attribute name="NextChildByte" type="xs:short" />
<xs:attribute name="ParentWebId" type="Guid" />
<xs:attribute name="ListId" type="Guid" use="optional" />
<xs:attribute name="Description" type="xs:string" use="optional" />
<xs:attribute name="Hidden" type="TRUEFALSE" use="optional" />
<xs:attribute name="ReadOnly" type="TRUEFALSE" use="optional" />
<xs:attribute name="Group" type="xs:string" use="optional" />
<xs:attribute name="PushDownChanges" type="xs:boolean" use="optional" />
<xs:attribute name="RequireClientRenderingOnNew" type="xs:string" use="optional" />
<xs:anyAttribute namespace="##any" processContents="skip" />
</xs:complexType>
<xs:complexType name="SPContentTypeRef">
<xs:sequence>
<xs:any minOccurs="0" maxOccurs="unbounded" namespace="##any" processContents="skip" />
</xs:sequence>
<xs:attribute name="ID" type="Guid" />
<xs:anyAttribute namespace="##any" processContents="skip" />
</xs:complexType>
<xs:complexType name="SPContentTypeFolder">
<xs:attribute name="TargetName" type="xs:string" />
<xs:anyAttribute namespace="##any" processContents="skip" />
</xs:complexType>
<xs:complexType name="SPContentTypeCollection">
<xs:sequence>
<xs:any minOccurs="0" maxOccurs="unbounded" namespace="##any" processContents="skip" />
</xs:sequence>
</xs:complexType>
<!--This defines that the XML can contain 0-N instances of the SPGenericObject element-->
<xs:element name="SPObjects" type="SPGenericObjectCollection"></xs:element>
</xs:schema>
<Comments>
<Comment Id="1" Text="SGVsbG8gd29ybGQgdmlkZW8gY29tbWVudCE=" ParentId="0" UserId="12" Created="2021-05-14T22:35:30.353Z" UIVersion="512" />
<Comment Id="2" Text="SGVsbG8gd29ybGQgdmlkZW8gcmVwbHku" ParentId="1" UserId="12" Created="2021-05-14T22:36:14.08Z" UIVersion="512" />
</Comments>
DeploymentRequirements.XSD
現在公開されている完全な 2013 パッケージ スキーマからの変更はありません。
DeploymentRootObjectMap.XSD
表 6: 制約のある DeploymentRootObjectMap.XSD
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema targetNamespace="urn:deployment-rootobjectmap-schema" elementFormDefault="qualified"
xmlns="urn:deployment-rootobjectmap-schema"
xmlns:mstns="urn:deployment-rootobjectmap-schema"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- Guid SimpleType definition -->
<xs:simpleType name="Guid">
<xs:restriction base="xs:string"></xs:restriction>
</xs:simpleType>
<xs:simpleType name="SPDeploymentObjectType">
<xs:restriction base="xs:string">
<xs:enumeration value="Folder" />
<xs:enumeration value="List" />
<xs:enumeration value="ListItem" />
<xs:enumeration value="File" />
</xs:restriction>
</xs:simpleType>
<xs:complexType name="SPRootObject">
<xs:attribute name="Id" type="Guid" />
<xs:attribute name="Type" type="SPDeploymentObjectType" />
<xs:attribute name="ParentId" type="Guid" />
<xs:attribute name="WebUrl" type="xs:string" />
<xs:attribute name="Url" type="xs:string" />
<xs:attribute name="IsDependency" type="xs:boolean" />
</xs:complexType>
<xs:complexType name="SPRootObjects">
<xs:sequence>
<xs:element name="RootObject" type="SPRootObject" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<xs:element name="RootObjects" type="SPRootObjects" />
</xs:schema>
DeploymentSystemData.XSD
現在公開されている完全な 2013 パッケージ スキーマからの変更はありません。
DeploymentUserGroupMap.XSD
現在公開されている完全な 2013 パッケージ スキーマからの変更はありません。
DeploymentViewFormsList.XSD
現在公開されている完全な 2013 パッケージ スキーマからの変更はありません。
サンプル: REST を使用して API を呼び出す
https://{site_url}/_api/site/CreateMigrationJobEncrypted
{
"options": {
"AES256CBCKey": "000000000000000000000000000000000000000000000000000000="
},
"gWebId": "00000000-0000-0000-0000-000000000000",
"azureContainerSourceUri": "https://<spam><spam>tenant.blob.core.windows.net:443/00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000<spam><spam>=rw",
"azureContainerManifestUri": "https://<spam><spam>tenant.blob.core.windows.net:443/00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000<spam><spam>=rw"
}
コンテナーの場合:
https://{site_url}/_api/site/ProvisionMigrationContainers
注:
中国の 21Vianet が運用する Office 365 のユーザーは 移行 APIを利用できません。 German Telekomのデータ トラスティを利用するドイツのクラウドを使う Office 365 のユーザーも利用できません。 ただし、ドイツのユーザーでも、そのデータがドイツのデータ センター以外の場所にある場合は、サポートされます。