Chia sẻ qua


RecordOf và các Type hàm

Áp dụng cho: Ứng dụng Canvas

Xây dựng một kiểu do người dùng định nghĩa để sử dụng với các hàm do người dùng định nghĩa và các giá trị không có kiểu.

Quan trọng

Description

Mỗi hàm trong Power Fx đều xác định kiểu giá trị có thể được truyền vào dưới dạng tham số và kiểu đầu ra. Các kiểu dữ liệu được kiểm tra khi bạn viết công thức và lỗi sẽ được hiển thị nếu chúng không khớp với mong đợi. Trình soạn thảo cũng sử dụng các kiểu dữ liệu để gợi ý những tùy chọn tốt cho việc truyền dữ liệu vào hàm và phát hiện lỗi sớm nhất có thể.

Khi tạo các hàm do người dùng tự định nghĩa, bạn cần chỉ định kiểu đầu vào và đầu ra. Đối với các kiểu đơn giản như Decimal hoặc Text, điều này rất dễ dàng vì các kiểu cơ bản này đã được xác định trước. Đối với các kiểu phức tạp hơn, chẳng hạn như các bản ghi hoặc bảng, hãy Type sử dụng hàm này để tạo loại.

Hàm Type này cũng làm cho các giá trị động dễ làm việc hơn. Với các hàm ParseJSON, IsTypeAsType , một giá trị động có thể được chuyển đổi thành một đối tượng đã nhập trong đó các cột không còn cần phải được nhập riêng lẻ tại điểm sử dụng.

Hàm Type lấy TypeSpecification làm đối số duy nhất của nó. Kiểu dữ liệu đơn giản nhất là tham chiếu đến một kiểu dữ liệu hiện có, ví dụ Type( Text ). Đặc tả kiểu cho một bản ghi hoặc bảng tương tự như việc xác định một bản ghi hoặc bảng bằng các giá trị theo nghĩa đen, trong đó các giá trị được thay thế bằng tên kiểu. Ví dụ, {Name: "Jane"} sẽ được nhập bằng Type( {Name: Text} ). Bảng được chỉ định bằng dấu ngoặc vuông, không phải hàm Bảng và chỉ có thể cung cấp một bản ghi. Ví dụ, [1,2,3] sẽ được nhập bằng Type( [Number] ).

Sử dụng RecordOf hàm để trích xuất loại bản ghi từ một loại bảng. Ví dụ: Type( RecordOf( Library ) ) sẽ trả về kiểu của một cuốn sách duy nhất trong thư viện. Để tạo bảng, hãy nhập loại bản ghi trong dấu ngoặc vuông từ loại bản ghi, Đóng gói. Ví dụ, Type( [ Book ] ) định nghĩa một thư viện. RecordOf chỉ có thể được sử dụng trong hàm Type .

Hàm Type và giá trị kiểu mà nó trả về chỉ có thể được dùng ở những vị trí cụ thể trong Power Fx, chẳng hạn như đối số thứ hai cho ParseJSON. Trong ứng dụng Canvas, hàm Type có thể được sử dụng với một công thức có tên trong App.Formulas.

Cú pháp

RecordOf( TableType )

  • TableType – Bắt buộc. Tên kiểu của bảng. Câu lệnh này không chấp nhận chỉ định kiểu, mà phải là tên của kiểu đã được xác định trước đó cho một bảng.

Type( TypeSpecification )

  • TypeSpecification – Bắt buộc. Một loại thông số kỹ thuật.

Ví dụ

Type chức năng

Hãy xem xét các định nghĩa sau trong 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 ] );

Lưu ý cách văn bản tiêu đề thực tế "A Study in Scarlet" được thay thế bằng tên loại Text trong thông số kỹ thuật loại, một chỗ giữ chỗ cho bất kỳ giá trị văn bản nào. Một tham số hoặc biến có kiểu BookType có thể chứa một trong các cuốn sách trong Library, trong khi LibraryType có thể chứa toàn bộ bảng. Với các kiểu này, chúng ta có thể định nghĩa các hàm do người dùng xác định sau:

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

Bạn cũng có thể sử dụng BookType để phân tích cú pháp chuỗi JSON có chứa một cuốn sách:

ParseJSON( "{""Title"":""Gulliver's Travels"", ""Author"": ""Jonathan Swift"", ""Published"": 1900}", BookType
)

Sử dụng BookType làm đối số thứ hai cho ParseJSON sẽ tạo ra một bản ghi được gõ có thể được sử dụng như bất kỳ Power Fx bản ghi nào khác.

RecordOf chức năng

Trong ví dụ Type về hàm, bạn bắt đầu và BookType xây dựng LibraryType bằng cách ngắt dòng một bảng xung quanh nó. Chúng ta có thể định nghĩa các kiểu này theo chiều ngược lại như sau:

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