Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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.