Partager via


SharePoint GetMigrationJobProgress API

Après avoir soumis un travail de migration, qu’il s’agisse d’un travail d’importation ou d’un travail AMR (Asynchrone Metadata Read), vous pouvez utiliser l’API GetMigrationJobProgress pour suivre sa progression. L’API est disponible via le KIT de développement logiciel (SDK) et les interfaces REST.

Elle retourne une séquence d’événements de status de travail, notamment : JobQueued, JobStart, JobProgress, JobError et JobEnd.

Autorisations

Utilisez l’authentification basée sur l’application lors de l’envoi d’une tâche de migration. Vérifiez que l’application dispose de l’autorisation Sites.Read.All ou supérieure.

GetMigrationJobProgress, méthode (SDK)

Syntaxe

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

Paramètres de la méthode

Nom Type Requis Description
jobId Guid Oui Identificateur unique du travail de migration
nextToken String Oui Jeton pour la position de pagination. Utiliser « 0 » pour la requête initiale

Pour un travail terminé, les requêtes utilisant nextToken sont idempotentes : la répétition de la même requête retourne systématiquement le même résultat.

Valeurs de retour

Nom Type Description
Journaux d’activité IList Retourne une collection d’événements de status de travail quand une nouvelle progression est disponible, ou une collection vide s’il n’y a pas de mise à jour.
NextToken String Retourne une valeur de chaîne mise à jour quand une nouvelle progression est disponible, ou la même valeur que le paramètre nextToken s’il n’y a aucune mise à jour.

Exemple d’utilisation de la méthode

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

GetMigrationJobProgress REST API

Requête HTTP

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

Paramètres d’URI

Nom Type Requis Description
jobId Guid Oui Identificateur unique du travail de migration
nextToken String Oui Jeton pour la position de pagination. Utiliser « 0 » pour la requête initiale

En-têtes de requête

En-tête Requis
Autorisation : Porteur {token} Oui
Accepter : application/json ; odata=verbose Oui

Réponse

Objet JSON lorsque le code de status HTTP est 200.

Objet JSON vide lorsque le code de status HTTP est différent de 200.

Gestion des erreurs

Code d’état Signification Action
403 Non autorisé (Unauthorized) Vérifiez que l’application/l’utilisateur dispose au moins des autorisations Sites.Read.All.
429 Trop de demandes (Too Many Requests) Analysez Retry-After-tête et réessayez après le délai spécifié.
500 Erreur interne du serveur (Internal Server Error) Analysez les réponses d’erreur pour identifier les erreurs internes. Ne réessayez pas.
503 Service non disponible (Service Unavailable) Analysez Retry-After-tête et réessayez après le délai spécifié.
Code d’erreur interne Signification
-2147213145 Travail introuvable
-2147213146 Le travail status expiré (valide pendant moins de 5 jours)

Exemple d’utilisation d’API

Exemple de requête

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

Exemple de réponse réussie

Code d’état : 200 Corps de la réponse :

{
  "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"
      }
    }
  }
}

Exemple de réponse d’erreur

Code d’état : 500 Corps de la réponse :

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

Meilleures pratiques

nextToken=0Commencez par , stockez le jeton retourné et interrogez à certains intervalles. Cette méthode est bien adaptée aux travaux de longue durée et permet de s’assurer qu’aucune mise à jour n’est manquée.

Étant donné que les travaux de migration prennent généralement plusieurs minutes ou plus, il est recommandé d’interroger chaque minute, tout en respectant les recommandations pour éviter la limitation.

Voir aussi