型指定されていないオブジェクトや動的オブジェクトを操作する

Power Apps でアクションを扱うとき、一部のアクションでは型指定されていない戻り値または入力値が発生する可能性があります。 以前は、Power Apps は型指定されていないまたは動的入力フィールドを無視し、PowerFX 式では表示されませんでしたが、これらのフィールドを直接操作できるようになりました。 以前は、戻りの種類が型指定されていないと、Power Apps はブール値を返していました。 現在は、代わりに型指定されていないオブジェクトを返します。

注意

ユーザーの Power Fx 式が、これらの関数からのブール戻り値に依存しているとします。 その場合、式を書き直して、型指定されていないオブジェクトをブール値に明示的にキャストする必要があります。 「IfError」などの特定の関数は、まだ型指定されていないオブジェクトを完全にはサポートしていません。 式にそのような関数が含まれている場合は、この記事の最後にある回避策を参照してください。

型指定されていないオブジェクトをパラメーターとして渡す

特定のアクションでは、型指定されていないオブジェクトがパラメーター値として必要になります。 Power Fx レコードがある場合、型指定されていないオブジェクトに変換して、アクションに渡すのに適した状態にすることができます。

以下の例では、Dataverse アカウント テーブルで利用可能なマージ アクションには、いくつかの型指定されていない引数が必要です。 準備として、TargetObject、SubordinateObject、UpdateContextObject を保持する 3 つの変数を定義します。 テキスト文字列 Microsoft.Dynamics.CRM.account を変数に割り当てることから始め、これが例全体で再利用されます。

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

次に、TargetObject が name、accountid、@odata.type のプロパティを持つ Power Fx レコードに割り当てられます。 同様に Power Fx レコードを Subordinate および 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 }); 

次に、変換後に型指定されていないレコードを格納するために、さらに 3 つの変数を作成します: TargetUntypedObject、SubordinateUntypedObject、UpdateContextUntypedObject。 変換を実行するには、元の変数で ParseJSON(JSON()) 関数を使用します。 このアクションでは、Power Fx レコードを型指定されていないオブジェクトに変換します。

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

最後に、型指定されていないおよび型指定されている両方を含む、必要なパラメーターを渡すことで、マージ アクションを呼び出します。

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

アクションを介して返された型指定されていないオブジェクトを使用する

アクション ベースのコネクタがオブジェクトを返す場合、型が割り当てらたかどうかに関係なく、そのプロパティに直接アクセスできます。 ただし、ラベル付けなど、Power Apps でプロパティを特定の目的で使用する場合は、最初にキャストする必要があります。

次の例では、httpRequest 関数は、以前にブール値としてキャストされた型指定されていないオブジェクトを返します。

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

応答のプロパティの 1 つは、displayName です。 次のような Power Fx 式を使用して、アクセスおよびキャストできます:

Text(response.displayName)

オブジェクト テキストにキャストして、Power Apps ラベル コントロールで使用します。

Dynamics フィールドを操作する

アクション応答は動的出力をキャプチャするようになり、上記の方法を利用してこれらのプロパティにアクセスできます。 さらに、動的入力フィールドでの操作も可能です。

動的入力本文パラメーターを持つ Microsoft Teams での 'GetMessageDetails' アクションを検討してください。 以前は、このパラメーターを表示または指定することはできませんでした。 最近の更新では、適切な Power Fx レコード構造を持つ「本文」という変数を設定できます。

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

次に、GetMessageDetails アクションを呼び出して、応答を teamsResponse 変数に割り当てることができます。

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

以前はブール値を返していた、型指定されていないオブジェクトを返す数式を変換しています。

Power Fx では、限られた数の型指定されていないオブジェクトを使用するため、数式に明示的な変換が必要な場合があります。 特に、式がブール値応答に依存している場合は、変換が必要です。 単純にエラーが存在するかどうかを知る必要がある場合は、IsError 関数を使用できます:

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

IfError を介して排他的に利用できるエラー情報にアクセスするには、ブール値、テキスト、または値などの変換関数を使用して、型指定されていないオブジェクトを有効な型に変換する必要があります。 これらの関数は、指定された場合にエラーを生成します。 次の例は、これを示しています:

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