RecordOf 関数と Type 関数
適用先: キャンバス アプリ
ユーザー定義関数と型指定されていない値で使用するユーザー定義型を構築します。
重要
- これらの関数は実験的なものです。
- 実験的な機能は運用を意図したものではないため、完全ではない可能性があります。 これらの機能は公式リリースの前に使用できるため、一足先にアクセスして フィードバックを送る ことができます。 詳細: キャンバス アプリで実験的、プレビューおよび廃止された機能を理解する
- この動作は、設定 > 近日公開の機能 > 実験的 のユーザー定義型の実験的機能がオンになっている場合にのみ有効です (既定ではオフになっています)。
- 皆様のフィードバックはとても貴重です。 ご意見やフィードバックにつきましては、Power Apps 実験的機能のコミュニティ フォーラム にお寄せください。
プロパティ
Power Fx のすべての関数は、パラメーターとして渡せる値の型と出力の型を定義しています。 数式を記述するときに型がチェックされ、期待されるものと一致しない場合はエラーが表示されます。 型はまた、エディタが関数に何を渡すべきかの良い選択肢を提案し、可能な限り早期にエラーを検出するためにも使用されます。
ユーザー定義関数を作成する際には、入力と出力の型を指定する必要があります。 Decimal や Text などの単純な型の場合、これらの基本型はあらかじめ定義されているので簡単です。 レコードやテーブルなど、より複雑な型の場合は、Type 関数を使用して型を作成します。
Type 関数によって、型付けされていないオブジェクトを扱いやすくなります。 ParseJSON、IsType、AsType 関数を使用すると、型付けされていないオブジェクトを型付けされたオブジェクトに変換することができます。
Type 関数は、唯一の引数として TypeSpecification を取ります。 最も単純な型指定は、たとえば Type( Text )
などの既存の型を参照することです。 レコードやテーブルの型指定は、リテラル値でレコードやテーブルを定義するのと似ていますが、値は型名に置き換えられます。 たとえば、{Name: "Jane"}
は Type( {Name: Text} )
と入力します。 テーブルは、Table 関数ではなく角かっこで指定します。 たとえば、[1,2,3]
は Type( [Number] )
と入力します。
テーブル タイプからレコード タイプを抽出するには、RecordOf 関数を使用します。 たとえば、Type( RecordOf( Library ) )
はライブラリから 1 冊の本の種類を返します。 レコード型からテーブル型を作成するには、レコード型を角かっこで囲みます。 たとえば、Type( [ Book ] )
はライブラリを定義します。
RecordOf は、Type 関数内でのみ使用できます。
Type 関数とそれが返す型値は、ParseJSON の 2 番目の引数など、Power Fx 内の特定の場所でのみ使用できます。 Canvas アプリでは、Type 関数を App.Formulas の名前付き数式で使用できます。
構文
RecordOf( TableType )
- TableType – 必須。 テーブルの型名。 これは型の指定は受け付けず、以前に定義されたテーブルの型の名前である必要があります。
Type( TypeSpecification )
- TypeSpecification – 必須です。 型の指定。
使用例
Type 関数
App.Formulas の次の定義について考慮してください:
Library =
[ { Title: "A Study in Scarlet", Author: "Sir Arthur Conan Doyle", Published: 1887 },
{ Title: "And Then There Were None", Author: "Agatha Christie", Published: 1939 },
{ Title: "The Marvelous Land of Oz", Author: "L. Frank Baum", Published: 1904 } ];
// Type definition for a single book
BookType := Type( { Title: Text, Author: Text, Published: Number } );
// Type definition for a table of books
LibraryType := Type( [ BookType ] );
実際のタイトル テキスト "A Study in Scarlet"
が、型指定の型名 Text
に置き換えられていることに注目してください。
BookType
型のパラメーターまたは変数は、Library
の本の 1 つを保持することができ、LibraryType
はテーブル全体を保持することができます。 これらの型を配置することで、これらのユーザー定義関数を定義できます。
SortedBooks( books: LibraryType ): LibraryType =
SortByColumns( Library, Author, SortOrder.Ascending, Title, SortOrder.Ascending );
PublishedInLeapYear( book: BookType ): Boolean =
Mod( book.Published, 4 ) = 0 And
(Mod( book.Published, 100 ) <> 0 Or Mod( book.Published, 400 ) = 0);
また、BookType
を使用して、本を含む JSON 文字列を解析することもできます。
ParseJSON( "{""Title"":""Gulliver's Travels"", ""Author"": ""Jonathan Swift"", ""Published"": 1900}", BookType
)
ParseJSON の 2 番目の引数に BookType
を使用すると、他の Power Fx レコードと同様に使用できる型付きレコードになります。
RecordOf 関数
たとえば Type 関数の例では、BookType
から始めて LibraryType
をテーブルで囲みます。 これらの型を逆に定義することもできます。
// Type definition for a table of books
RecordOfLibraryType := Type( [ { Title: Text, Author: Text, Published: Number } ] );
// Type definition for a single book
RecordOfBookType := Type( RecordOf( RecordOfLibraryType ) );