Power Automate: Mehrzeiliges Textfeld eines SharePoint-Eintrags per JSON in einen anderen Eintrag übertragen

Über einen Power Automate Flow kann man z.B. auf einer SharePoint Dokumentenbibliothek über der Trigger „Wenn eine Datei erstellt oder geändert wird (nur Eigenschaften)“ lauschen, ob sich wie der Trigger sagt, etwas neu erstellt wurde oder etwas geändert wurde. Mit Hilfe von Triggerbedingungen kann man die Flow Ausführung dann noch weiter steuern, um z.B. nur aufgerufen zu werden, wenn ein bestimmtes Feld einen bestimmten Wert hat. Beispiel einer Triggerbedingung ist:

@and(equals(triggerBody()?['Vorgangsstatus']?['Value'],'Flow Tue jetzt was'), equals(triggerBody()?['{ContentType}']?['Name'],'Spezialdatei'))

Hier wird der Flow nur ausgelöst, wenn der Vorgangsstatus den Wert „Flow Tue jetzt was“ und der ContentType den Namen „Spezialdatei“ hat. Das „@“ am Anfang ist wichtig! Aber darum soll es hier gar nicht gehen.

Wenn Ihr jetzt bezogen auf den getriggerten Datensatz Werte von diesem Datensatz zu einem anderen Datensatz in einer anderen Dokumentenbibliothek übertragen wollt, könnt Ihr, wenn Ihr die andere Dokumentenbibliothek kennt, die Aktion „Dateieigenschaften aktualisieren“ verwenden. Nach der Auswahl der Site und der Dokumentenbibliothek, müsst Ihr nur noch eine ID des zu ändernden Datensatzes eingeben und erhaltet alle über den Flow änderbaren Werte des Datensatzes angezeigt zum Ändern.

Wenn Ihr allerdings die Aktion „Dateieigenschaften aktualisieren“ mit einem dynamischen Wert für die Websiteadresse z.B. über eine Variable füttern und auch den Bibliotheksnamen genauso, dann könnt Ihr noch eine ID angeben und danach „nur“ noch im Pflichtfeld „Element“ ein JSON für den zu aktualisierenden Datensatz angeben.

Hier gibt es jetzt einiges zu beachten.

Ich verwende eine Zeichenfolgenvariable, in der ich den JSON Inhalt einfüge. Dazu erstelle ich innerhalb der geschweiften JSON Klammern {} für jede Spalte einen Eintrag mit „Spaltenname“: „Neuer Spaltenwert“ und trenne die Spalten durch ein Komma.

Für die Spaltennamen sind die internen Bezeichnungen zu verwenden und nicht die Anzeigenamen. Also bei einer Spalte mit dem Anzeigenamen „Ich bin eine Spalte“ den internen Namen „Ich_x0020_bin_x0020_eine _x0020_Spalte“. Die internen Namen erhaltet Ihr, indem Ihr im SharePoint bei der Liste oder Dokumentenbibliothek auf die Einstellungen geht, dort die Spalte zum Bearbeiten anklickt und Euch die URL der Bearbeitungsseite anschaut. Dort gibt es ganz am Ende den Query String Parameter Field und hinter dem Gleichzeichen steht der interne Spaltenname:

https://<EurerSharePoint>.sharepoint.com/sites/<EureSite>/_layouts/15/FldEdit.aspx?List=%7B<ListGUID>%7D&Field=Ich_x0020_bin_x0020_eine _x0020_Spalte

Gerade bei mehrzeiligen Textfeldern verwenden die Anwender gerne mal zur Zeilentrennung ein <Enter> und einige Sonderzeichen wie z.B. \ oder „. In einem JSON String, haben diese Zeichen so einfach wie sie aus dem Quelldatensatz kommen aber nichts zu suchen. Denn wenn ich „Titel“:“Bezeichnung“ habe, kann ich nicht „Titel“:“Bezeich“nung“ haben. Für ein valides JSON muss dort „Titel“:“Bezeich\“nung“ stehen und bei einem \ die beiden \\. Es muss bei einigen Zeichen „escaped“ werden. Aus diesem Grund nutze ich folgendes If-Statement, um die Werte aus dem Quelldatensatz in den JSON String einzutragen:

if(equals(coalesce(triggerOutputs()?['body/Speziellebezeichnung'],'NULL'),'NULL'),'',replace(replace(triggerOutputs()?['body/Speziellebezeichnung'],'\', '\'),'"','\"'))

Der erste Teil mit dem equals und coalesce und NULL prüft, ob der Inhalt des Quelldatensatzes leer ist. Wenn ja, wird ein leerer String “ zurückgegeben. Wenn es doch Inhalt gibt, dann werden der Backslash und die Anführungszeichen ersetzt.

Ich habe einige versucht mit der Ersetzung der Entertaste, also z.B. der Ersetzung von Char(10) und Char(13) oder ich habe mir über Verfassen einfach nur einen Enter-Eintrag geholt und den ersetzt zu „\r\n“. Das ging auch, nur konnte ich dann trotzdem nicht den String über die SharePoint Aktion Richtung SharePoint schicken. Es kam „Bad Gateway“, was auch die initiale Fehlermeldung war.

Mit Hilfe vom Befehl JSON() kann die Variable dann in das „Element“-Element der Aktion „Dateieigenschaften aktualisieren“ gepackt werden, welches sich so automatisch um die Konvertierung der Entertaste in korrektes JSON gekümmert hat:

json(variables('varElementJson'))

Soweit mal ein Erfahrungsbericht aus der Praxis zum übertragen von mehrzeiligen Textfeldern von einem SharePoint Element zu einem anderen SharePoint Element.