次の方法で共有


RecordOf 関数と Type 関数

適用先: キャンバス アプリ

ユーザー定義関数と型指定されていない値で使用するユーザー定義型を構築します。

重要

プロパティ

Power Fx のすべての関数は、パラメーターとして渡せる値の型と出力の型を定義しています。 数式を記述するときに型がチェックされ、期待されるものと一致しない場合はエラーが表示されます。 型はまた、エディタが関数に何を渡すべきかの良い選択肢を提案し、可能な限り早期にエラーを検出するためにも使用されます。

ユーザー定義関数を作成する際には、入力と出力の型を指定する必要があります。 DecimalText などの単純な型の場合、これらの基本型はあらかじめ定義されているので簡単です。 レコードやテーブルなど、より複雑な型の場合は、Type 関数を使用して型を作成します。

Type 関数によって、型付けされていないオブジェクトを扱いやすくなります。 ParseJSONIsTypeAsType 関数を使用すると、型付けされていないオブジェクトを型付けされたオブジェクトに変換することができます。

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