Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Nach dem Übermitteln eines Migrationsauftrags – unabhängig davon, ob es sich um einen Importauftrag oder einen AMR-Auftrag (Asynchronous Metadata Read) handelt – können Sie die GetMigrationJobProgress-API verwenden, um den Fortschritt nachzuverfolgen. Die API ist sowohl über SDK- als auch über REST-Schnittstellen verfügbar.
Es gibt eine Sequenz von Auftrags- status Ereignissen zurück, einschließlich: JobQueued, JobStart, JobProgress, JobError und JobEnd.
Berechtigungen
Verwenden Sie die anwendungsbasierte Authentifizierung beim Übermitteln eines Migrationsauftrags. Stellen Sie sicher, dass der Anwendung die Berechtigung Sites.Read.All oder höher gewährt wird.
GetMigrationJobProgress-Methode (SDK)
Syntax
public ClientResult Site.GetMigrationJobProgress(
Guid jobId,
String nextToken
)
Methodenparameter
| Name | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
| jobId | GUID | Ja | Eindeutiger Bezeichner des Migrationsauftrags |
| nextToken | Zeichenfolge | Ja | Token für die Auslagerungsposition. Verwenden von "0" für die erste Anforderung |
Bei einem abgeschlossenen Auftrag sind Anforderungen, die nextToken verwenden, idempotent. Wenn Sie dieselbe Anforderung wiederholen, wird immer dasselbe Ergebnis zurückgegeben.
Rückgabewerte
| Name | Typ | Beschreibung |
|---|---|---|
| Protokolle | IList | Gibt eine Auflistung von Auftrags- status Ereignissen zurück, wenn ein neuer Fortschritt verfügbar ist, oder eine leere Auflistung, wenn keine Updates vorhanden sind. |
| NextToken | Zeichenfolge | Gibt einen aktualisierten Zeichenfolgenwert zurück, wenn neuer Fortschritt verfügbar ist, oder denselben Wert wie der nextToken-Parameter, wenn keine Updates vorhanden sind. |
Methodenverwendungsbeispiel
ClientResult result = context.Site.GetMigrationJobProgress(jobId, nextToken ?? "0");
context.ExecuteQuery();
IList logs = result.Value.Logs;
string newNextToken = result.Value.NextToken;
GetMigrationJobProgress-REST-API
HTTP-Anforderung
GET https://{site_url}/_api/site/GetMigrationJobProgress(jobId='{jobId}',nextToken=0)
URI-Parameter
| Name | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
| jobId | GUID | Ja | Eindeutiger Bezeichner des Migrationsauftrags |
| nextToken | Zeichenfolge | Ja | Token für die Auslagerungsposition. Verwenden von "0" für die erste Anforderung |
Anforderungsheader
| Kopfzeile | Erforderlich |
|---|---|
| Autorisierung: Bearer {token} | Ja |
| Akzeptieren: application/json; odata=verbose | Ja |
Antwort
Ein JSON-Objekt, wenn der HTTP-status Code 200 ist.
Ein leeres JSON-Objekt, wenn der HTTP-status Code nicht 200 ist.
Fehlerbehandlung
| Statuscode | Bedeutung | Aktion |
|---|---|---|
| 403 | Nicht autorisiert (Unauthorized) | Stellen Sie sicher, dass die App/der Benutzer mindestens über Die Berechtigungen Sites.Read.All verfügt. |
| 429 | Zu viele Anforderungen (Too Many Requests) | Analysieren Sie Retry-After Header, und wiederholen Sie den Vorgang nach der angegebenen Verzögerung. |
| 500 | Interner Serverfehler (Internal Server Error) | Analysieren von Fehlerantworten, um interne Fehler zu identifizieren. Versuchen Sie es nicht erneut. |
| 503 | Dienst nicht verfügbar (Service Unavailable) | Analysieren Sie Retry-After Header, und wiederholen Sie den Vorgang nach der angegebenen Verzögerung. |
| Interner Fehlercode | Bedeutung |
|---|---|
| -2147213145 | Auftrag nicht gefunden |
| -2147213146 | Auftrag status abgelaufen (gilt für weniger als 5 Tage) |
API-Verwendungsbeispiel
Anforderungsbeispiel
GET https://contoso.sharepoint.com/_api/site/GetMigrationJobProgress(jobId=' 3e280efa-78a3-4ba1-bac6-e447aa538ca5', nextToken=0)
Erfolgreiches Antwortbeispiel
Statuscode: 200 Antworttext:
{
"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"
}
}
}
}
Beispiel für Fehlerantwort
Statuscode: 500 Antworttext:
{
"error": {
"code": "-2147213145, Microsoft.SharePoint.SPException",
"innererror": {
"message": "Job not found",
"stacktrace": "STACK_TRACE"
},
"message": {
"lang": "en-US",
"value": "Job not found"
}
}
}
Bewährte Methoden
Beginnen Sie mit nextToken=0, speichern Sie das zurückgegebene Token, und rufen Sie in bestimmten Intervallen ab. Diese Methode eignet sich gut für Aufträge mit langer Ausführungszeit und stellt sicher, dass keine Updates ausgelassen werden.
Da Migrationsaufträge in der Regel mehrere Minuten oder mehr dauern, wird empfohlen, jede Minute abzufragen, während Sie die Richtlinie einhalten, um eine Drosselung zu vermeiden.