AsType 関数と IsType 関数
適用対象: Canvas アプリ
モデル駆動型アプリ
Power Pages
Power Platform CLI
特定テーブル タイプ (IsType) のレコード参照をチェックして、参照を特定タイプ (AsType) として扱います。
ヒント
PAC CLI pac power-fx コマンドは IsType をサポートしていません。
プロパティ
AsType と IsType 関数を使用すると、レコード参照 (Dataverse のポリモーフィック ルックアップなど) と型指定されていないオブジェクトを、直接使用できる型指定されたオブジェクトに変換できます。
レコードの参照
概要と詳細については、レコード参照とポリモーフィック ルックアップについてを参照してください。
ルックアップ フィールドは通常、特定のテーブルのレコードを参照します。 テーブル タイプは十分に確立されているため、単純なドット表記を使用してルックアップのフィールドにアクセスできます。 例えば、最初の (取引先企業)。'取引先責任者'。'フルネーム' は、取引先担当者 テーブルの 取引先企業 テーブルから 取引先責任者 レコードをウォークし、フルネーム フィールドを抽出します。
Microsoft Dataverse は、これらの例のように、テーブルのセットからレコードを参照できるポリモーフィック ルックアップ フィールドもサポートします。
検索フィールド | 以下を参照 |
---|---|
担当者 | ユーザーまたはチーム |
顧客 | 取引先企業または取引先担当者 |
関連 | 取引先企業、取引先担当者、サポート情報記事、など。 |
キャンバス アプリの数式では、レコード参照を使用してポリモーフィックなルックアップを処理します。 レコード参照は異なるテーブルを参照することができるため、数式を記述する際に実行時にどのフィールドが使用可能であるかが不明確です。 Record.Field 表記は使用できません。 これらの数式は、アプリの実行時にアプリが検出するレコードに合わせて適応させる必要があります。
IsType 関数は、レコード参照が特定のテーブルタイプを参照しているかどうかをテストします。 関数はブール値の TRUE または FALSE を返します。
AsType 関数は、レコード参照を特定のテーブル タイプとして扱います。これは、キャスト と呼ばれています。 結果をテーブルのレコードであるかのように使用して、もう一度 Record.Field 表記を使って、そのレコードのすべてのフィールドにアクセスすることができます。 参照が特定の種類ではない場合、エラーが発生します。
これらの関数を一緒に使用して、最初にレコードのテーブルタイプをテストし、次にそれをそのタイプのレコードとして扱い、フィールドを使用できるようにします。
If( IsType( First( Accounts ).Owner, Users ),
AsType( First( Accounts ).Owner, Users ).'Full Name',
AsType( First( Accounts ).Owner, Teams ).'Team Name'
)
これらの関数は、レコード参照のフィールドにアクセスする場合にのみ必要となります。 たとえば、レコード参照を Filter 関数で IsType または AsType なしで使用できます。
Filter( Accounts, Owner = First( Users ) )
同様に、レコード参照を Patch 関数と共に使用することもできます。
Patch( Accounts, First( Accounts ), { Owner: First( Teams ) } )
Gallery または Edit フォーム コントロール内などのレコードコンテキストで使用される場合、グローバル曖昧性解消演算子 を使用してテーブル タイプを参照する必要性がある場合もあります。 たとえば次の式は、会社名が顧客ルックアップである取引先担当者のリストを表示するギャラリーに有効です。
If( IsType( ThisItem.'Company Name', Accounts ),
AsType( ThisItem.'Company Name', Accounts ).'Account Name',
AsType( ThisItem.'Company Name', Contacts ).'Full Name'
)
どちらの関数でも、テーブルに接続されているデータ ソースの名前を使用してタイプを指定します。 数式を機能させるには、テストまたはキャストする種類のアプリにデータ ソースも追加する必要があります。 たとえば、IsType と AsType を 所有者 ルックアップとそのテーブルからのレコードと使用する場合、ユーザー テーブルをデータ ソースとして追加しなければなりません。 アプリで実際に使用するデータソースのみを追加できます。ルックアップが参照できるすべてのテーブルを追加する必要はありません。
レコード参照が空白の場合、IsType は FALSE を返し、AsType は空白を返します。 空白レコードのすべてのフィールドも、空白になります。
型指定されていないオブジェクト
重要
- 型付けされていないオブジェクトで AsType と IsType を使用するのは実験的な機能です。
- 実験的な機能は本番用ではなく、完全ではない可能性があります。 これらの機能は公式リリースの前に使用できるため、一足先にアクセスして フィードバックを送る ことができます。 詳細: キャンバス アプリで実験的、プレビューおよび廃止された機能を理解する
- この記事で説明されている動作は、設定 > 今後リリースの機能 > 実験的 のユーザー定義の型の実験的機能がオンになっている場合にのみ利用可能です (既定ではオフになっています)。
- お客様のフィードバックは弊社にとって重要です。 ご意見やフィードバックにつきましては、Power Apps 実験的機能のコミュニティ フォーラム にお寄せください。
Web API または ParseJSON 関数の型指定されていないオブジェクトは、Power Fxで使用する前に型指定されたオブジェクトに変換する必要があります。 これを行うオプションには、次のものがあります:
- フィールドが使用された時点で暗黙的に型付けされます。 たとえば、オブジェクトを
+
演算子と共に使用すると、オブジェクトは数値に変換されます (数値に変換できる場合)。 このオプションでは、予期しない変換が行われる可能性があり、レコードとテーブル全体を変換することはできません。 - Decimal、Text、DateTime、GUID、およびその他の型コンストラクター関数を使用して、各フィールドを個別に明示的に型指定します。 これは、各フィールドを個別に行う必要があるため、数式に対して最も侵襲的なアプローチです。
- ParseJSON 関数の 2 番目の引数を使用して JSON を明示的に型を指定します。 これは、型指定されていないオブジェクトを必要としない簡単なオプションです。
- 型指定されていないオブジェクトを AsType 関数を使用して明示的に型指定します。 また、IsType 関数を使用して、変換を試みる前に型をテストすることもできます。
構文
AsType (RecordReference、TableType)
- RecordReference - 必須。 レコード参照。多くの場合、複数のテーブルのいずれかのレコードを参照できるルックアップ フィールド。
- TableType - 必須。 レコードのキャスト先となる特定のテーブル。
AsType( 型指定されていないオブジェクト、型指定 )
- UntypedObject - 必須です。 レコード参照。多くの場合、複数のテーブルのいずれかのレコードを参照できるルックアップ フィールド。
- TypeSpecification - 必須です。 Type 関数で定義された型名または型指定。
IsType (RecordReference、TableType)
- RecordReference - 必須。 レコード参照。多くの場合、複数のテーブルのいずれかのレコードを参照できるルックアップ フィールド。
- TableType - 必須。 テストする特定のテーブル。
IsType( 型指定されていないオブジェクト、型指定 )
- UntypedObject - 必須です。 レコード参照。多くの場合、複数のテーブルのいずれかのレコードを参照できるルックアップ フィールド。
- TypeSpecification - 必須です。 Type 関数で定義された型名または型指定。
使用例
レコードの参照
レコード参照とポリモーフィック ルックアップについてには、豊富な例が含まれています。
タブレット用の空白のキャンバス アプリを作成します。
左側のペインで、データ>データの追加 を選択します。 そして、取引先企業 テーブルと 取引先担当者 テーブルを追加します。
左側のペインで、+ (挿入) >レイアウト>空白の垂直ギャラリー を選択します。
データに接続 を選択して、次にデータ ソースとして 取引先担当者 を選択します。
ギャラリーのレイアウトを、タイトルとサブタイトルに設定します。
データ ウィンドウで、Title1 リストを開き、氏名を選択します。
Subtitle1 のラベル コントロールを選択します。
Subtitle1 の Text プロパティを次の数式に設定します。
If( IsBlank( ThisItem.'Company Name' ), "--", IsType( ThisItem.'Company Name', Accounts ), "Account: " & AsType( ThisItem.'Company Name', Accounts ).'Account Name', "Contact: " & AsType( ThisItem.'Company Name', Contacts ).'Full Name' )
ギャラリーのサブタイトルはこれらの値を示しています。
- もし会社名が空白の場合は、"--" となります。
- "取引先企業:" 会社名 フィールドが取引先企業を参照する場合は、その後 取引先企業テーブルからの 取引先企業名 フィールド。
- "取引先担当者:" 会社名 フィールドが取引先担当者を参照する場合は、その後 取引先担当者テーブルからの フルネーム フィールド。
より多くの種類の結果を表示するようにサンプル データが変更されている可能性があるため、結果が異なる場合があります。
型指定されていないオブジェクト
次の例は、Pac CLI Power Fx REPL の ParseJSON、AsType、IsType によってさまざまな方法で解釈される単純な JSON レコードを示しています。
この最初の例では、型情報が ParseJSON に提供されないため、型指定されていないオブジェクトを返します。
>> Set( rec, ParseJSON( "{""a"":1}" ) )
rec: <Untyped: Use Value, Text, Boolean, or other functions to establish the type>
このフィールドは、数値のコンテキストで使用される場合、暗黙的に数値に変換されます。
>> 1 + rec.a
2
たとえば、この例では ParseJSON の第 2 引数でレコードを型付き Power Fx レコードに明示的に変換しています。
>> ParseJSON( "{""a"":1}", Type( {a: Number} ) )
{a:1}
そしてもう一つの選択肢として、このたとえばでは AsType を使ってレコードを型指定された Power Fx レコードに明示的に変換しています。
>> AsType( ParseJSON( "{""a"":1}" ), Type( {a: Number} ) )
{a:1}
最後に、確信が持てない場合は、この例では IsType 関数で変換する前に型をテストしています。
>> IsType( ParseJSON( "{""a"":1}" ), Type( {a: Number} ) )
true