Κοινή χρήση μέσω


Συναρτήσεις RecordOf και Type

Ισχύει σε: Εφαρμογές καμβά

Δημιουργεί έναν τύπο καθορισμένο από το χρήστη για χρήση με συναρτήσεις καθορισμένες από το χρήστη και μη πληκτρολογημένες τιμές.

Σημαντικό

Description

Κάθε συνάρτηση στο Power Fx καθορίζει τους τύπους τιμών που μπορούν να μεταβιβαστούν ως παράμετροι και τον τύπο της εξόδου. Οι τύποι ελέγχονται όταν γράφετε μια φόρμουλα και εμφανίζονται σφάλματα εάν δεν συμφωνούν με το αναμενόμενο. Οι τύποι χρησιμοποιούνται επίσης από τον επεξεργαστή για να προτείνουν καλές επιλογές για το τι πρέπει να περάσει στη λειτουργία και να εντοπίσει σφάλματα όσο το δυνατόν νωρίτερα.

Όταν δημιουργείτε τις δικές σας λειτουργίες καθορισμένες από το χρήστη, πρέπει να καθορίσετε τους τύπους εισόδου και εξόδου. Για απλούς τύπους όπως δεκαδικός ή κείμενο, αυτό είναι εύκολο καθώς αυτοί οι βασικοί τύποι είναι προκαθορισμένοι. Για πιο σύνθετους τύπους, όπως εγγραφές ή πίνακες, χρησιμοποιήστε τη συνάρτηση Τύπος για να δημιουργήσετε τον τύπο.

Η συνάρτηση Τύπος διευκολύνει επίσης την εργασία με μη τυπολογημένα αντικείμενα. Με τις συναρτήσεις ParseJSON, IsType και AsType ένα μη τυπολογημένο αντικείμενο μπορεί να μετατραπεί σε τυπολογημένο αντικείμενο στο οποίο οι στήλες δεν χρειάζεται πλέον να τυπολογούνται μεμονωμένα στο σημείο χρήσης.

Η συνάρτηση Τύπος λαμβάνει ένα TypeSpecification ως το μόνο όρισμα. Η απλούστερη προδιαγραφή τύπου είναι, για παράδειγμα Type( Text ), η αναφορά σε έναν υπάρχοντα τύπο. Μια προδιαγραφή τύπου για μια εγγραφή ή έναν πίνακα είναι παρόμοια με τον ορισμό μιας εγγραφής ή ενός πίνακα με κυριολεκτικές τιμές, όπου οι τιμές αντικαθίστανται από ονόματα τύπων. Για παράδειγμα, το {Name: "Jane"} θα πληκτρολογηθεί με Type( {Name: Text} ). Οι πίνακες καθορίζονται με αγκύλες, όχι με τη συνάρτηση Πίνακας και μπορεί να παρέχεται μόνο μία εγγραφή. Για παράδειγμα, το [1,2,3] θα τυπολογηθεί με Type( [Number] ).

Χρησιμοποιήστε τη συνάρτηση RecordOf για να εξαγάγετε τον τύπο εγγραφής από έναν τύπο πίνακα. Για παράδειγμα, το Type( RecordOf( Library ) ) θα επιστρέψει τον τύπο ενός μεμονωμένου βιβλίου από τη βιβλιοθήκη. Για να δημιουργήσετε έναν τύπο πίνακα από τύπο εγγραφής, τυλίξτε τον τύπο εγγραφής σε αγκύλες. Για παράδειγμα, το Type( [ Book ] ) ορίζει μια βιβλιοθήκη. Το RecordOf μπορεί να χρησιμοποιηθεί μόνο εντός της συνάρτησης Τύπος.

Η συνάρτηση Τύπος και η τιμή τύπου που επιστρέφει μπορούν να χρησιμοποιηθούν μόνο σε συγκεκριμένα σημεία Power Fx, όπως το δεύτερο όρισμα στο ParseJSON. Στις εφαρμογές καμβά, η συνάρτηση Τύπος μπορεί να χρησιμοποιηθεί με έναν ονομασμένη φόρμουλα στο App.Formulas.

Σύνταξη

RecordOf( TableType )

  • TableType – Απαιτείται. Το όνομα τύπου ενός πίνακα. Αυτό δεν δέχεται μια προδιαγραφή τύπου, πρέπει να είναι το όνομα ενός προηγουμένως καθορισμένου τύπου για έναν πίνακα.

Τύπος( 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 function

Στο παράδειγμα της συνάρτησης Τύπος, ξεκινάτε με 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 ) );