適用於:畫布應用
建構一個使用者定義類型,用於使用者定義的函數和非類型化值。
重要
- 這些功能是實驗性的。
- 實驗性功能並不適用於生產用途且可能不完整。 這些功能是在正式發行前先行推出,讓您能夠搶先體驗並提供意見反應。 其他資訊:了解畫布應用程式中的實驗性、預覽及已淘汰功能
- 只有當中的>處於開啟狀態 (預設為關閉) 時,此行為才可用。
- 您的意見反應非常寶貴。 在 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 的第二個引數。 在 Canvas 應用程式中,函 Type 式可以與 App.Formulas 中的具名公式搭配使用。
語法
RecordOf(表格 類型 )
- TableType – 必要。 表的類型名稱。 這不接受類型規範,它需要是表的先前定義的類型的名稱。
Type( 類型規格 )
- 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 中的一本圖書,而 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 ) );