| Function | Applies to |
|---|---|
| AsType |
|
| IsType |
|
レコード参照が特定のテーブル型 (IsType) であるかどうかを確認し、その参照をその型 (AsType) として扱います。
Note
PAC CLI pac power-fx コマンド では、 IsTypeはサポートされていません。
Description
AsType関数とIsType関数を使用して、レコード参照 (Dataverse のポリモーフィックな参照など) と動的な値を、直接使用できる型指定された値に変換できます。
Record References
概要と詳細については、レコード参照とポリモーフィック ルックアップについてを参照してください。
ルックアップ フィールドは通常、特定のテーブルのレコードを参照します。 テーブル タイプは十分に確立されているため、単純なドット表記を使用してルックアップのフィールドにアクセスできます。 例えば、最初の (取引先企業)。'取引先責任者'。'フルネーム' は、取引先担当者 テーブルの 取引先企業 テーブルから 取引先責任者 レコードをウォークし、フルネーム フィールドを抽出します。
Microsoft Dataverse は、これらの例のように、テーブルのセットからレコードを参照できるポリモーフィック ルックアップ フィールドもサポートします。
| Lookup field | 以下を参照 |
|---|---|
| Owner | ユーザーまたはチーム |
| Customer | 取引先企業または取引先担当者 |
| Regarding | 取引先企業、取引先担当者、サポート情報記事、など。 |
キャンバス アプリの数式では、レコード参照を使用してポリモーフィックなルックアップを処理します。 レコード参照は異なるテーブルを参照できるため、数式を記述するときに実行時に使用できるフィールドを把握できません。 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'
)
これらの関数は、レコード参照のフィールドにアクセスする場合にのみ必要です。 たとえば、やを使用せずにAsType 関数でレコード参照を使用します。
Filter( Accounts, Owner = First( Users ) )
同様に、レコード参照を Patch 関数と共に使用することもできます。
Patch( Accounts, First( Accounts ), { Owner: First( Teams ) } )
ギャラリーまたは編集フォーム コントロール内などのレコード コンテキストでこれらの関数を使用する場合は、テーブルの種類を参照するためにグローバルなあいまいさを解消する演算子が必要になる場合があります。 たとえば、この数式は、 会社名 が 顧客 参照である連絡先の一覧を表示するギャラリーに対して機能します。
If( IsType( ThisItem.'Company Name', Accounts ),
AsType( ThisItem.'Company Name', Accounts ).'Account Name',
AsType( ThisItem.'Company Name', Contacts ).'Full Name'
)
どちらの関数でも、テーブルに接続されているデータ ソースの名前を使用して型を指定します。 数式を機能させるには、確認またはキャストする任意の型のデータ ソースをアプリに追加します。 たとえば、所有者の参照とテーブルのレコードでIsTypeとAsTypeを使用する場合は、Users テーブルをデータ ソースとして追加します。 アプリで使用するデータ ソースのみを追加します。参照で参照できるすべてのテーブルを追加する必要はありません。
レコード参照が 空白の場合、 IsType は FALSE を返し、 AsType は 空白を返します。 空白レコードのすべてのフィールドも、空白になります。
Dynamic values
Power Fx で使用するには、Web API または [ParseJSON 関数] の動的値を特定の型指定された値に変換する必要があります。 いくつかのオプションを次に示します。
- 使用する時点でフィールドを暗黙的に入力します。 たとえば、
+演算子で使用する場合、オブジェクトは数値に変換されます (数値に変換できる場合)。 このオプションでは、予期しない変換が発生する可能性があり、レコードとテーブル全体を変換できません。 - Decimal、Text、DateTime、GUID、およびその他の型コンストラクター関数を使用して、各フィールドを個別に明示的に型指定します。 このオプションは、各フィールドを個別に行う必要があるため、数式に最も悪影響を与えます。
- ParseJSON 関数の 2 番目の引数を使用して JSON を明示的に型を指定します。 このオプションは簡単で、 動的 な値が不要になります。
- 関数を使用してAsType値を明示的に入力します。 IsType関数を使用して変換を試す前に、型を確認することもできます。
Syntax
AsType( RecordReference、 TableType )
- RecordReference - 必須。 レコード参照。多くの場合、複数のテーブルのレコードを参照するルックアップ フィールドです。
- TableType - 必須。 レコードをキャストする特定のテーブル。
AsType( DynamicValue、 TypeSpecification )
- DynamicValue - 必須。 ParseJSON 関数または API 呼び出しからの動的な値。
- TypeSpecification - 必須です。 Type 関数で定義する型名または型指定。
IsType( RecordReference、 TableType )
- RecordReference - 必須。 レコード参照。多くの場合、複数のテーブルのいずれかのレコードを参照できるルックアップ フィールド。
- TableType - 必須。 テスト対象の特定のテーブル。
IsType( DynamicValue、 TypeSpecification )
- DynamicValue - 必須。 ParseJSON 関数または API 呼び出しからの動的な値。
- TypeSpecification - 必須です。 Type 関数で定義された型名または型指定。
Examples
Record References
レコード参照とポリモーフィック ルックアップについてには、豊富な例が含まれています。
タブレット用の空白のキャンバス アプリを作成します。
左側のウィンドウで、[データ] > [データの追加] を選択し、[取引先企業] テーブルと [連絡先] テーブルを追加します。
左側のウィンドウで、 + (挿入) >Layout>Blank 垂直ギャラリーを選択します。
データに接続 を選択して、次にデータ ソースとして 取引先担当者 を選択します。
ギャラリーレイアウトを タイトルとサブタイトルに設定します。
データ ウィンドウで、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' )
ギャラリーのサブタイトルはこれらの値を示しています。
- もし会社名が空白の場合は、"--" となります。
- "Account: " と Accounts テーブルの [アカウント名] フィールド (会社名フィールドが取引先企業を参照している場合)。
- [会社名] フィールドが連絡先を参照している場合は、[連絡先: ] と [連絡先] テーブルの [氏名] フィールド。
サンプル データを変更してより多くの種類の結果を表示できるため、結果が異なる場合があります。
Dynamic values
次の例は、Pac CLI Power Fx REPL で AsType、IsType、によってさまざまな方法で解釈される単純な JSON レコードを示しています。
この最初の例では、 ParseJSON に型情報が提供されないため、動的な値が返されます。
>> Set( rec, ParseJSON( "{""a"":1}" ) )
rec: <Dynamic: 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