Stephanie Schenk
8 Mai 2024
Expertenbeiträge | 4 Min. Lesezeit

Meine Aufgabe war es, eine Excel-Tabelle mit Konten, die externe IDs enthalten, mit einem Power Automate Flow zu verarbeiten. Die Kontodatensätze mit den IDs aus der Exceltabelle befindet sich in einer Dataverse-Tabelle (Kontotabelle). Sowohl bei den externen IDs in der Excel-Datei als auch in der Dataverse-Tabelle wird zwischen Groß- und Kleinschreibung unterschieden. 

Der Power Automate Flow verarbeitet alle Zeilen der Excel-Tabelle. Für jede Zeile gibt es eine Dataverse-Abfrage, die den passenden Datensatz in der Dynamics-365-Kontentabelle finden soll.

Ich habe die Aktion „List Rows“ des Dataverse-Konnektors verwendet, um eine Liste der übereinstimmenden Zeilen in Dynamics 365 abzurufen, basierend auf dem Feld „msdyn_externalaccountid“ als Filterkriterium. Um die externe ID aus der Excel-Tabelle mit der externen ID des aktuellen Kontos abzugleichen, muss der Filterausdruck konfiguriert werden. Dabei stellte sich heraus, dass der OData-Filter der List Rows-Aktion leider standardmäßig die Groß- und Kleinschreibung nicht berücksichtigt. So war es unmöglich, das richtige Konto zu finden: Das Ergebnis von List Rows enthielt immer mehr als ein Konto, das eine externe ID mit der gleichen Zeichenfolge, aber mit unterschiedlicher Verwendung von Groß- und Kleinbuchstaben hatte. 

Die Dokumentation bestätigt auch, dass bei allen Filtern, die Zeichenkettenwerte verwenden, die Groß- und Kleinschreibung nicht berücksichtigt wird (mehr dazu). 

Ich habe versucht, den Expand Query-Filter im OData-Stil durch eine FetchXML-Abfrage zu ersetzen, wie im Screenshot weiter unten zu sehen. Das Ergebnis der List Rows-Aktion war immer noch nicht case-sensitive mit dem Filter FetchXML anstelle von Expand Query. 

Um das erwartete Ergebnis zu erhalten – nur einen Kontodatensatz mit genau der gleichen externen Konto-ID, wie sie in der aktuellen Excel-Zeile angegeben ist –, musste ich ein Workaround einsetzen. 

Schritt eins: Durchführung eines Vergleichs ohne Berücksichtigung der Groß-/Kleinschreibung, der mehr als einen Kontodatensatz aus Dataverse zurückgibt. 


Diese Abfrage liefert immer noch eine Liste von Kontodatensätzen mit ähnlichen externen Kontonummern. Sie enthält gleiche Zeichen, aber unterschiedliche Groß- und Kleinbuchstaben, aber wir werden mit dieser Liste im nächsten Schritt fortfahren. 

Schritt zwei: Filtern Sie das Ergebnis des ersten Schritts mit einer „Filter Array“-Aktion. Diese Aktion bietet die Möglichkeit, die Liste der Kontodatensätze, die von der Aktion „ Zeilen auflisten “ zurückgegeben wurde, nach Groß- und Kleinschreibung zu filtern. 


Erläuterung: 

  • Value ist die zurückgegebene Liste der List Rows Aktion. 
  • External ID ist Teil der zurückgegebenen Liste und ist das Feld, das mit dem Wert aus der Excel-Tabelle verglichen wird. 
  • Account ID ist der Wert aus der Excel-Tabelle. 

Der Vergleich findet nun zwischen den Feldern msdyn_externalaccountid (im Screenshot mit dem Anzeigenamen External ID versehen) aus der Kontotabelle und einem Feld aus der Excel-Tabelle statt, das „Account ID“ heißt. 

Auf den Wert aus der List Rows-Ausgabe kann mit der folgenden Formel zugegriffen werden:

 item()?['msdyn_externalaccountid'] 

Die Ausgabe der Filter-Array-Aktion ist nun ein Array, das nur die Zeilen mit der entsprechenden Bedingung enthält. 

Glücklicherweise wird bei diesem Vergleich zwischen Groß- und Kleinschreibung unterschieden, und mit diesem kleinen Workaround konnte ich den exakt passenden Datensatz in der D365-Kontentabelle finden, wobei die Groß- und Kleinschreibung des Feldes external account id berücksichtigt wurde. 

Für die weitere Verarbeitung des Flows kann die Ausgabe der Filter-Array-Aktion verwendet werden, zum Beispiel die Guid der gefilterten Kontozeile, die sich im Feld „ accountid “ befindet. 


Da das zurückgegebene Ergebnis ein Array ist, verwende ich die Funktion „ first “, um das erste (und wahrscheinlich einzige) Element des Arrays abzurufen: 

first(body('Filter_array_for_case_sensitive_external_account_id'))?['accountid']

Mit dieser ID kann in einem späteren Schritt der richtige Kontodatensatz in Dataverse aktualisiert werden.

Fazit 

Als Schlussfolgerung müssen wir das Ergebnis von List Rows nehmen, das mehr als die ausgenommenen Ergebniszeilen enthalten kann, und dann in einem zweiten Schritt die Funktionalität der Filter Array Aktion nutzen, die in der Lage ist, case-sensitiv zu filtern. Mit diesem Workaround kann das richtige Konto in Dataverse gefunden werden und wir können weitere Aktionen damit durchführen. 

 

Answering