Usare oggetti non tipizzati e dinamici

Quando si tratta di azioni in Power Apps, è possibile incontrare valori restituiti non tipizzati o valori di input per alcune azioni. Prima, Power Apps avrebbe ignorato i campi di input non tipizzati o dinamici e non sarebbero stati visibili nelle espressioni PowerFX, ma ora puoi lavorare direttamente con questi campi. Prima, quando un tipo restituito non era digitato, Power Apps avrebbe restituito un valore booleano. Ora restituisce invece un oggetto non tipizzato.

Nota

Supponiamo che le espressioni Power Fx si basino su un valore restituito booleano da queste funzioni. In tal caso, dovrai riscrivere la formula e convertire esplicitamente l'oggetto non tipizzato in un valore booleano. Alcune funzioni, come "IfError", non supportano ancora completamente gli oggetti non tipizzati. Se l'espressione contiene tale funzione, fare riferimento alla nota alla fine di questo articolo per soluzioni alternative.

Passare oggetti non tipizzati come parametri

Alcune azioni richiedono un oggetto non tipizzato come valore di parametro. Se disponi di un record Power Fx, puoi convertirlo in un oggetto non tipizzato, rendendolo adatto per passare all'azione.

Nell'esempio seguente, l'azione di unione disponibile su una tabella Account Dataverse richiede diversi argomenti non tipizzati. Per prepararci, definiremo tre variabili per contenere TargetObject, SubordinateObject e UpdateContextObject. Inizieremo assegnando la stringa di testo Microsoft.Dynamics.CRM.account a una variabile, che verrà riutilizzata in tutto l'esempio.

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

Quindi TargetObject viene assegnato a un record Power Fx con le proprietà di name, accountid e @odata.type. Allo stesso modo assegniamo record Power Fx anche agli oggetti Subordinate e UpdateContext.

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 }); 

Successivamente, creeremo altre tre variabili per archiviare i record non tipizzati dopo la conversione: TargetUntypedObject, SubordinateUntypedObject e UpdateContextUntypedObject. Per eseguire la conversione, utilizzeremo la funzione ParseJSON(JSON()) sulle variabili originali. Questa azione trasformerà i record Power Fx in oggetti non tipizzati.

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

Infine, chiamiamo l'operazione di unione passando i parametri necessari, sia per non tipizzato che per tipizzato:

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

Utilizzo di un oggetto non tipizzato restituito tramite un'azione

Se un connettore basato su Azione restituisce un oggetto, è possibile accedere direttamente alle sue proprietà, indipendentemente dal fatto che sia stato loro assegnato un tipo. Tuttavia, se intendi utilizzare una proprietà per uno scopo specifico in Power Apps, ad esempio per l'etichettatura, dovrai prima trasmetterla.

Nell'esempio seguente, la funzione httpRequest restituisce un oggetto non tipizzato di cui è stato precedentemente eseguito il cast come booleano.

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

Una delle proprietà nella risposta è displayName. È possibile accedervi e trasmetterlo con un'espressione Power Fx come la seguente:

Text(response.displayName)

Trasmetti all'oggetto Testo per usarlo in un controllo etichetta Power Apps.

Utilizzare campi Dynamics

Le risposte all'azione ora acquisiscono l'output dinamico e puoi utilizzare il metodo descritto sopra per accedere a queste proprietà. Inoltre, è anche possibile lavorare con campi di input dinamici.

Considera l'azione "GetMessageDetails" in Microsoft Teams che ha un parametro del corpo di input dinamico. In precedenza, questo parametro non poteva essere visualizzato o specificato. Con il recente aggiornamento, puoi impostare una variabile chiamata 'body' con l'appropriata struttura di record Power Fx.

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

Quindi, possiamo chiamare l'azione GetMessageDetails e assegnare la risposta alla variabile teamsResponse.

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

Conversione di formule che restituiscono oggetti non tipizzati che in precedenza hanno restituito valori booleani.

Power Fx accetta un numero limitato di oggetti non tipizzati, quindi potrebbe essere necessaria una conversione esplicita per la tua formula. In particolare, se la tua formula dipende da una risposta booleana, dovrai eseguire la conversione. Se devi solo sapere se esiste un errore, puoi usare la funzione IsError:

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

Per accedere alle informazioni sull'errore disponibili esclusivamente tramite IfError, è necessario trasformare l'oggetto non tipizzato in un tipo valido utilizzando una funzione di conversione come Boolean, Text o Value. Queste funzioni produrranno un errore se ne viene fornito uno. Nell'esempio seguente viene illustrato questo:

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)
) ) )