Freigeben über


Arbeiten mit untypisierten und dynamischen Objekten

Beim Umgang mit Aktionen in Power Apps, ist es möglich, dass bei einigen Aktionen nicht typisierte Rückgabewerte oder Eingabewerte auftreten. Zuvor hätte Power Apps nicht typisierte oder dynamische Eingabefelder ignoriert und sie wären in PowerFX-Ausdrücken nicht sichtbar gewesen, aber jetzt können Sie direkt mit diesen Feldern arbeiten. Zuvor hätte Power Apps einen booleschen Wert zurückgegeben, wenn ein Rückgabetyp nicht typisiert war. Jetzt gibt es stattdessen ein nicht typisiertes Objekt zurück.

Hinweis

Angenommen Ihre Power Fx Ausdrücke verlassen sich auf einen booleschen Rückgabewert dieser Funktionen. In diesem Fall müssen Sie die Formel neu schreiben und das nicht typisierte Objekt explizit in einen booleschen Wert umwandeln. Bestimmte Funktionen wie „IfError“ unterstützen noch nicht vollständig untypisierte Objekte. Wenn Ihr Ausdruck eine solche Funktion enthält, lesen Sie den Hinweis am Ende dieses Artikels für Problemumgehungen.

Übergeben von nicht typisierten Objekten als Parameter

Bestimmte Aktionen erfordern ein untypisiertes Objekt als Parameterwert. Wenn Sie einen Power Fx Datensatz haben, können Sie ihn in ein nicht typisiertes Objekt konvertieren, wodurch es für die Übergabe an die Aktion geeignet ist.

Im folgenden Beispiel benötigt die Zusammenführungsaktion für eine Dataverse Konto-Tabelle mehrere nicht typisierte Argumente. Zur Vorbereitung definieren wir drei Variablen für TargetObject, SubordinateObject und UpdateContextObject. Wir beginnen mit der Zuweisung der Textzeichenfolge Microsoft.Dynamics.CRM.Konto in eine Variable, die im gesamten Beispiel wiederverwendet wird.

Set (OdataType, “Microsoft.Dynamics.CRM.account”);

Dann wird TargetObject einem Power Fx Datensatz mit den Eigenschaften Name, Konto-ID und @odata.type zugewiesen. Auf die gleiche Weise weisen wir Power Fx Datensätze auch denuntergeordneten und UpdateContext-Objekten zu.

Set (TargetObject, {name: "Test 2", accountid: "145dc2ba-85a2-ed11-aado-0022482d76a5", '@odata.type': OdataType});
Set (SubordinateObject, {name: FirstRecord.’Account name’, accountid: FirstRecord.Account, ‘@odata.type’ : OdataType });
Set (UpdateContextObject, {telephone1: FirstRecord.’Main Phone’, address1_city: FirstRecord.’Address 1 : City’, ‘@odata.type’ : OdataType }); 

Als Nächstes erstellen wir drei weitere Variablen zum Speichern der nicht typisierten Datensätze nach der Konvertierung: TargetUntypedObject, SubordinateUntypedObject und UpdateContextUntypedObject. Um die Konvertierung durchzuführen, verwenden wir die Funktion ParseJSON(JSON()) für die ursprünglichen Variablen. Diese Aktion wird die Power Fx Datensätze in nicht typisierte Objekte umwandeln.

Set (TargetUntypedObject, ParseJSON(JSON(TargetObject)));
Set (SubordinateUntypedObject, ParseJSON(JSON(SubordinateObject)));
Set (UpdateContextUntypedObject, ParseJSON(JSON(UpdateContextObject)));

Zuletzt rufen wir die Zusammenführungsaktion auf, indem wir die erforderlichen Parameter übergeben, einschließlich für nicht typisierte und typisierte:

Environment.Merge({Target: TargetUntypedObject, Subordinate: SubordinateUntypedObject, UpdateContent: UpdateContextUntypedObject, PerformParentingChecks: false  });

Verwenden eines nicht typisierten Objekts, das über eine Aktion zurückgegeben wird

Wenn ein Aktion basierter Konnektor ein Objekt zurückgibt, kann direkt auf seine Eigenschaften zugegriffen werden, unabhängig davon, ob ihnen ein Typ zugewiesen wurde. Wenn Sie jedoch beabsichtigen, eine Eigenschaft für einen bestimmten Zweck in Power Apps zu nutzen, wie beispielsweise beschriften, müssen Sie es zuerst umwandeln.

Im folgenden Beispiel gibt die httpRequest-Funktion ein nicht typisiertes Objekt zurück, das zuvor in einen booleschen Wert umgewandelt wurde.

Set (response, Office365Groups.HttpRequest("/v1.0/me", "GET", ""));

Eine der Eigenschaften in der Antwort ist displayName. Zugriff und Umwandlung kann mit einem Power Fx Ausdruck wie der folgende erfolgen:

Text(response.displayName)

Umwandung in das Objekt Text, um es in einem Power Apps Beschriftungssteuerelement zu verwenden.

Arbeiten mit Dynamics-Feldern

Aktionsantworten erfassen jetzt dynamische Ausgaben, und Sie können die oben beschriebene Methode verwenden, um auf diese Eigenschaften zuzugreifen. Zusätzlich ist auch das Arbeiten mit dynamischen Eingabefeldern möglich.

Betrachten Sie die Aktion „GetMessageDetails“ in Microsoft Teams , die über einen dynamischen Eingabetextparameter verfügt. Bisher konnte dieser Parameter nicht angezeigt oder angegeben werden. Mit der letzten Aktualisierung können Sie eine Variable namens „body“ mit der entsprechenden Power Fx Datensatzstruktur festlegen.

Set ( body, ParseJSON(JSON( {recipient: { groupID: “7f733b36-7c7f-4f4c-9699-0a7b7a2b3897”, channelID: “19: 085d522328fb4a439220641006f7f25@thread.tacv2”}}));

Anschließend können wir die Aktion „GetMessageDetails“ aufrufen und die Antwort der Variablen „teamsResponse“ zuweisen.

Set (teamsResponse, MicrosoftTeams.GetMessageDetails ( 1661365068558, “channel”, body ));

Konvertieren von Formeln, die nicht typisierte Objekte zurückgeben, die zuvor Boolean zurückgegeben haben.

Power Fx nimmt eine begrenzte Anzahl nicht typisierter Objekte, sodass für Ihre Formel möglicherweise eine explizite Konvertierung erforderlich ist. Insbesondere wenn Ihre Formel von einer booleschen Antwort abhängt, müssen Sie konvertieren. Wenn Sie einfach wissen müssen, ob ein Fehler vorliegt, können Sie die IsError-Funktion verwenden:

If(
  IsError(Office365Outlook.CalendarDeleteItemV2("Calendar", 1)),
  Notify("An Outlook appointment could not be found or could not be deleted")
)

Um auf Fehlerinformationen zuzugreifen, die ausschließlich über IfError verfügbar sind, müssen Sie das nicht typisierte Objekt mithilfe einer Konvertierungsfunktion wie Boolean, Text oder Value in einen gültigen Typ umwandeln. Diese Funktionen erzeugen einen Fehler, wenn ihnen einer gegeben wird. Das folgende Beispiel zeigt dieses Problem:

With({result: Office365Outlook.CalendarDeleteItemV2("Calendar", 1)},
If( IsError(result),
  IfError(
    Boolean(result),  // any conversion function would do, such as Text, Value, …
    Notify("An Outlook appointment could not be found or could not be deleted: " & FirstError.Message)
) ) )