Suche

Microsoft Graph API ­­­/Groups-drives

Themen

Ordner und Dateien in Gruppen automatisieren – mit PowerFx und HttpRequestV2

Ordner und Dateien per PowerFx dynamisch verwalten? Kein Problem! Mit HttpRequestV2 in Kombination mit Microsoft Graph steuerst du jeden Aspekt einer Gruppen-Dokumentbibliothek direkt aus deiner App oder deinem Flow heraus. Egal ob du Metadaten abfragen, Dateien verschieben oder komplette Ordner löschen willst – alles läuft automatisiert und präzise. Der Clou: Du brauchst keine zusätzlichen Konnektoren, keine vordefinierten Strukturen und keine komplizierten Workarounds. In diesem Artikel zeige ich dir anhand von PowerFx-Beispielen, wie du Ordner erstellst, Inhalte abfragst, gezielt Dateien löschst oder ganze Folder aufräumst. Effizient, sauber und komplett API-basiert – perfekt für strukturierte Automatisierung und dynamische App-Logik.

Drei zentrale Parameter, die du kennen solltest

Bevor’s losgeht, ein kurzer Blick auf die drei zentralen Parameter, die sich durch alle Beispiele ziehen: Location, DocLib und varFile.

Location

Mit Location bestimmst du den API-Endpunkt – meistens eine Gruppen-ID in der Form groups/{id}. Die kannst du entweder über das Admincenter ermitteln oder wenn du selbst Teil der Gruppe bist, geht das auch über den Team-Connector und den Aufruf von MicrosoftTeams.GetAllAssociatedTeams().value. Die entsprechende ID deine Gruppe setzt du dann auf varGroupId.

Eine weitere Möglichkeit, an die ID zu gelangen, besteht darin, die Gruppen eines bekannten Users mithilfe von Get groups of User V2 aus dem Microsoft Entra ID Connector abzufragen.

Ermittlung der GroupId

DocLib

DocLib steht für die ID der Dokumentbibliothek, also quasi das Laufwerk, auf das du zugreifst. Dazu hab ich schon einen anderen Artikel geschrieben in dem du alles nachlesen kannst. Mehr dazu findest du unter:  Microsoft Graph API Groups 

varFile

Spannend wird’s bei varFile: Dieser Parameter enthält den JSON-Body, etwa beim Erstellen eines Ordners oder beim Datei-Upload. Wichtig dabei: Du kannst nicht einfach ein PowerFx-Record direkt als JSON senden – das führt sonst zum bekannten Fehler „Empty Payload“. Die Lösung dafür kommt von MoreBeerMorePower: In diesem Blogartikel wird gezeigt, wie du den JSON-Body richtig kodierst. Unbedingt reinlesen – das spart dir richtig Zeit und Frust! Ich habe mir dafür speziell eine Component Library dafür gebaut, dadurch kann ich die jeweilige Funktion einfach aufrufen. Damit du nicht ewig Zeit damit verbringen musst findest du alles zum Downloaden in diesem Artikel:  Component Library – Base64 XCoder

drives/{id}/items/{id}

 

Delete – Ordner löschen inklusive Inhalt

Wenn du einen ganzen Ordner innerhalb einer Microsoft 365 Gruppe löschen willst, funktioniert das genauso einfach wie bei einer Datei. Mit einem gezielten Aufruf über HttpRequestV2 holst du dir erst die nötigen Infos zum Ordner, um ihn eindeutig zu identifizieren, und führst dann den Löschvorgang aus. Das passiert direkt über Microsoft Graph und ohne große Umwege. Besonders hilfreich ist das, wenn du z. B. regelmäßig temporäre oder automatisch erzeugte Ordner bereinigen möchtest. So behältst du die Übersicht und hältst deine Umgebung sauber – effizient und ganz ohne manuelle Eingriffe.

PowerApps

Office 365 Groups

With(
    {
        Location: "groups/" & varGroupId,
        DocLib: Text(varGroupDrive.id),
        FolderPath: "Ordner Erste Ebene" & "/1785cc8e-04ab-4f90-a31d-d8b426017386/"
    },
    With(
        {
            folderMeta: Office365Groups.HttpRequestV2(
                "https://graph.microsoft.com/v1.0/" & Location & "/drives/" & DocLib & "/root:/" & FolderPath,
                "GET",
                ""
            )
        },
        Office365Groups.HttpRequestV2(
            "https://graph.microsoft.com/v1.0/" & Location & "/drives/" & DocLib & "/items/" & Text(folderMeta.id),
            "DELETE",
            "",
            {ContentType: "application/json"}
        )
    )
)

drives/{id}/items/{id}/children

 

GET – Liste alle Dateien im Ordner

Wenn du Dateien aus einem Unterordner einer Microsoft 365 Gruppe holen willst – etwa um sie in einer Galerie anzuzeigen oder automatisiert weiterzuverarbeiten – dann kommst du mit einem einfachen HTTP-Request ziemlich weit. Die Funktion HttpRequestV2 ermöglicht dir den Zugriff auf Ordnerstrukturen innerhalb einer Dokumentbibliothek über den Microsoft Graph. Zuerst wird geprüft, wo sich der Ordner genau befindet, und danach werden die darin enthaltenen Dateien abgefragt. Das Ergebnis enthält alle relevanten Dateiinformationen, die du anschließend weiterverwenden kannst. Damit greifst du flexibel auf verschachtelte Ordnerstrukturen in Microsoft 365 Groups zu – unabhängig davon, wie tief sie liegen. Du brauchst keine vordefinierten Connectors oder festen Strukturen. Alles läuft im Kontext des Users, der den Flow oder die App ausführt. Wenn du gezielt Dateien aus Gruppenordnern brauchst, ist HttpRequestV2 der direkte Weg. Schnell, flexibel und perfekt für datengetriebene Anwendungen.

PowerApps

Office365 Groups

ClearCollect(
    colLibraryFiles,
    With(
        {
            Location: "groups/" & varGroupId,
            DocLib: Text(varGroupDrive.id),
            FolderPath: "Ordner Erste Ebene" & "/Ordner Zweite Ebene/"
        },
        With(
            {
                folderMeta: Office365Groups.HttpRequestV2(
                    "https://graph.microsoft.com/v1.0/" & Location & "/drives/" & DocLib & "/root:/" & FolderPath,
                    "GET",
                    ""
                )
            },
            ForAll(
                Office365Groups.HttpRequestV2(
                    "https://graph.microsoft.com/v1.0/" & Location & "/drives/" & DocLib & "/items/" & folderMeta.id & "/children",
                    "GET",
                    ""
                ).value As _file,
                {
                    '@microsoft.graph.downloadUrl': Text(_file.'@microsoft.graph.downloadUrl'),
                    createdBy: {
                        user: {
                            email: Text(_file.createdBy.user.email),
                            id: Text(_file.createdBy.user.id),
                            displayName: Text(_file.createdBy.user.displayName)
                        }
                    },
                    createdDateTime: DateTimeValue(_file.createdDateTime),
                    eTag: Text(_file.eTag),
                    id: Text(_file.id),
                    lastModifiedBy: {
                        user: {
                            email: Text(_file.lastModifiedBy.user.email),
                            id: Text(_file.lastModifiedBy.user.id),
                            displayName: Text(_file.lastModifiedBy.user.displayName)
                        }
                    },
                    lastModifiedDateTime: DateTimeValue(_file.lastModifiedDateTime),
                    name: Text(_file.name),
                    parentReference: {
                        driveType: Text(_file.parentReference.driveType),
                        driveId: Text(_file.parentReference.driveId),
                        id: Text(_file.parentReference.id),
                        name: Text(_file.parentReference.name),
                        path: Text(_file.parentReference.path),
                        siteId: Text(_file.parentReference.siteId)
                    },
                    webUrl: Text(_file.webUrl),
                    cTag: Text(_file.cTag),
                    file: {
                        hashes: {quickXorHash: Text(_file.file.hashes.quickXorHash)},
                        mimeType: Text(_file.file.mimeType)
                    },
                    fileSystemInfo: {
                        createdDateTime: DateTimeValue(_file.fileSystemInfo.createdDateTime),
                        lastModifiedDateTime: DateTimeValue(_file.fileSystemInfo.lastModifiedDateTime)
                    },
                    shared: {scope: Text(_file.shared.scope)},
                    size: Value(_file.size)
                }
            )
        )
    )
);

drives/{id}/root:/Path:/children

 

POST – Erstellen eines Ordners

Wenn du innerhalb einer Microsoft 365 Gruppe einen neuen Ordner anlegen willst, geht das ganz unkompliziert mit einem einfachen Aufruf. Du gibst an, wo der neue Ordner hin soll und wie er heißen soll – der Rest läuft automatisch. Besonders praktisch ist das, wenn du regelmäßig neue Strukturen brauchst, etwa für Projekte, Zeiträume oder Benutzervorgänge. Durch die Nutzung von HttpRequestV2 steuerst du das Ganze direkt über Graph, ganz ohne zusätzliche Konfiguration. Einfach ausführen und der Ordner ist da, genau dort, wo du ihn brauchst – dynamisch, flexibel und ohne manuelle Nacharbeit.

PowerApps

Office 365 Groups

Set(
    varRequestBody,
    "{
    ""name"": """ & GUID() & """,
    ""folder"": {},
    ""@microsoft.graph.conflictBehavior"": ""replace""
    }"
);
Set(
    varFile,
    "data:text/plain;base64," & cmpBase64_1.encodeBase64(varRequestBody)
);// https://lowcode-investigator.com/base64-encoding-powerfx-component-library-fuer-power-app/

With(
    {
        Location: "groups/" & varGroupId,
        DocLib: Text(varGroupDrive.id),
        parentPath: "Ordner Erste Ebene" & "/Ordner Zweite Ebene",
        newFolder: GUID()
    },
    Office365Groups.HttpRequestV2(
        "https://graph.microsoft.com/v1.0/" & Location & "/drives/" & DocLib & "/root:/" & parentPath & ":/children",
        "POST",
        varFile,
        {ContentType: "application/json"}
    )
)

drives/{id}/root:/Path

 

GET – Rufe die Ordner Metainformationen ab

Wenn du Informationen über einen bestimmten Ordner in einer Microsoft 365 Gruppe brauchst, kannst du das ganz bequem mit einem einfachen Aufruf erledigen. Die Funktion HttpRequestV2 holt dir dabei alle verfügbaren Metadaten zu diesem Ordner – also wer ihn erstellt hat, wann er zuletzt geändert wurde, wie viele Dateien er enthält und vieles mehr. Der Aufbau ist ähnlich wie bei anderen Abfragen über Microsoft Graph: Du gibst an, wo sich der Ordner befindet, führst die Anfrage aus und bekommst eine strukturierte Antwort mit allen relevanten Infos. Das Ganze funktioniert ohne komplizierte Konfiguration, direkt über die vorhandene Verbindung zur Gruppe. Ideal, wenn du z. B. in einer App den Ordnerstatus anzeigen oder bestimmte Infos weiterverarbeiten willst. Einfach, schnell und direkt.

PowerApps

Office 365 Groups

With(
    {
        Location: "groups/" & varGroupId,
        DocLib: Text(varGroupDrive.id),
        FolderPath: "Ordner Erste Ebene" & "/Ordner Zweite Ebene/"
    },
    With(
        {
            response: Office365Groups.HttpRequestV2(
                "https://graph.microsoft.com/v1.0/" & Location & "/drives/" & DocLib & "/root:/" & FolderPath,
                "GET",
                JSON("")
            )
        },
        {
            '@odata.context': Text(response.'@odata.context'),
            createdBy: {
                user: {
                    email: Text(response.createdBy.user.email),
                    id: Text(response.createdBy.user.is),
                    displayName: Text(response.createdBy.user.displayName)
                }
            },
            createdDateTime: Text(response.createdDateTime),
            eTag: Text(response.eTag),
            id: Text(response.id),
            lastModifiedBy: {
                user: {
                    email: Text(response.lastModifiedBy.user.email),
                    id: Text(response.lastModifiedBy.user.is),
                    displayName: Text(response.lastModifiedBy.user.displayName)
                }
            },
            lastModifiedDateTime: Text(response.lastModifiedDateTime),
            name: Text(response.name),
            parentReference: {
                driveType: Text(response.parentReference.driveType),
                driveId: Text(response.parentReference.driveId),
                id: Text(response.parentReference.id),
                name: Text(response.parentReference.name),
                path: Text(response.parentReference.path),
                siteId: Text(response.parentReference.siteId)
            },
            webUrl: Text(response.webUrl),
            cTag: Text(response.cTag),
            fileSystemInfo: {
                createdDateTime: Text(response.fileSystemInfo.createdDateTime),
                lastModifiedDateTime: Text(response.fileSystemInfo.lastModifiedDateTime)
            },
            folder: {childCount: Text(response.folder.childCount)},
            shared: {scope: Text(response.shared.scope)},
            size: Text(response.size)
        }
    )
)

Delete – Löschen einer Datei

Wenn du gezielt eine Datei in einer Microsoft 365 Gruppe löschen willst, kannst du das ebenfalls mit einem einfachen Aufruf erledigen. Die Funktion HttpRequestV2 erlaubt dir, eine bestimmte Datei direkt über ihren Pfad anzusprechen und zu löschen – ohne Umwege, ohne manuelle Eingriffe. Du musst nur wissen, wo sich die Datei befindet und wie sie heißt. Der Aufruf kümmert sich dann um den Rest. Das ist besonders praktisch, wenn du in deiner App eine Funktion brauchst, um veraltete oder nicht mehr benötigte Dateien automatisiert zu entfernen. Schnell, sauber und direkt über die Microsoft Graph API – ohne extra Tools oder zusätzliche Konfigurationen.

PowerApps

Office 365 Groups

With(
    {
        Location: "groups/" & varGroupId,
        DocLib: Text(varGroupDrive.id),
        FolderPath: "Ordner Erste Ebene" & "/469eba52-101e-4947-9ddd-422ff157a5e6/",
        FileName: "book.xlsx"
    },
    Office365Groups.HttpRequestV2(
        "https://graph.microsoft.com/v1.0/" & Location & "/drives/" & DocLib & "/root:/" & FolderPath & "/" & FileName,
        "DELETE",
        JSON("")
    )
)

drives/{id}/root:/Path:/content


PUT – Datei Upload < 4MB

Wenn du mehrere Dateien von einem Gruppenordner in einen anderen kopieren willst, geht das erstaunlich einfach. Mit einem geschickten Zusammenspiel aus mehreren Aufrufen über HttpRequestV2 kannst du alle Dateien eines Quellordners abrufen und sie dann automatisch in einen neuen Zielordner hochladen. Dabei wird jede Datei heruntergeladen und mit einem neuen Pfad versehen wieder gespeichert – etwa in einem temporären Ordner mit eindeutiger ID. Ideal, wenn du eine Sicherung brauchst, Inhalte duplizieren oder Daten zwischen Projektstrukturen verschieben willst. Das Ganze läuft automatisiert im Hintergrund und spart dir eine Menge Klickarbeit.

PowerApps

Office 365 Groups

ForAll(
    Filter(
        With(
            {
                Location: "groups/" & varGroupId,
                DocLib: Text(varGroupDrive.id),
                FolderPath: "Ordner Erste Ebene" & "/Ordner Zweite Ebene/"
            },
            With(
                {
                    folderMeta: Office365Groups.HttpRequestV2(
                        "https://graph.microsoft.com/v1.0/" & Location & "/drives/" & DocLib & "/root:/" & FolderPath,
                        "GET",
                        ""
                    )
                },
                ForAll(
                    Office365Groups.HttpRequestV2(
                        "https://graph.microsoft.com/v1.0/" & Location & "/drives/" & DocLib & "/items/" & folderMeta.id & "/children",
                        "GET",
                        ""
                    ).value As _file,
                    {
                        '@microsoft.graph.downloadUrl': Text(_file.'@microsoft.graph.downloadUrl'),
                        name: Text(_file.name)
                    }
                )
            )
        ),
        '@microsoft.graph.downloadUrl'  Blank()
    ) As _file,
    With(
        {
            Location: "groups/" & varGroupId,
            DocLib: Text(varGroupDrive.id),
            FolderPath: "Ordner Erste Ebene" & $"/{GUID()}/",
            FileName: _file.name,
            FileContent: _file.'@microsoft.graph.downloadUrl'
        },
        Office365Groups.HttpRequestV2(
            "https://graph.microsoft.com/v1.0/" & Location & "/drives/" & DocLib & "/root:/" & FolderPath & "/" & FileName & ":/content",
            "PUT",
            FileContent
        )
    )
)

noch mehr interessante Beiträge

Nach oben scrollen