Merk
Tilgang til denne siden krever autorisasjon. Du kan prøve å logge på eller endre kataloger.
Tilgang til denne siden krever autorisasjon. Du kan prøve å endre kataloger.
I noen situasjoner samsvarer ikke en datakildes oppførsel med det som forventes av Power Querys standard HTTP-kodehåndtering. Eksemplene nedenfor viser hvordan man kan håndtere denne situasjonen.
I dette scenariet vil du jobbe med et REST-API som av og til returnerer en 500-statuskode, som indikerer en intern serverfeil. I slike tilfeller kan du vente noen sekunder og prøve igjen, kanskje flere ganger før du gir opp.
ManuellStatusHåndtering
Hvis den Web.Contents får et svar på 500 statuskode, kaster den en DataSource.Error som standard. Du kan overstyre denne oppførselen ved å gi en liste med koder som et valgfritt argument til Web.Contents:
response = Web.Contents(url, [ManualStatusHandling={404, 500}])
Ved å spesifisere statuskodene på denne måten, vil Power Query fortsette å behandle websvaret som normalt. Normal responsbehandling er imidlertid ofte ikke passende i slike tilfeller. Du må forstå at en unormal responskode er mottatt og utføre spesiell logikk for å håndtere den. For å finne svarkoden som ble returnert fra webtjenesten, kan du få tilgang til den fra posten meta som følger med svaret:
responseCode = Value.Metadata(response)[Response.Status]
Avhengig av om responseCode det er 200 eller 500, kan du enten behandle resultatet som normalt, eller følge vente-forsøk-logikken som du vil utdype i neste seksjon.
IsRetry
Power Query har en lokal cache som lagrer resultatene fra tidligere kall til Web.Contents. Når du spør samme URL for et nytt svar, eller når du prøver på nytt etter en feilstatus, må du sørge for at spørringen ignorerer eventuelle bufrede resultater. Du kan gjøre dette ved å inkludere valget IsRetry i kallet til funksjonen Web.Contents . I dette eksempelet setter IsRetry vi til etter true den første iterasjonen av Value.WaitFor løkken.
Value.WaitFor
Value.WaitFor() er en standard hjelperfunksjon som vanligvis kan brukes uten endringer. Det fungerer ved å lage en liste over forsøk på nytt.
producer Argument
Dette inneholder oppgaven som (muligens) skal prøves på nytt. Den representeres som en funksjon slik at iterasjonsnummeret kan brukes i producer logikken. Den forventede atferden er at vil producer komme tilbake null hvis en ny prøve vurderes som nødvendig. Hvis noe annet enn null returneres med producer, returneres denne verdien igjen med Value.WaitFor.
delay Argument
Dette inneholder logikken for å utføre mellom forsøkene. Den representeres som en funksjon slik at iterasjonsnummeret kan brukes i delay logikken. Den forventede atferden er at delay returnerer en varighet.
count Argument (valgfritt)
Et maksimalt antall forsøk kan settes ved å gi et tall til argumentet count .
Setter alt sammen
Følgende eksempel viser hvordan ManualStatusHandling og Value.WaitFor kan brukes til å implementere et forsinket forsøk ved et 500-svar. Ventetiden mellom forsøkene dobles for hvert forsøk, med maksimalt fem forsøk.
let
waitForResult = Value.WaitFor(
(iteration) =>
let
result = Web.Contents(url, [ManualStatusHandling = {500}, IsRetry = iteration > 0]),
status = Value.Metadata(result)[Response.Status],
actualResult = if status = 500 then null else result
in
actualResult,
(iteration) => #duration(0, 0, 0, Number.Power(2, iteration)),
5)
in
if waitForResult = null then
error "Value.WaitFor() Failed after multiple retry attempts"
else
waitForResult