RecordOf 和 Type 函數
適用於:畫布應用
建構一個使用者定義類型,用於使用者定義的函數和非類型化值。
重要
- 這些功能是實驗性的。
- 實驗性功能並不適用於生產用途且可能不完整。 這些功能是在正式發行前先行推出,讓您能夠搶先體驗並提供意見反應。 其他資訊:了解畫布應用程式中的實驗性、預覽及已淘汰功能
- 只有當設定>中即將推出的功能>實驗性功能中的使用者定義類型實驗性功能處於開啟狀態 (預設為關閉) 時,此行為才可用。
- 您的意見反應非常寶貴。 在 Power Apps 實驗性功能社群論壇中告訴我們您的想法。
Description
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 ) )
將傳回圖書館中單一本書的類型。 若要從記錄類型建立資料表類型,請將記錄類型括在方括號中。 例如,Type( [ Book ] )
會定義一個函式庫。
RecordOf 只能在 Type 函數內使用。
Type 函數及其傳回的類型值只能在 Power Fx 中的特定位置使用,例如 ParseJSON 的第二個參數。 在畫布應用程式中,Type 函數可與 App.Formulas 中的命名公式一起使用。
語法
RecordOf( TableType )
- TableType – 必要。 表的類型名稱。 這不接受類型規範,它需要是表的先前定義的類型的名稱。
Type( TypeSpecification )
- TypeSpecification – 必要。 類型規範。
範例
類型函數
考慮 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
中的一本圖書,而 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
)
使用 BookType
作為 ParseJSON 的第二個參數會產生一個類型化記錄,該記錄可以像其他 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 ) );