De vorige keer schreef ik over foutafhandeling in Power Automate. In deze blogpost leg ik uit hoe je geavanceerde foutafhandeling in je flow configureert.
BASISOVERZICHT VAN FOUTAFHANDELING
Eerder heb ik uitgelegd hoe u fouten kunt opsporen met behulp van de Uitvoeren na-voorwaarden en het verzenden van een eenvoudige e-mail wanneer uw stroom een fout heeft gemaakt.

Bij het uitleggen van de geavanceerde foutafhandeling zal ik verder bouwen op deze budgetstroom voor kerstcadeaus die we eerder hebben gemaakt (zoals hierboven weergegeven).
GEAVANCEERDE FOUTAFHANDELING
Voor geavanceerde foutafhandeling moeten we onze vorige stroom een beetje aanpassen voordat we er diep in kunnen duiken. Dit komt omdat deze functionaliteit alleen werkt op acties die zijn gebundeld in een soort container, zoals Bereik, Voorwaarde, Toepassen op elk of Doen tot. In dit voorbeeld gebruik ik de Scope.
OPBOUW ACTIES
Zoals gezegd moeten we ons proces in een container stoppen, waarvoor we een Scope gebruiken. Maar omdat u een variabele niet in een container kunt initialiseren (alleen op het hoogste niveau), moeten we een Variabele instellen actie waarin we het budget per persoon berekenen (in plaats van direct inro de variabele actie initialiseren). Die set variabele actie moet in een worden gezet Domein container. Zorg ervoor dat u de Waarde attribuut van de variabele numBudgetPerPerson initialiseren ook actie!

In de bovenstaande schermafbeelding kunt u zien dat het kenmerk Waarde van de actie Variabele numBudgetPerPerson initialiseren is gewist, een bereik met de naam Budget berekenen is toegevoegd en er is een actie Variabele instellen aangeroepen Variabele numBudgetPerPerson instellen op werkelijk budget per persoon is toegevoegd aan de Scope-container.
Deze actie Variabele instellen stelt de waarde van de variabele in op de berekening die we in ons vorige bericht hebben gedaan (die eerder werd ingesteld in de actie Variabele numBudgetPerPerson initialiseren).
div( variabelen('inTotalBudget'), triggerBody()?['number_1'] )
Waar inTotaalBudget is een statisch budget zoals ingesteld in de stroom zelf (in de actie Variabele initialiseren inTotaalBudget) en nummer 1 is de hoeveelheid input van mensen die wordt gevraagd bij het starten van de stroom.
resultaat() uitdrukking
Om dieper in te gaan op de fouten die in uw stroom kunnen optreden, moeten we gebruik maken van de resultaat() uitdrukking. Deze uitdrukking wordt niet weergegeven onder het tabblad Uitdrukkingen en wordt ook niet weergegeven onder IntelliSense:

Dus je moet de uitdrukking voor jezelf bouwen. Gelukkig is het niet zo moeilijk. Het is result() waarbij elk spatieteken wordt behandeld als een onderstrepingsteken. In ons voorbeeld noemden we onze Scope-container Budget berekenen, dus onze uitdrukking zou moeten zijn:
resultaat('Bereken_budget')
Wanneer ik die expressie in een Compose-actie plaats en de Run after-voorwaarde van die actie instel om te worden uitgevoerd wanneer de vorige actie (die nu onze Scope-container is) is mislukt, ziet u het resultaat van deze expressie:
[ { "name": "Set_variable_numBudgetPerPerson_to_actual_budget_per_person", "startTime": "2020-12-28T10:51:34.2736097Z", "endTime": "2020-12-28T10:51:34.2892337Z", "trackingId: "9568aea4- fce8-4e59-8da0-1e30a1868ce1", "clientTrackingId": "08585924541915168577730736438CU168", "clientKeywords": [ "testFlow" ], "code": "BadRequest", "status": "Mislukt", "error": { "code ": "InvalidTemplate", "message": "Kan sjabloontaaluitdrukkingen niet verwerken in actie 'Set_variable_numBudgetPerPerson_to_actual_budget_per_person' invoer op regel '1' en kolom '7550': 'Poging om een integrale of decimale waarde te delen door nul in functie 'div' .'." } } ]
Zoals u kunt zien, toont de uitdrukking u de details van elke actie in de container. In ons voorbeeld hebben we maar één actie gedefinieerd, dus we zien alleen de details van die actie. Als u meer acties binnen uw bereik heeft, bevat uw JSON al deze acties (zelfs als de acties zijn geslaagd).
Wat nu interessant is aan deze details, is het onderste gedeelte. Hier zie je dat de actie is mislukt vanwege een slecht verzoek. En dat niet alleen, zelfs de volledige foutmelding is hier aan ons verstrekt (u kunt een waarde niet door nul delen).
DE UITKOMST VERWERKEN
Nu we weten hoe we de foutdetails uit een actie kunnen halen, moeten we dit correct verwerken. Zoals gezegd, kunt u meerdere acties in uw container hebben, dus meerdere uitkomsten van uw result()-expressie. Om deze reden moeten we een toevoegen Toepassen op elk actie die elke actiedetails doorloopt. De uitvoer die moet worden gebruikt in uw Toepassen op elke actie is dezelfde die we zojuist hebben gebruikt in onze actie Opstellen:
resultaat('Bereken_budget')
Je kunt het dus gewoon kopiëren en plakken vanuit de actie Opstellen en daarna de actie Opstellen verwijderen:

Binnen deze Toepassen op elke actie kunnen we alle foutinformatie bij elkaar zetten. Maar aangezien de result()-expressie elke actie doorloopt, worden alle succesvolle acties ook verwerkt, dus moeten we ze uitsluiten.
We kunnen dit doen door een toe te voegen Voorwaarde dat zal controleren of de toestand attribuut van de uitkomst is gelijk aan Mislukt. Aangezien de result()-expressie niet beschikbaar is op het tabblad Expressie, zijn de attributen dat ook niet, dus moeten we deze expressie ook handmatig configureren:
items('Apply_to_each_Scope_result')?['status']
Wanneer u dit in een voorwaarde plaatst die controleert of de waarde van de uitdrukking gelijk is aan Mislukt, krijgen we nu alleen mislukte acties:

Nu we alleen mislukte acties verwerken, kunnen we doorgaan met het verzamelen van de informatie die we willen.
In dit voorbeeld wil ik de naam van de actie en de daadwerkelijke foutmelding. Omdat er meerdere fouten mogelijk zijn (afhankelijk van de instelling van de Run after-voorwaarde van uw stroom), wil ik dat elke foutmelding wordt toegevoegd aan een enkele variabele, zodat ik die variabele later in een e-mail kan gebruiken.
Hiervoor moet ik Initialiseer een tekenreeksvariabele actie op het hoogste niveau (dat varErrors wordt genoemd) en een Toevoegen aan tekenreeksvariabele actie binnen de tak Indien ja van de voorwaarde die we zojuist hebben geconfigureerd. Zoals gezegd bevat deze actie Toevoegen aan tekenreeksvariabele de actienaam en de daadwerkelijke foutmelding, waarvan de uitdrukking als volgt is:
Actie naam:
replace( items('Apply_to_each_Scope_result')?['name'], '_', ' ' )
Omdat het name-attribuut de naam van de actie bevat, maar met underscores in plaats van spaties, zorgt de functie replace() ervoor dat de underscores worden terugvertaald naar spaties.
Foutmelding:
items('Apply_to_each_Scope_result')?['error']?['message']
Door dit iets vriendelijker op te maken in HTML, ziet uw variabele Toevoegen aan tekenreeks er als volgt uit:

DE FOUTMAIL WIJZIGEN
In deze basisoplossing hebben we alleen een e-mail gestuurd met basisinformatie dat de stroom is mislukt. We kunnen dit nu wat aanpassen zodat de variabele varError met details meegestuurd wordt. Hiervoor moeten we de e-mail omzetten in HTML-indeling (omdat de variabele varErrors in HTML-indeling wordt geplaatst). In dit voorbeeld heb ik het als volgt geconfigureerd:

Zorg ervoor dat de e-mail niet in de Toepassen op elke actie staat, maar direct eronder.
Wanneer u de stroom uitvoert zonder dat er iets is ingevuld voor het aantal mensen dat is ingevoerd, mislukt uw stroom en ontvangt u de volgende e-mail:

VOLLEDIGE STROOMCONFIGURATIE
Met alles op zijn plek, heb je nu een stroom geconfigureerd met geavanceerde foutafhandeling. Het zou er zo uit moeten zien:

Bron: https://www.about365.nl/2020/12/28/advanced-error-handling-in-power-automate/
Geschreven door: Rik de Koning, Functioneel Adviseur Rapid Circle