V předchozím článku jsem psal o tom, že se mi konečně v prostředí Microsoft Forms objevila možnost vybrat otázku s uložením přílohy – https://pavel-vecer.cz/index.php/2019/12/16/microsoft-forms-nahrani-souboru/ . Jak jsem psal, v tomto příspěvku se pojďme podívat na to, jak takový formulář automaticky zpracovat pomocí Power Automate.
Přílohy, které se nahrají jako odpověď na formulář si pak můžeme uložit kam potřebujeme a spustit nad nimi třeba proces schválení a nebo provést další zpracování.
Jak tedy na to?
Bohužel v rámci akce „Get response details“ pro Microsoft Forms dostaneme jenom textové informace o souboru.
Začátek Flow

Jako trigger dáme vytvoření nové odpovědi na Forms. Následně musíme vyčíst odpovědi, mezi kterými jsou i detaily nahraného souboru.

A takto to pak vypadá celé
[{\"name\":\"REQ-2019100026-193_Pavel Vecer 1.docx\",\"link\":\"https://<tenantname>-my.sharepoint.com/personal/<accountname>/_layouts/15/Doc.aspx?sourcedoc=%7B050E1D37-8D08-4A53-8523-56CF41CC16AA%7D&file=REQ-2019100026-193_Pavel%20Vecer%201.docx&action=default&mobileredirect=true\",\"id\":\"01RPCXDCBXDUHAKCENKNFIKI2WZ5A4YFVK\",\"type\":null,\"size\":13638,\"referenceId\":\"01RPCXDCAMNO2G2A42CZHL3GOST3YVBETT\",\"driveId\":\"b!9-dD47V09EmL9GjqwAQFgel2kHdB5rxHiU8_VEPUdHBJUYVVkCr6Q6a9A_AAu_KK\",\"status\":1,\"uploadSessionUrl\":null}]
Odpověď je ve stringu a navíc ne úplně dobře formátovaná. Předpokládám, že na tom se ještě pracuje. Nicméně toto není problém upravit a získat to co potřebujeme.
Úprava detailů přílohy
Jako první odebereme pomocí akce „Compose“ a expressiony replace backslash. Vybereme z předchozí akce dle názvu otázku, která slouží k nahrání souboru.

replace(body('Get_response_details')?['idodpovědi'],'\','')
Následně dostaneme toto:
[{"name":"REQ-2019100026-193_Pavel Vecer 1.docx","link":"https://<tenantname>-my.sharepoint.com/personal/<accountname>/_layouts/15/Doc.aspx?sourcedoc=%7B050E1D37-8D08-4A53-8523-56CF41CC16AA%7D&file=REQ-2019100026-193_Pavel%20Vecer%201.docx&action=default&mobileredirect=true","id":"01RPCXDCBXDUHAKCENKNFIKI2WZ5A4YFVK","type":null,"size":13638,"referenceId":"01RPCXDCAMNO2G2A42CZHL3GOST3YVBETT","driveId":"b!9-dD47V09EmL9GjqwAQFgel2kHdB5rxHiU8_VEPUdHBJUYVVkCr6Q6a9A_AAu_KK","status":1,"uploadSessionUrl":null}]
Vzhledem k tomu, že se nám v odpovědi vrací string, který obsahuje pole se soubory, které odpovídající nahrál, následuje akce „Apply to each“.

Expressiona json() nám zajistí převod ze stringu na formát, který je stravitelný pro akci.
Jak dostat obsah souboru?
A teď už nám zbývají poslední dva kroky a dostaneme se k tomu, co potřebujeme, k samotnému obsahu souboru.
Jako první parsujeme json, který nám reprezentuje detaily souboru:

Schéma
{
"type": "object",
"properties": {
"name": {
"type": "string"
},
"link": {
"type": "string"
},
"id": {
"type": "string"
},
"type": {},
"size": {
"type": "integer"
},
"referenceId": {
"type": "string"
},
"driveId": {
"type": "string"
},
"status": {
"type": "integer"
},
"uploadSessionUrl": {}
}
}
A už nám zbývá poslední krok k tomu získat obsah souboru, detaily už máme z předchozího parsování pěkně k dispozici. Poslední akcí je „Get file content“ z OneDrive for Business.

A voalá máme vše co potřebujeme a nyní děj se vůle procesní 🙂
Na co si dát pozor?
- Vzhledem k tomu, že se odkazujeme na id odpovědi v Microsoft Forms, tak v momentě kdy Forms upravíme, tak je potřeba si dát pozor na to, zda-li je stále odpověď stejná
- Je možné, že se daná akce „dovyvine“ tak, aby plně podporovala i nahrání souborů a pak bude tento postup zbytečné absolvovat. Zatím tomu ale tak není
- Toto funguje pro OneDrive for Business. Pro Formsi, které jsou ve skupině (obsah se ukládá na SharePoint) bude postup trochu odlišný (nahradí se akce pro OneDrive for Business akcí pro SharePoint)