Compartilhar via


SharePoint GetMigrationJobProgress API

Depois de submeter uma tarefa de migração , quer seja uma tarefa de importação ou uma tarefa de Leitura de Metadados Assíncronos (AMR), pode utilizar a API GetMigrationJobProgress para controlar o progresso. A API está disponível através do SDK e das interfaces REST.

Devolve uma sequência de tarefas status eventos, incluindo: JobQueued, JobStart, JobProgress, JobError e JobEnd.

Permissões

Utilize a autenticação baseada na aplicação ao submeter uma tarefa de migração. Certifique-se de que a aplicação tem a permissão Sites.Read.All ou superior.

Método GetMigrationJobProgress (SDK)

Sintaxe

public ClientResult Site.GetMigrationJobProgress(
  Guid jobId, 
  String nextToken
)

Parâmetros do Método

Nome Tipo Obrigatório Descrição
jobId Guid Sim Identificador exclusivo da tarefa de migração
nextToken Cadeia de caracteres Sim Token para a posição de paginação. Utilizar "0" para o pedido inicial

Para uma tarefa concluída, os pedidos que utilizam nextToken são idempotentes. Repetir o mesmo pedido devolverá consistentemente o mesmo resultado.

Return Values

Nome Tipo Descrição
Logs IList Devolve uma coleção de tarefas status eventos quando está disponível um novo progresso ou uma coleção vazia se não existirem atualizações.
NextToken Cadeia de caracteres Devolve um valor de cadeia atualizado quando está disponível um novo progresso ou o mesmo valor que o parâmetro nextToken se não existirem atualizações.

Exemplo de Utilização do Método

ClientResult result = context.Site.GetMigrationJobProgress(jobId, nextToken ?? "0");
context.ExecuteQuery();
IList logs = result.Value.Logs;
string newNextToken = result.Value.NextToken;

GetMigrationJobProgress REST API

Solicitação HTTP

GET https://{site_url}/_api/site/GetMigrationJobProgress(jobId='{jobId}',nextToken=0)

Parâmetros de URI

Nome Tipo Obrigatório Descrição
jobId Guid Sim Identificador exclusivo da tarefa de migração
nextToken Cadeia de caracteres Sim Token para a posição de paginação. Utilizar "0" para o pedido inicial

Cabeçalhos do Pedido

Cabeçalho Obrigatório
Autorização: Portador {token} Sim
Aceitar: aplicação/json; odata=verboso Sim

Resposta

Um objeto JSON quando o código de status HTTP é 200.

Um objeto JSON vazio quando o código de status HTTP é diferente de 200.

Tratamento de Erros

Código de Estado Significado Ação
403 Não Autorizado (Unauthorized) Certifique-se de que a aplicação/utilizador tem, pelo menos, permissões Sites.Read.All.
429 Muitos Pedidos (Too Many Requests) Analise Retry-After cabeçalho e repita após o atraso especificado.
500 Erro Interno do Servidor (Internal Server Error) Analise as respostas de erros para identificar erros internos. Não Repetir.
503 Serviço Indisponível (Service Unavailable) Analise Retry-After cabeçalho e repita após o atraso especificado.
Código de Erro Interno Significado
-2147213145 Tarefa não encontrada
-2147213146 A status da tarefa expirou (válida por menos de 5 dias)

Exemplo de Utilização da API

Exemplo de Pedido

GET https://contoso.sharepoint.com/_api/site/GetMigrationJobProgress(jobId=' 3e280efa-78a3-4ba1-bac6-e447aa538ca5', nextToken=0)

Exemplo de Resposta Com Êxito

Código de estado: 200 Corpo da resposta:

{
  "d": {
    "GetMigrationJobProgress": {
      "Logs": {
        "__metadata": {
          "type": "Collection(Edm.String)"
        },
        "results": [
          "{\"MigrationType\":\"None\",\"MigrationDirection\":\"Import\",\"SiteId\":\"48f1898f-77d9-4a1b-bddc-1f49bb6dc134\",\"DbId\":\"de6b85cd-726e-4b13-ae04-629798fddbf3\",\"TotalRetryCount\":\"0\",\"JobId\":\"3e280efa-78a3-4ba1-bac6-e447aa538ca5\",\"Time\":\"05/20/2025 09:18:48.132\",\"CorrelationId\":\"91884a0c-5ee8-4e1f-a23f-e4f7ec170182\",\"Event\":\"JobQueued\"}",
          "{\"MigrationType\":\"None\",\"MigrationDirection\":\"Import\",\"SiteId\":\"48f1898f-77d9-4a1b-bddc-1f49bb6dc134\",\"WebId\":\"7206fc09-e4af-48b3-8730-ed7321396d7a\",\"DbId\":\"de6b85cd-726e-4b13-ae04-629798fddbf3\",\"FarmId\":\"f77d7b6c-ef43-4609-8fce-0e93142ce8a0\",\"ServerId\":\"44af885c-393b-4236-9417-bae7a9edc44e\",\"SubscriptionId\":\"82abb045-250e-4186-ba83-b9295930f272\",\"TotalRetryCount\":\"0\",\"JobId\":\"3e280efa-78a3-4ba1-bac6-e447aa538ca5\",\"Time\":\"05/20/2025 09:20:51.129\",\"CorrelationId\":\"7d3e7a8e-4445-4ce0-adb1-078e78cbf686\",\"Event\":\"JobStart\"}",
          "{\"MigrationType\":\"None\",\"MigrationDirection\":\"Import\",\"TotalRetryCount\":\"0\",\"ObjectType\":\"ListItem\",\"Url\":\"\",\"Id\":\"cb471d5f-593f-4a63-b59e-8eae3e35b08a\",\"SourceListItemIntId\":\"3\",\"TargetListItemIntId\":\"3\",\"ErrorCode\":\"-2147286782\",\"ErrorType\":\"Microsoft.SharePoint.SPException\",\"Message\":\"Attempted to use an object that has ceased to exist. (Exception from HRESULT: 0x80030102 (STG_E_REVERTED)) \",\"JobId\":\"3e280efa-78a3-4ba1-bac6-e447aa538ca5\",\"Time\":\"05/20/2025 09:20:55.490\",\"CorrelationId\":\"7d3e7a8e-4445-4ce0-adb1-078e78cbf686\",\"Event\":\"JobError\"}",
          "{\"MigrationType\":\"None\",\"MigrationDirection\":\"Import\",\"TotalRetryCount\":\"0\",\"FilesCreated\":\"0\",\"BytesProcessed\":\"0\",\"ObjectsProcessed\":\"4\",\"TotalExpectedSPObjects\":\"15\",\"TotalErrors\":\"3\",\"TotalWarnings\":\"0\",\"WaitTimeOnSqlThrottlingMilliseconds\":\"0\",\"TotalDurationInMs\":\"0\",\"CpuDurationInMs\":\"0\",\"SqlDurationInMs\":\"0\",\"SqlQueryCount\":\"0\",\"IsShallowCopy\":\"False\",\"CreatedOrUpdatedFileStatsBySize\":\"{}\",\"ObjectsStatsByType\":\"{\\\"SPUser\\\":{\\\"Count\\\":1,\\\"TotalTime\\\":124,\\\"AccumulatedVersions\\\":0,\\\"ObjectsWithVersions\\\":0},\\\"SPFolder\\\":{\\\"Count\\\":1,\\\"TotalTime\\\":153,\\\"AccumulatedVersions\\\":0,\\\"ObjectsWithVersions\\\":0},\\\"SPDocumentLibrary\\\":{\\\"Count\\\":1,\\\"TotalTime\\\":404,\\\"AccumulatedVersions\\\":0,\\\"ObjectsWithVersions\\\":0},\\\"SPFile\\\":{\\\"Count\\\":1,\\\"TotalTime\\\":0,\\\"AccumulatedVersions\\\":0,\\\"ObjectsWithVersions\\\":0},\\\"SPListItem\\\":{\\\"Count\\\":1,\\\"TotalTime\\\":1880,\\\"AccumulatedVersions\\\":0,\\\"ObjectsWithVersions\\\":0}}\",\"TotalExpectedBytes\":\"0\",\"FilesCreatedIrrespectiveOfVersions\":\"0\",\"BytesProcessedOnlyCurrentVersion\":\"0\",\"JobId\":\"3e280efa-78a3-4ba1-bac6-e447aa538ca5\",\"Time\":\"05/20/2025 09:20:57.380\",\"CorrelationId\":\"7d3e7a8e-4445-4ce0-adb1-078e78cbf686\",\"Event\":\"JobEnd\"}"
        ]
      },
      "NextToken": "1764",
      "__metadata": {
        "type": "SP.MigrationJobProgress"
      }
    }
  }
}

Exemplo de Resposta a Erros

Código de estado: 500 Corpo da resposta:

{
  "error": {
    "code": "-2147213145, Microsoft.SharePoint.SPException",
    "innererror": {
      "message": "Job not found",
      "stacktrace": "STACK_TRACE"
    },
    "message": {
      "lang": "en-US",
      "value": "Job not found"
    }
  }
} 

Prática Recomendada

Comece com nextToken=0, armazene o token devolvido e consulte em determinados intervalos. Este método é adequado para tarefas de execução prolongada e ajuda a garantir que não são perdidas atualizações.

Uma vez que as tarefas de migração normalmente demoram vários minutos ou mais, é aconselhável consultar a cada minuto, ao mesmo tempo que segue a orientação para evitar limitações.

Confira também