API миграции SharePoint с созданием заданий импорта (CreationMigrationJob)SharePoint Import Migration API (CreationMigrationJob)

Представленное ниже описание API основано на опыте использования клиентской объектной модели SharePoint (CSOM).The following API description is based on using the SharePoint Client Side Object Model (CSOM). Мы рекомендуем использовать пакеты NuGet, когда вы ссылаетесь на CSOM в вашем решении.We recommend using NuGet packages when you reference CSOM in your solution.

Вы можете найти последнюю версию пакета CSOM в коллекции NuGet.You can find latest version of the CSOM package at the NuGet gallery. Используйте ИД Microsoft.SharePointOnline.CSOM.Use the ID Microsoft.SharePointOnline.CSOM.

Важно!

Ожидающее изменение. Для файлов, размер которых превышает 15 ГБ, должна создаваться требуемая контрольная сумма с помощью QuickXorHash.Pending change: Files larger than 15 GB must now create the required checksum using QuickXorHash. Пример приведен здесь.We have provided an example here.

Для файлов, размер которых меньше 2 ГБ, по-прежнему следует использовать метод MD5Hash, однако в дальнейшем это требование будет удалено.The previous method of MD5Hash is still required for files smaller than 2 GB; however this requirement will be removed at some point in the future.

МетодыMethods

CreateMigrationJobCreateMigrationJob

Этот метод создает новое задание импорта миграции и ставит его в очередь на обработку отдельным заданием таймера.This method creates a new migration import job and queues it up for later processing by a separate timer job. Для задания необходимо использовать пакет импорта правильного (стандартного) формата, расположенный в контейнерах хранилища BLOB-объектов Azure, указанных для этого метода.The job will consume a well formed (pre-defined format) import package that is located in the Azure Blob Storage Containers specified in this method. Соглашение об уровне обслуживания для обработки задания миграции контролируется через предварительно настроенную очередь и параметры регулирования рабочей загрузки. Гарантированное соглашение об уровне обслуживания и время возвращения для отправленного задания отсутствуют.The SLA for migration job processing is controlled through pre-configured queue and work load throttling settings, and there is no guaranteed SLA or return time for a submitted job.

СинтаксисSyntax

public Guid CreateMigrationJob(
    Guid gWebId,
    string azureContainerSourceUri,
    string azureContainerManifestUri,
    string azureQueueReportUri)

ПараметрыParameters

gWebIDgWebID

Уникальный идентификатор конечного веб-сайта, назначенного для импорта пакета.The unique identifier of the destination web targeted for the package import. Дополнительная информация и идентификаторы для импорта указаны непосредственно в самом пакете импорта.Additional information and identifiers for the import are specified within the import package itself. Этот идентификатор можно найти программным путем с помощью запроса целевого сайта и использования вызовов CSOM.This identifier can be found programmatically by querying the target web using CSOM calls.

azureContainerSourceUriazureContainerSourceUri

Допустимый URL-адрес, включая маркер SAS для доступа к контейнеру хранилища BLOB-объектов Azure, содержащему двоичные файлы блочного типа.The valid URL including SAS token for accessing the Azure Blob Storage Container that contains the binary files of type block. Маркер SAS должен быть создан с помощью исключительно разрешений чтения и списка, либо выполнение задания миграции завершится сбоем.The SAS token must have been created with only Read and List permissions or the migration job will fail. Маркер SAS должен иметь, как минимум, срок жизни, который начинается не позднее момента отправки задания и завершатся через достаточное количество времени после успешного завершения импорта.The SAS token should at least have a lifetime that starts no later than when the job was submitted, until a reasonable time for successful import to have concluded.

Необходимы следующие разрешения в API хранилища Azure:The required permissions are as follows in the Azure Storage API:

(SharedAccessBlobPermissions.Read | SharedAccessBlobPermissions.List)

Примечание: Изменения, позволяющие использования разрешения чтения и списка для маркера SAS, будут реализованы в будущей сборке.Note: The change to enforce Read and List permissions on the SAS token is coming in a future build. До этого момента они не будут применяться.Until then, it will not be enforced. Необходимо уточнить, что это лучший способ использования этих значений.However, it is a best practice to use these values.

Все файлы в контейнере должны иметь, по крайней мере, один моментальный снимок, применимый к ним, чтобы гарантировать, что во время импорта клиент не внесет никаких изменений в файл.All files in the container must have at least a single snapshot applied to them to ensure that no file modification is made by the customer during the import. Любой файл, не имеющий моментальный снимок, будет пропущен во время импорта с сообщением об ошибке, хотя будет выполнена попытка продолжения импорта.Any file that does not have a snapshot will be skipped during import and have an error thrown, although the job will attempt to continue the import. Канал импорта будет использовать последний моментальный снимок вашего файла, доступный на момент импорта.The import pipeline will use the latest snapshot of the file available at the time of import. Ниже приведен пример кода, который может использоваться для создания моментального снимка файла, после его добавления в хранилище BLOB-объектов Azure.The following is an example of the code that might be used to create a snapshot on a file after it is uploaded to Azure Blob Storage:

CloudBlockBlob blob = blobContainerObj.GetBlockBlobReference(file);
blob.UploadFromStream(stm);
blob.CreateSnapshot();

Примечание

Изменение с требованием наличия и использования последней версии моментальных снимков для всех файлов будет реализовано в будущей сборке, и в настоящее время игнорируется.The change to require and use the latest SnapShots on all files is coming in a future build, and until then will be ignored.

azureContainerManifestUriazureContainerManifestUri

Допустимый URL-адрес, включающий маркер SAS для доступа к контейнеру хранилища BLOB-объектов Azure, содержащему блочные BLOB-объекты для манифеста и другие файлы XML, описывающие пакет.The valid URL including SAS token for accessing the Azure Blob Storage Container that contains the block blobs for the manifest and other package describing XML files. Это расположение также будет использоваться для вывода журнала.This location will also be used for the log output. Нельзя использовать тот же контейнер, который используется для azureContainerSourceUri.This container cannot be the same as the one used for the azureContainerSourceUri. Маркер SAS должен быть создан только с разрешениями на чтение, запись и разрешениями списка, иначе выполнение задания миграции завершится сбоем.The SAS token must have been created with only Read, List, and Write permissions or the migration job will fail. Маркер SAS должен иметь, как минимум, срок жизни, который начинается не позднее момента отправки задания и завершатся через достаточное количество времени после успешного завершения импорта.The SAS token should at least have a lifetime that starts no later than when the job was submitted, until a reasonable time for successful import to have concluded.

Примечание

Изменение с требованием получения разрешений чтения, записи и списка для маркера SAS будет реализовано в будущей сборке, и до этого момента не будет приниматься во внимание, однако необходимо отметить, что это лучший способ использования данных значений.The change to enforce Read, List and Write permissions on the SAS token is coming in a future build, and until then will be not be enforced, however it is best practice to use these values. Если при использовании текущей сборки возникает проблема, попробуйте удалить разрешение списка в качестве временного решения, учитывая, что скоро это разрешение будет иметь обязательный характер.If an issue arises using a current build, try removing the List permission as a temporary workaround, noting that it will become required soon.

Все файлы в контейнере должны иметь, по крайней мере, один моментальный снимок, применимый к ним, чтобы гарантировать, что во время импорта клиент не внесет никаких изменений в файл.All files in the container must have at least a single snapshot applied to them to ensure that no file modification is made by the customer during the import. Любой файл, не имеющий моментальный снимок, будет вызывать сбои и ошибки во время импорта и потенциально может вызвать сбой задачи миграции в целом.Any file that does not have a snapshot will cause failures during the import and have errors thrown, potentially failing the entire migration job.

Примечание

Изменение с требованием наличия и использования последней версии моментальных снимков для всех файлов будет реализовано в будущей сборке.The change to require and use the latest SnapShots on all files is coming in a future build. До этого момента они будут игнорироваться.Until then they will be ignored.

azureQueueReportUriazureQueueReportUri

Допустимый URL-адрес, включая маркер SAS для доступа к пользователю, предоставляемый очередью Azure и используемый для возврата уведомлений о ходе выполнения задания миграции.The valid URL including SAS token for accessing the user provided Azure Queue used for returning notifications of migration job progress. Установите значение null, если во время импорта не будет использоваться очередь уведомления.This value can be null if no notification queue will be used during the import. Если это значение не равно нулю и в маркере SAS этого URI предоставлен надлежащий доступ, он будет использоваться для обновления состояния в реальном времени.If this value is not null and proper access is granted in the SAS token in this URI, it will be used for real-time status update. Маркер SAS должен быть создан только с разрешениями на добавление, чтение и обновление, иначе задание миграции не сможет добавлять события в очередь.The SAS token must have been created with only Add, Read, and Update permissions or the migration job will be unable to add events to the queue. Необходимы следующие разрешения в API хранилища Azure:The required permissions are as follows in the Azure Storage API:

(SharedAccessQueuePermissions.Add | SharedAccessQueuePermissions.Read | SharedAccessQueuePermissions.Update)

После получения согласия идентификатор задания будет записан в очередь уведомления, если она была предоставлена, а доступ действителен.Once accepted, the job ID will be written to the notification queue if it was provided and access is valid. Очередь уведомления можно использовать для нескольких заданий миграции одновременно, так как каждое задание будет идентифицировать себя с помощью значений, отправляемых очереди уведомления.The notification queue can be used for multiple migration jobs at the same time, as each job will identify itself in values sent back to the notification queue.

Ниже приведены примеры всех типов событий, регистрируемых в очереди отчетов Azure.The following are examples of all event types logged into the Azure reporting queue:

Событие: 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-44663834d510Event: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-354fefa5e9f6Event: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-4e52e90d3a68Event: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-1ebd39867434Event: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-37a900bec68dEvent: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-300001119ee3Event: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-4e52e90d3a68Event: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-4e52e90d3a68Event: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-48a62fc5ce75Event: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: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-48a62fc5ce75Event: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-48a62fc5ce75Event:FinishManifestFileUpload JobId:b427d8d7-2b91-4da0-aee5-4b5a5a5d867e Time:02/05/2019 06:56:09.732 ManifestFileName:Filename CorrelationId:d8e9bc9e-20e2-8000-aa83-48a62fc5ce75

Возвращаемые значенияReturn values

Уникальный идентификатор для задания миграции возвращается, если задание было успешно поставлено в очередь, а в случае неудачи возвращается значение null.The unique identifier for the migration job is returned if the job is successfully queued, or if unsuccessful, a null value will be returned. Уникальный идентификатор задания миграции можно использовать для отправки запроса состояния задания миграции, чтоб выяснить, находится ли оно в очереди или уже было обработано, с помощью метода GetMigrationJobStatus.The migration job unique identifier can be used to query the migration job status while it is in the queue or being processed by using the GetMigrationJobStatus method.

Пример:Example:

Guid MigrationJobId = TargetSite.CreateMigrationJob(
  TargetWebId,
  azureContainerSourceUri,
  azureContainerManifestUri,
  azureQueueReportUri);

GetMigrationJobStatusGetMigrationJobStatus

Этот метод запрашивает сведения о статусе в очереди для указанного задания миграции.This method queries the queue status for the specified migration job. Эта необязательная проверка выполняется после вызова метода CreateMigrationJob.It is an optional check after calling the CreateMigrationJob method. После завершения выполнения задания миграции, оно больше не будет отображаться в очереди, а очередь уведомления и/или вывод журнала необходимо проверить для получения подробной информации о статусе.Once the migration job has completed, it will no longer show up in the queue and the notification queue and/or log output should be checked for detailed status.

СинтаксисSyntax

[ClientNS.ClientCallableMethod]
public SPMigrationJobState GetMigrationJobStatus(Guid MigrationJobId)

ПараметрыParameters

ИдентификаторID

Уникальный идентификатор задания миграции, возвращаемый методом CreateMigrationJob.The unique identifier of the migration job returned from CreateMigrationJob method.

Возвращаемые значенияReturn values

Статус задания миграции возвращается с помощью объекта SPMigrationJobState, если задание находится в очереди.The migration job status is returned using a SPMigrationJobState object if the job is found in the queue. Если не удалось завершить выполнение задания, будет возвращено значение "Нет" (0).If unsuccessful, a value of none (0) will be returned.

ПримерExample

SPMigrationJobState CurrentJobState = TargetSite.GetMigrationJobStatus(MigrationJobId);

ПеречисленияEnumerations

SPMigrationJobStateSPMigrationJobState

SPMigrationJobState является перечислением, которое отслеживает возможные основных состояния в очереди импорта.SPMigrationJobState is an enumeration that tracks possible major states in the import queue.

"Участники"Members

Имя элементаMember name ОписаниеDescription
НетNone Задание миграции в настоящее время неизвестно очереди, либо в результате его завершения и удаления, либо из-за недопустимого идентификатора задания.Migration job is currently unknown to the queue, either through completion and removal, or invalid job identifier. Значение=0.Value=0.
В очередиQueued Задание миграции в настоящее время находится в очереди и не обрабатывается.Migration job is currently known by the queue and not being processed. Значение=2.Value=2.
ОбработкаProcessing Задание миграции в настоящее время находится в очереди и не активно обрабатывается.Migration job is currently known by the queue and is being actively processed. Значение=4.Value=4.

Структура пакета импортаImport Package Structure

Структура пакета основана на ограниченной версии схемы пакета развертывания контента.Package structure is based on a constrained version of the Content Deployment package schema. С документацией для исходной полной схемы можно ознакомиться на docs.microsoft.com.Documentation for the original full schema can be found at docs.microsoft.com. До момента публикации на docs.microsoft.com описание ограниченной структуры можно найти в приложении данного документа.Until published on docs.microsoft.com, the constrained structure can be found in this document in the appendix.

Файл XMLXML file Файл схемыSchema File ОписаниеDescription
ExportSettings.xmlExportSettings.xml Схема DeploymentExportSettingsDeploymentExportSettings Schema Выполняет проверку файла ExportSettings.XML, экспортированного в пакет миграции контента.Provides validation for the ExportSettings.XML file exported into the content migration package. ExportSettings.XML выполняет следующие функции:ExportSettings.XML does as follows:
- Содержит настройки экспорта, заданные с помощью класса SPExportSettings и других классов, которые являются частью объектной модели миграции контента.- Contains the export settings specified by using the SPExportSettings class and other classes that are part of the content migration object model.
- Гарантирует, что во время последующего процесса импорта (на целевом сайте миграции) будут применяться директивы, заданные в параметрах экспорта.- Ensures that the subsequent import process (at the migration target site) enforces the directives specified in the export settings.
- Поддерживает каталог всех объектов, экспортируемых в пакет миграции.- Maintains a catalog of all objects exported to the migration package.
LookupListMap.xmlLookupListMap.xml Схема DeploymentLookupListMapDeploymentLookupListMap Schema Выполняет проверку файла LookupListMap.XML, экспортированного в пакет миграции контента. LookupListMap.XML ведет простой список подстановки, который содержит ссылки на элемент (от элемента списка к элементу списка) списка SharePoint.Provides validation for the LookupListMap.XML file exported into the content migration package. LookupListMap.XML maintains a simple lookup list that records SharePoint list item (list item to list item) references.
Manifest.xmlManifest.xml Схема DeploymentManifestDeploymentManifest Schema Обеспечивает проверку файла Manifest.xml, который экспортируется в пакет миграции контента.Provides validation for the Manifest.xml file that is exported into the content migration package. Предоставляет комплексный манифест, содержащий списки как контента, так и структуры исходного сайта.Provides a comprehensive manifest containing listings of both the contents and the structure of the source site. Операция переноса использует файл манифеста для воссоздания исходного сайта и его компонентов, когда он импортируется в конечный сайт.The migration operation uses the manifest file to reconstitute the source site and its components when it is imported to the destination site.
Requirements.xmlRequirements.xml Схема DeploymentRequirementsDeploymentRequirements Schema Выполняет проверку файла Requirements.xml, экспортированного в пакет миграции контента.Provides validation for the Requirements.xml file exported into the content migration package. Файл Requirements.xml содержит список требований развертывания в форме требований установки в конечном местоположении переноса, например определений функций, версий шаблонов, сборок веб-частей, языковых пакетов и т. д.Requirements.xml maintains list of deployment requirements in the form of installation requirements on the migration target, such as feature definitions, template versions, Web Part assemblies, language packs, and so forth.
RootObjectMap.xmlRootObjectMap.xml DeploymentRootObjectMap SchemaDeploymentRootObjectMap Schema Выполняет проверку файла RootObjectMap.xml, экспортированного в пакет миграции контента. RootObjectMap.xml ведет список сопоставлений вспомогательных (зависимых) объектов, который на важном этапе операции миграции позволяет правильно поместить зависимые объекты относительно расположений для сопоставлений корневого объекта.Provides validation for the RootObjectMap.xml file exported into the content migration package.RootObjectMap.xml maintains a list of mappings of secondary (dependent) objects, which allows the import phase of the migration operation to correctly place the dependent objects relative to the locations of the root object mappings.
SystemData.xmlSystemData.xml Схема DeploymentSystemDataDeploymentSystemData Schema Выполняет проверку файла SystemData.xml, экспортированного в пакет миграции контента. SystemData.xml выполняет следующие функции: собирает разнообразные системные данные низкого уровня.Provides validation for the SystemData.xml file exported into the content migration package.SystemData.xml does the as follows: Collects various low-level system data. Записывает число и имена файлов Manifest.xml (если для миграции используется несколько манифестов).Records the number and names of Manifest.xml files (in cases where the migration uses multiple manifests).
UserGroupMap.XMLUserGroupMap.xml Схема DeploymentUserGroupMapDeploymentUserGroupMap Schema Выполняет проверку файла UserGroup.xml, экспортированного в пакет миграции контента. UserGroup.xml ведет список пользователей и групп безопасности пользователей, имеющий отношение к безопасности доступа и разрешениям.Provides validation for the UserGroup.xml file exported into the content migration package. UserGroup.xml maintains a list of users and user security groups with respect to access security and permissions.
ViewFormsList.XMLViewFormsList.xml Схема DeploymentViewFormsListDeploymentViewFormsList Schema Выполняет проверку файла ViewFormsList.xml, экспортированного в пакет миграции контента. ViewFormsList.xml ведет список веб-частей и отслеживает, являются ли они представлением или формой.Provides validation for the ViewFormsList.xml file exported into the content migration package.ViewFormsList.xml maintains a list of Web Parts and tracks whether each is a view or form.

Структура контентаContent structure

Содержимое файла, связанное с манифестом структуры пакета, должно храниться в плоской или иерархической структуре в контейнере хранилища BLOB-объектов Azure, определяемой параметром azureContainerSourceUri в CreateMigrationJob.File content that is referenced within the manifest of the package structure must be stored in either a flat or hierarchical structure within the Azure Blob Store Container defined by the CreateMigrationJob’s azureContainerSourceUri parameter. Например, пакеты импорта, генерируемые с помощью старой версии экспорта, не будут иметь иерархическую структуру, а будут содержать все файлы, хранящиеся на корневом уровне, с шаблоном ########.dat, где # — это шестнадцатеричные символы, начиная с 0, а в пакете нет файлов с повторяющимися именами.For example, import packages generated from a legacy version export will not be hierarchical, and will instead have all files stored at the root level with a pattern like ########.dat where the # symbols are hexadecimal characters starting at 0 and no file names are repeated within a package. Кроме того, пакет, генерируемый из файлового ресурса, может иметь иерархию папки источника и имена файлов, которые сохраняются согласно той же самой иерархии.Alternately, a package generated from a file share can have the source folder hierarchy and file names preserved in the same hierarchy.

Основное требование для структуры состоит в том, что ссылки FileValue в файле Manifest.XML должны содержать точное имя и физическую иерархию, согласно которой содержимое находится в хранилище BLOB-объектов Azure для импорта.The main requirement for the structure is that the FileValue references in the Manifest.XML file must refer to the exact name and physical hierarchy that the content is stored in within the Azure Blob Store location for import. Целевые имена файлов и иерархия папок из операции импорта напрямую не связаны с физическим наименованием и иерархией и вместо этого определяются с помощью файла Manifest.XML.The destination file names and folder hierarchy from the import operation are not directly related to the physical naming and hierarchy and are instead defined through the Manifest.XML file.

ExportSettings.xmlExportSettings.XML

Файл ExportSettings.XML должен находиться в корневой папке хранилища BLOB-объектов Azure и определяется с помощью параметра azureContainerManifestUri в CreateMigrationJob.The ExportSettings.XML file is expected to be at the root of the Azure Blob Store Container defined by the CreateMigrationJob’s azureContainerManifestUri parameter. Этот обязательный файл проверяется с помощью ограниченной версии DeploymentExportSettings.XSD, содержащей некоторые ограниченные отличия от опубликованной полной схемы пакета от 2013 г..This required file is validated using the constrained DeploymentExportSettings.XSD, which has some limited changes from current published full 2013 package schema.

Основное требование состоит в том, что значение ExportSettings SiteUrl должно содержать URL-адрес, соответствующий исходному URL-адресу, используемому для всего остального пакета импорта.The main requirement is that the ExportSettings SiteUrl value must be populated with a URL consistent with the source URL used for the rest of the import package. Если файловые ресурсы используются в качестве источника, необходимо предварительно указать, что URL-адрес будет использоваться в качестве исходного URL-адреса для всего пакета, тогда как пакет, создаваемый в ходе операции экспорта на исходном сайте может представлять собой оригинальный исходный URL-адрес коллекции сайта.In the case of file shares as a source, the URL would be pre-specified to be the source URL in the rest of the package, whereas a package generated through an export operation at a source site would be its original source site collection URL.

LookupListMap.xmlLookupListMap.XML

Файл LookupListMap.XML, при его наличии, должен находиться в корневой папке хранилища BLOB-объектов Azure и определяется с помощью параметра azureContainerManifestUri в CreateMigrationJob.The LookupListMap.XML file, if included, is expected to be at the root of the Azure Blob Store Container defined by the CreateMigrationJob’s azureContainerManifestUri parameter. Этот необязательный файл проверяется с помощью ограниченной версии DeploymentLookupListMap.XSD, которая не имеет отличий от опубликованной полной схемы пакета от 2013 г..This optional file is validated using the constrained DeploymentLookupListMap.XSD, which has no change from current published full 2013 package schema.

Так как пакет импорта для канала не включает определяющие поля и представления для списка или библиотеки документов, файл LookupListMap.XML, как правило, не будет содержать дочерних узлов в корневом разделе и, соответственно, может также исключаться из пакета, если нет четких требований, хотя в этом случае может фиксироваться предупреждение.Since an import package for the pipeline does not include defining fields or views on a list or document library, the LookupListMap.XML file will normally include no child nodes under the root and as such can also be excluded from the package if not required, although a warning may be logged in this case.

Manifest.XMLManifest.XML

Все экземпляры файла Manifest.XML для пакета должны находиться в корневой папке хранилища BLOB-объектов Azure и определяется с помощью параметра azureContainerManifestUri в CreateMigrationJob.All instances of the Manifest.XML file for a package are expected to be at the root of the Azure Blob Store Container defined by the CreateMigrationJob’s azureContainerManifestUri parameter. Этот обязательный файл проверяется с помощью ограниченной версии DeploymentManifest.XSD, содержащей большое количество важных отличий и заметно меньшее количество типов в отличие от опубликованной полной схемы пакета от 2013 г..This required file is validated using the constrained DeploymentManifest.XSD, which has multiple major changes and significant reduction in types from current published full 2013 package schema.

Manifest.XML — это основное средство описания для метаданных в составе пакета, он содержит иерархию списка/папки/элемента, а также метаданные для элементов, включая обратные ссылки для пользователей и групп, определенных в файле UserGroupMap.XML.The Manifest.XML is the primary descriptor for metadata within the package, and provides the list/folder/item hierarchy, along with metadata for the items including references back to users and groups defined in the UserGroupMap.XML file. Может быть несколько файлов Manifest.XML (которые можно определить с помощью разных имен файлов для уникальной идентификации), а всех их можно найти в канале импорта через ссылки в записях ManifestFile файла SystemData.XML.There may be more than one Manifest.XML file (which can be identified using different file names to uniquely identify them), and all are found by the import pipeline through references within the SystemData.XML file’s ManifestFile entries.

Одним из основных требований к Manifest.XML для успешного импорта через канал является соответствие идентификатора веб-сайта и идентификатора библиотеки документов/идентификатора списка месту назначения.The main requirements for Manifest.XML to successfully import through the pipeline are for the Web ID and Document Library ID/List ID be consistent with the target location. Если используемый идентификатор Web не соответствует целевой папке, будут возникать ошибки, так как невозможно будет найти родительский веб-сайт для операции импорта.If a Web ID is used which doesn’t match the target location, errors will occur because the parent web for the import operation cannot be found.

Аналогичным образом, неправильный идентификатор библиотеки документов/идентификатор списка может помешать импорту в целевую библиотеку документов или список.Likewise, an incorrect Document Library ID/List ID will prevent the importation into the target Document Library or List. Не используйте идентификаторы повторно в том же семействе веб-сайтов: те же пакеты не должны импортироваться в одно целевое семейство веб-сайтов, независимо от конечного веб-сайта.Never reuse IDs within the same site collection, so same packages should not be imported to the same target site collection regardless of the destination web.

Для отдельных файлов и папок в библиотеке документов или списке идентификаторы должны быть согласованы между событиями импорта в одной папке.For individual files and folders within the document library or list, their identifiers should be consistent between import events to the same location. Импорт пакета, сгенерированного из файлового ресурса, изначально потребует создания новых идентификаторов GUID для каждого файла и папки, а также соответствующие идентификаторы GUID для элементов списка, которые их представляют.An import of a package generated from a file share would initially require generating new GUIDs for each file and folder, along with matching GUIDs for the list items that represent them. Таким образом, при выполнении второго импорта с той же целью при использовании того же пакета будут сохраняться те же идентификаторы, однако выполнение второго импорта с той же целью при использовании нового пакета для того же содержимого может привести к конфликтам идентификатора и ошибкам импорта для всех конфликтующих элементов.Therefore, performing a second import against the same target using the same package would keep the same IDs, but performing a second import against the same target using a new package for the same content would result in ID conflicts and import errors for all items in conflict.

Пакет, первоначально созданный из файлового ресурса, представляет собой форму записи для исходных созданных идентификаторов и потенциально может использоваться в качестве ссылки для последующей генерации пакета, что позволит избежать непреднамеренных конфликтов идентификаторов, а также разрешить использование подобных идентификаторов для обеспечения корректной перезаписи, удаления или перемещения действий.The package generated initially from a file share is effectively a form of record for the original generated IDs and can potentially be used as a reference for follow up package generation to prevent ID collisions when unintended, and to allow like IDs to ensure correct overwrite, deletion, or move activities.

Requirements.XMLRequirements.XML

Файл Requirements.XML должен находиться в корневой папке хранилища BLOB-объектов Azure и определяется с помощью параметра azureContainerManifestUri в CreateMigrationJob.The Requirements.XML file is expected to be at the root of the Azure Blob Store Container defined by the CreateMigrationJob’s azureContainerManifestUri parameter. Этот необязательный файл проверяется с помощью ограниченной версии DeploymentRequirements.XSD, которая не имеет отличий от опубликованной полной схемы пакета от 2013 г..This optional file is validated using the constrained DeploymentRequirements.XSD, which has no change from current published full 2013 package schema.

Файловые ресурсы, как правило, не включают дочерние узлы в корневом разделе, и, соответственно, могут быть также исключены из пакета, если не требуются, хотя в этом случае будет зафиксировано предупреждение.For file shares, this is expected to normally include no child nodes under the root and as such can also be excluded from the package if not required, although a warning will be logged in this case.

RootObjectMap.XMLRootObjectMap.XML

Файл RootObjectMap.XML должен находиться в корневой папке хранилища BLOB-объектов Azure и определяется с помощью параметра azureContainerManifestUri в CreateMigrationJob.The RootObjectMap.XML file is expected to be at the root of the Azure Blob Store Container defined by the CreateMigrationJob’s azureContainerManifestUri parameter. Этот обязательный файл проверяется с помощью ограниченной версии DeploymentRootObjectMap.XSD, содержащей некоторые ограниченные отличия от опубликованной полной схемы пакета от 2013 г..This required file is validated using the constrained DeploymentRootObjectMap.XSD, which has some limited changes from current published full 2013 package schema. Чаще всего RootObject будет включаться как отдельный объект типа Список.The most common RootObject that will be included will be a single object of type List. Идентификатор для этого элемента должен представлять собой идентификатор целевого списка, а ParentWebID должен соответствовать идентификатору родительского целевого веб-сайта, содержащего данный список, для успешного выполнения миграции.The ID for this item should be the List ID for the target list, and the ParentWebID should match the ID of the parent target web containing this list in order for migration to be successful. Значения идентификатора, WebUrl и URL-адреса этого объекта также должны соответствовать связанной структуре, описанной в файле Manifest.XML.The ID, WebUrl, and Url values of this object must also match the related structure laid out in the Manifest.XML file.

SystemData.XMLSystemData.XML

Файл SystemData.XML должен находиться в корне хранилища BLOB-объектов Azure и определяется с помощью параметра azureContainerManifestUri в CreateMigrationJob.The SystemData.XML file is expected to be at the root of the Azure Blob Store Container defined by the CreateMigrationJob’s azureContainerManifestUri parameter. Этот обязательный файл проверяется с помощью ограниченной версии DeploymentSystemData.XSD, которая не имеет отличий от опубликованной полной схемы пакета от 2013 г..This required file is validated using the constrained DeploymentSystemData.XSD, which has no change from current published full 2013 package schema.

Информация о SchemaVersion должна ссылаться на текущую версию сборки и базы данных для целевой фермы (15.0.0.0), а значение SiteVersion должно всегда соответствовать целевому семейству веб-сайтов UIVersion (чаще всего "15").The SchemaVersion information is expected to reference the current Build and DatabaseVersion of the target farm, a Version of “15.0.0.0”, and the SiteVersion value is expected to always match the target site collection UIVersion (that is, most commonly this will be “15”). Каждый файл Manifest.XML для пакета должен отображаться в этом файле в записях ManifestFile.Each Manifest.XML file for the package is expected to be listed in this file within the ManifestFile entries.

SystemObjects, определяющий зависимые объекты, которые должны оставаться неизменяемыми кодом миграции, также должен быть указан здесь, чтобы гарантировать правильное поведение при операции импорта.The SystemObjects that define dependent objects that should remain immutable by the migration code should also be listed here to ensure correct behavior of the import operation. Ниже приведен пример стандартных объектов в файле SystemObjects.XML из файлового ресурса на основе импорта, обратите внимание, что идентификаторы для каждого пакета должны отличаться, а URL-адреса могут отличаться.The following is an example of the common objects in the SystemObjects.XML file from a file share based import, noting that the IDs are expected to be different for each package, and the URLs may be different.

Таблица 1: Файл Example SystemData.XMLTable 1: Example SystemData.XML file

<?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.XMLUserGroupMap.XML

Файл UserGroupMap.XML должен находиться в корневой папке хранилища BLOB-объектов Azure, определенным с помощью параметра azureContainerManifestUri в CreateMigrationJob.The UserGroupMap.XML file is expected to be at the root of the Azure Blob Store Container defined by the CreateMigrationJob’s azureContainerManifestUri parameter. Этот обязательный файл проверяется с помощью ограниченной версии DeploymentUserGroupMap.XSD, которая не имеет отличий от опубликованной полной схемы пакета от 2013 г.This required file is validated using the constrained DeploymentUserGroupMap.XSD, which has no change from current published full 2013 package schema.

Файл UserGroupMap.XML может не содержать какие-либо записи Пользователь или Группа, но включение подобных записей позволит предотвратить заполнение данных авторизации или безопасности во время импорта и регистрации предупреждений.The UserGroupMap.XML file may not contain any User or Group entries but doing so will prevent author or security information from being populated during import and warnings will be logged in this case. Значения имени пользователя и идентификатора безопасности (SID) для пользователей должны быть либо изменены в соответствии со значениями в SharePoint Online, либо, если аккаунт больше не существует, могут быть указаны как IsDeleted = “true” для предотвращения сбоев подстановки и дополнительного замедления операции импорта.Login and SID values for users must be either adjusted to match the values in SharePoint Online, or if the account no longer should exist can be listed as IsDeleted = “true” to prevent lookup failures and additional slowdown during the import operation.

ViewFormsList.XMLViewFormsList.XML

Файл ViewForms.XML должен находиться в корневой папке хранилища BLOB-объектов Azure и определяется с помощью параметра azureContainerManifestUri в CreateMigrationJob.The ViewForms.XML file, if included, is expected to be at the root of the Azure Blob Store Container defined by the CreateMigrationJob’s azureContainerManifestUri parameter. Этот необязательный файл проверяется с помощью ограниченной версии DeploymentViewFormsList.XSD, которая не имеет отличий от опубликованной полной схемы пакета от 2013 г.This optional file is validated using the constrained DeploymentViewFormsList.XSD, which has no change from current published full 2013 package schema.

Так как пакет импорта для канала не включает определяющие поля и представления для списка или библиотеки документов, файл ViewFormsList.XML, как правило, не будет содержать дочерних узлов в корневом разделе и, соответственно, может также исключаться из пакета, если нет четких требований, хотя в этом случае может фиксироваться предупреждение.Since an import package for the pipeline does not include defining fields or views on a list or document library, the ViewFormsList.XML file will normally include no child nodes under the root and as such can also be excluded from the package if not required, although a warning may be logged in this case.

Ведение журналаLogging

Журналы, создаваемые каналом импорта, должны без проблем подвергаться машинному анализу для определения времени и места возникновения сбоя, включая ошибки и предупреждения, и будут сообщать клиенту или независимым поставщикам программного обеспечения (ISV), где и почему появился сбой.The logs that the import pipeline creates must be easily parsed by machine with a goal of being able to pinpoint when and where failures occur, including errors and warnings, and will tell the consumer or the ISV where and why the failure occurred.

После завершения, эти журналы будут скопированы в azureContainerManifestUri, когда маркер SAS, указанный в URI, дает права на запись.Upon completion, these logs will be copied to the azureContainerManifestUri location as the SAS token specified in the URI allows write access. Те же журналы выходных данных также помещаются в расположении “_catalogs/Maintenance Logs” целевого семейства веб-сайтов в виде текстового файла.The same output logs are also placed at the “_catalogs/Maintenance Logs” location of the target site collection as a text file. Журналы будут копироваться в заданные расположения только после завершения изменений и удаления из очереди.The logs will only be copied to the destination locations once the job has finished and removed from the queue.

Могут использоваться различные типы журналов, например журнал полного импорта, а также файлы с предупреждениями и ошибками, которые содержат только подмножество предупреждений или ошибок импорта соответственно.Several log types can be included such as the full import log, along with warning and error files that contain only the subset of import warnings or errors respectively. Файлы журнала имеют уникальные метки datetime и job id, которые позволяют создавать для каждой попытки события импорта уникальный журнал для удобства отладки.Log files have unique datetime and job id stamps to allow each attempted import event to have a unique log for better debugging purposes.

Изменения для тех, кто использует опцию "Отправка диска"Changes for those using the "Ship Disk" option

Чтобы использовать API миграции, необходимо иметь контейнер для временного хранилища в Azure.To use the Migration API, you must have a temporary storage container in Azure. При отправке файлов во временное хранилище требуется наличие контрольной суммы в качестве свойства для каждого файла.When uploading files into the temporary storage, a checksum is required as a property on every file. Для файлов, размер которых превышает 15 ГБ, используется QuickXorHash (см. пример ниже).For files larger than 15GB, this is done using QuickXorHash (see example below). Для файлов, размер которых не превышает 2 ГБ, требуется наличие MD5 в качестве свойства для каждого файла.For files 2 GB or smaller, MD5 is required as a property on every file.

Тем не менее, при отправке данных на жесткие диски это свойство не назначается автоматически.However, when shipping the data on hard drives this property doesn’t get assigned automatically. В качестве временного решения мы адаптировали API миграции, чтобы разрешить передачу контрольной суммы для каждого файла в рамках манифеста.As a work around, we have adapted the Migration API to allow the checksum to be passed for every file as part of the manifest. Это также относится к значениям IV при шифровании данных.This also applies for IV values when encrypting the data.

Так как MD5 создается в источнике, а не в момент отправки в Azure, Майкрософт может подтвердить целостность файла непосредственно с помощью MD5 источника.Since the MD5 is generated at the source instead of at the upload time in Azure, Microsoft can confirm the integrity of the file directly against the source MD5.

Что хранится в данных контейнерах больших двоичных объектов (BLOB-объектов) Azure?What is stored in those Azure Blob Containers?

API миграции требуется контейнер Azure для передачи контента, а также для ведения журнала и отслеживания очереди. The Migration API requires the Azure Container for content passing and also for log and queue reporting. Его можно разделить в форме сводок следующим образом:It can be split down as a summary as follows:

КонтентContent МанифестManifest
Файлы и папкиFiles and folders XML-файлыXML files

В файле manifest.xml существует два новых необязательных параметра:There are two new optional parameters in manifest.xml:

  • QuickXorHashQuickXorHash
  • MD5HashMD5Hash
  • InitializationVectorInitializationVector

Подготовка пакетаPreparing the package

Метод вызова задания миграции не изменяется; достаточно изменить порядок создания пакета.The method for calling the migration job doesn’t change; only the package generation needs to be changed.

В контейнере манифеста один файл называется Manifest.xml.In the Manifest container one file is named Manifest.xml. Существует 2 необязательных атрибута, которые добавляются к узлу файла: QuickXorHash, MD5Hash* и InitializationVector.There are two optional attributes added to the file node: QuickXorHash, MD5Hash* and InitializationVector.

Пример для файлов, размер которых превышает 15 ГБ:Example for files over 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" MD5Hash="qVBFIb8MJLzT5INrE4XcDQ==" 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 ГБ:Example for files under 2 GB:

<File … MD5Hash="CXPP/MWYxY87NjjnLZrFg==" InitializationVector="4WlC5zQK0r9s39LoB2w==" />

Советы, рекомендации и особые упоминанияBest Practices and Special Mentions

Размер пакетаPackage size

Даже если API поддерживает файлы размером 15 ГБ, мы рекомендуем использовать пакет размером до 250 МБ или до 250 элементов (в зависимости от того, какой уровень будет достигнут ранее).Even if the API support 15 GB files, we recommend package sizes of up to 250 MB OR 250 items (depending which one comes first). Если у вас есть файл, размер которого превышает рекомендуемый, его следует отправить в отдельном пакете.If you have a file larger than that recommended size limit, then you should send it in its own package. То же самое относится и к версиям; для каждой версии учитывается ограничение размера и количества элементов.The same applies to versions; each version counts against the size limit and item count. Кроме того, все версии файла должны содержаться в одном пакете.Additionally, all the versions of a file should be in the same package.

Размер файлаFile size

В настоящее время канал импорта поддерживает отдельные файлы размером до 15 ГБ.Currently, the import pipeline supports individual files of 15 GB maximum size.

Поддерживаются только несжатые пакеты.Only uncompressed packages are supported

Канал импорта не поддерживает сжатые пакеты.The import pipeline does not support compressed packages. Содержимое файла должно храниться в отдельном от файла манифеста и описательных XML-файлов контейнере хранилища Azure.The file content must be stored in a different Azure Storage container from the manifest and related descriptive XML files. Это позволяет избежать использования дополнительного времени на обработку на обоих концах процесса миграции (сжатие и распаковка), а также облегчает создание и изменение пакета.This is to prevent the overhead of processing time on both ends of the migration (to compress and decompress), and to ease package creation and modification. Сжатие отдельных файлов, например, в форме zip-архивов, поддерживается, так как они описываются в пакете импорта как архив, а не содержимое.Compression of individual files such as into zip archives is supported as long as they are referenced in the import package as the archive itself, not the contents.

API поддерживает импорт разных версий файлаAPI supports import of multiple file versions

Пакеты импорта могут иметь ссылки на несколько версий файла, основных и дополнительных, в соответствии с обычными ограничениями, настроенными в SharePoint.Import packages can have references to multiple versions of a file, major and minor, up to regular limits imposed within SharePoint. Очень важно, чтобы каждая версия данного файла была включена в пакет, даже если некоторые из версий уже содержатся в SPO.It is important that each version of that file be included in the package even if some of the versions already exist in SPO.

API поддерживает сохранение идентификаторовAPI supports preservation of identifiers

Идентификаторы, явным образом описанные в пакете импорта, используются во время импорта для идентификации содержимого.The identifiers used within the import package explicitly are used during import to identify content. Это позволяет сохранить существующие идентификаторы для содержимого библиотеки из исходной среды.This allows preservation of existing identifiers for document library contents from a source environment. Тем не менее, это также связано с определенными сложностями во время создания пакета импорта или его преобразования, так как для этого требуется, чтобы пакет явным образом ссылался на идентификаторы целевого веб-сайта и списка идентификаторов.However, it also imposes a complexity during import package creation or transformation that mandates that the package explicitly reference the target web and list identifiers. Идентификаторы типа контента, GUID элемента файла/папки и цельночисловые идентификаторы элемента списка сохраняются во время импорта.Content type identifiers, file/folder item GUIDs, and list item integer identifiers are all preserved during import. Если для пакета указаны неправильные идентификаторы, импорт завершится сбоем.If incorrect identifiers are specified in the package, import will fail.

Кроме того из-за сохранения идентификатора события импорта потенциально могут выполняться в виде последовательных итераций, использующих различные пакеты, что потенциально позволяет элементам менять расположение, если их идентификаторы не были изменены.Additionally, due to identifier preservation, import events can potentially be done in successive iterations using different packages, allowing items to potentially move in location if their identifiers have not changed.

Это перезапись APIThis is an overwrite API

Канал импорта поддерживает импорт данных о версиях для файлов и метаданных элемента списка, но в настоящий момент если вы отправите файл, а затем повторно отправите тот же файл с изменениями, в ходе процесса импорта будут удалены и заменены исходный файл и все его версии на файлы, включенные в текущий пакет, который был импортирован.The import pipeline does support import of versioning data on files and list item metadata, but as of now if you submit a file and then resubmit the same file with changes the import process will delete and replace the original and all versions with the ones included in the ones in the current package being imported.

Мы не поддерживаем сценарий «Активный-активный»We do not support Active-Active scenario

Это означает, что ожидается, что целевой сайт останется неактивным для пользователей до завершения миграции.This means we expect that the target site will remain non-active for users until the migration is over. Источник может поддерживаться в состоянии «чтение-запись» до события окончания миграции для уменьшения времени простоя для конечных пользователей, но после завершения следует реализовать переключение, чтобы пользователи смогли начать использование новых мест назначения SPO или прекратить использование предыдущего репозитория.The source may be kept in a read write state until the final migration event, as a method of reducing downtime for end users, but once the migration is complete there should be a switch for the users to start using their new SPO destinations and stop using the previous repository.

Разрешения в AzurePermissions in Azure

Чтобы обеспечить неизменность больших двоичных объектов из источника, канал импорта будет принимать ключ SAS только с набором флажков прав доступа для чтения и списка для контейнера файлов.To ensure immutability of source blobs, the import pipeline will accept a SAS key with only the Read and List access flags set for the File container. Подобным образом канал импорта требует ключ SAS с правами доступа на чтение, запись и к списку для контейнера манифеста, чтобы мы могли выполнить обратную запись файлов журнала в конце операции импорта.Likewise, the import pipeline requires a SAS key with Read, List, and Write access for the Manifest container so that we can write back log files at the end of the import operation. Если эти условия не выполняются, канал отклонит его во время создания задания.If these criteria are not met, the pipeline will reject it during job creation.

Все файлы в Azure должны иметь моментальный снимок, предназначенный для обеспечения успешного импортаAll files in Azure must have snapshot created to import successfully

Чтобы предотвратить непреднамеренное изменение файла для больших двоичных объектов источника, канал импорта будет импортировать только файлы, у которых есть моментальный снимок, созданный для них в Azure.To prevent unintended file modification of the source blobs, the import pipeline will only import files if they have a snapshot created for them within Azure. В обратном случае канал импорта будет пропускать файлы в данном состоянии и отображать ошибки.If they do not, then the import pipeline will skip the files in this state and throw errors. Канал импорта будет использовать последний моментальный снимок вашего файла, доступный на момент импорта.The import pipeline will use the latest snapshot of the file available at the time of import.

Безопасность и шифрованиеSecurity and encryption

Канал импорта использует модель безопасности хранилища BLOB-объектов Azure без изменений.The import pipeline is using Azure Blob Storage security model as is. Это означает, что мы не будем выполнять специальную обработку данных контейнеров Azure, которые отличаются от других контейнеров Azure.This means we will not do any special treatment for those Azure containers that would differentiate from any other Azure containers. Кроме того, канал импорта в настоящее время не принимает ключи шифрования для содержимого клиента.Additionally, the import pipeline currently does not accept encryption keys for content from the customer. Любое зашифрованное содержимое будет считаться непрозрачными файлами, которые SharePoint может включать в список, но они будут недоступны для индексирования, так же как если бы это были зашифрованные файлы, загруженные через пользовательский интерфейс в среду.Any encrypted content will be treated as opaque files that SharePoint may list, but be unable to index, the same as if encrypted files were uploaded through the UI to the environment.

События и обработчики событийEvents and event handlers

Канал импорта позволяет ссылаться на обработчики событий в элементах списка, но не разрешает определение обработчиков событий на уровне списка в настоящее время.The import pipeline allows event handlers to be referenced on list items but doesn’t allow defining event handlers at the list level at this time. Канал импорта не запускает события как элементы, которые импортированы, поэтому существующие обработчики событий не будут запускаться из-за события импорта.The import pipeline does not fire events as items are imported, so existing event handlers will not fire due to the import event.

Сопоставление пользователейResolving Users

Если API миграции не удалось разрешить пользователя с помощью имени входа, предоставленного в UserGroup.xml, а идентификатор системы не указан, сделайте следующее:If the Migration API was unable to resolve a user using the login provided in the UserGroup.xml and no System ID is provided, then:

  1. Этот пользователь будет заменен на "Системная учетная запись" в связанных метаданных в пакете (автор, редактор и т. д.).This user will be replaced by “System Account” in the associated metadata within the package (author, editor etc.).
  2. Предупреждение будет отправлено в ImportLogs — "Не удалось гарантировать пользователя “user@contoso.com“".A warning will be reported in the ImportLogs – “Failed to ensure user 'user@contoso.com'”

Если API миграции не удалось разрешить пользователя с помощью имени входа, предоставленного в UserGroup.xml, а идентификатор системы указан (который является идентификатором безопасности для пользователя в локальной службе Active Directory), то сделайте следующее:If the migration API was unable to resolve a user using the login provided in the UserGroup.xml and the System ID is provided (which is the SID for the user in the on-premises AD), then:

  1. Создан новый удаленный пользователь с указанным именем входа и системным идентификатором, который используется в связанных метаданных в пакете.A new deleted user with the provided login and SystemId is created and is used in the associated metadata within the package.
  2. Предупреждение будет отправлено в ImportLogs — "Не удалось получить параметры пользователя “user@contoso.com“ из SiteUsers; возвращение к переданным значениям"A warning will be reported in the ImportLogs- “Failed to retrieve user 'user@contoso.com' attributes from the SiteUsers; falling back to pass in values”

ПриложенияAppendices

Расшифровка сокращенийAcronyms Defined

СокращениеAcronym ОпределениеDefinition
BOTBOT Сервер SharePoint, запускающий задания таймераSharePoint server running timer jobs
CDBCDB База данных содержимого, содержащая семейство веб-сайтов и содержимоеContent database, containing site collections and content
CFECFE Сервер переднего плана фермы контентаContent farm front-end server
SPOSPO SharePoint OnlineSharePoint Online
ABSABS Хранилище BLOB-объектов AzureAzure Blob Storage

Полезные материалыHelpful Resources

Работа со структурами безопасности пакета импортаWorking with import package security structures

В этом разделе представлен краткий обзор того, что содержится в пакете экспорта, который включает средства безопасности в отношении разрешений.This section covers a brief overview of what is contained within an export package that includes security with regard to permissions. Это может позволить системе определять членство пользователя и группы наряду с ролями и конкретными назначениями (уникальные разрешения, предоставленные на уровне объекта и его дочерних элементов, за исключением случаев переопределения в более глубоком дочернем объекте).This can allow the system to determine user and group membership along with roles, and specific assignments (unique permissions set at the object level and its children unless overridden at a deeper child object).

Как интерпретировать идентификаторы безопасности в файлах пакетаHow to interpret the security identifiers in the package files

Файл UserGroup.xml определяет всех пользователей и группы экспортированного веб-сайта.UserGroup.xml file defines all users and groups within the exported web(s). Элементы в данном файле выполняют следующее:The items within this file do the following:

  • Пользовательские объекты содержат информацию о конкретных пользователях, включая использование идентификации по определенному принципу безопасности как доменной группы или нет, логин и SystemId (SID) с кодировкой Base 64 принципа безопасности.User objects include the information about specific users, including identification of a specific security principle as a domain group or not, login, and the base 64 encoded SystemId (SID) of the security principle.
  • Групповые объекты содержат сведения об определенных группах и список прямых членов этой группы.Group objects include the information about specific groups and the direct membership list of that group.
  • Значения владельцев для объектов групп и значения UserId для объектов участников в составе объектов групп сопоставляются с другими значениями ИД других объектов пользователей или групп соответственно.Owner values on group objects and UserId values on member objects within group objects map to other ID values of other user or group objects respectively.

Таблица 2: Пользователи и группы, подписанные в UserGroupMapTable 2: Users and Groups annotated in UserGroupMap

<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 содержит метаданные обо всем содержимом экспортированного веб-сайта(-ов).Manifest.xml contains the metadata about all the content within the exported web(s). Элементы в данном файле выполняют следующее:The items within this file do the following:

  • Объекты ролей включают список определенных ролей на веб-сайте.Roles objects include the list of defined roles on the web.
  • Объекты ролей определяют отдельную роль, в том числе идентификатор, внутренние разрешения, флаги маски и информация о дисплее.Role objects define the individual role, including ID, internal permissions rights mask flags and display information.
    • Значения RoleId определяют идентификаторы объектов ролей.RoleId values define the identifiers of the Role objects.
    • Значения PermMask содержат флаги маски прав.PermMask values contain the rights mask flags.
  • Объекты RoleAssignments включают список уникальных разрешений (объекты RoleAssignment).RoleAssignments objects include the list of unique permissions (RoleAssignment objects).
  • Объекты RoleAssignment включают список отдельных объектов назначения (при наличии).RoleAssignment objects include the list of distinct Assignment objects (if any).
  • Отдельные объекты RoleAssignment содержат информацию о фактическом членстве одного отдельного пользователя или группы и их фактических ролях.Individual RoleAssignment objects contain the actual membership of one distinct user or group and their actual Role.
    • Схема значений RoleId для значений RoleId объектов ролей.RoleId values map to the RoleId values of the Role objects.
    • Схема значений PrincipalId для значений идентификаторов объектов пользователя или группы соответственно в UserGroups.xml.PrincipalId values map to Id values of user or group objects respectively in UserGroups.xml.

Таблица 3: Роли и RoleAssignments, подписанные в манифестеTable 3: Roles and RoleAssignments annotated in manifest

<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-структурыConstrained XSD structures

Ниже приводятся файлы XSD, используемые для проверки пакетов в канале импорта при наличии отличий от исходной полной схемы 2013 г., которую можно найти в официальной документации SharePoint.Included below are the XSD files used for package validation in the import pipeline, when different than the original 2013 full schema that can be found at official SharePoint documentation.

DeploymentExportSettings.XSDDeploymentExportSettings.XSD

Таблица 4: Ограниченная версия DeploymentExportSettings.XSDTable 4: Constrained 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>

DeploymentLookupListMap.XSDDeploymentLookupListMap.XSD

Отличия от текущей опубликованной полной версии схемы пакета 2013 г. отсутствуют.There is no change from current published full 2013 package schema.

DeploymentManifest.XSDDeploymentManifest.XSD

Таблица 5: Ограниченная версия DeploymentManifest.XSDTable 5: Constrained 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>

DeploymentRequirements.XSDDeploymentRequirements.XSD

Отличия от текущей опубликованной полной версии схемы пакета 2013 г. отсутствуют.There is no change from current published full 2013 package schema.

DeploymentRootObjectMap.XSDDeploymentRootObjectMap.XSD

Таблица 6: Ограниченная версия DeploymentRootObjectMap.XSDTable 6: Constrained 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.XSDDeploymentSystemData.XSD

Отличия от текущей опубликованной полной версии схемы пакета 2013 г. отсутствуют.There is no change from current published full 2013 package schema.

DeploymentUserGroupMap.XSDDeploymentUserGroupMap.XSD

Отличия от текущей опубликованной полной версии схемы пакета 2013 г. отсутствуют.There is no change from current published full 2013 full 2013 package schema.

DeploymentViewFormsList.XSDDeploymentViewFormsList.XSD

Отличия от текущей опубликованной полной версии схемы пакета 2013 г. отсутствуют.There is no change from current published full 2013 package schema.

Образец: вызов API с помощью RESTSample: Using REST to call the 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"
}

Для контейнера:For the container:

https://{site_url}/_api/site/ProvisionMigrationContainers

Примечание

API миграции недоступен пользователям Office 365 под управлением 21Vianet в Китае.The Migration API is not available for users of Office 365 operated by 21Vianet in China. Оно также недоступно для пользователей Office 365, использующих немецкое облако с доверенным лицом, работающим с данными, German Telekom.It is also not available for users of Office 365 with the German cloud using the data trustee, German Telekom. Тем не менее, средство поддерживается для пользователей в Германии, чьи данные хранятся не в немецком центре обработки данных.However, it is supported for users in Germany whose data location is not in the German data center.