Τύπος δεδομένων μη τυπολογημένου αντικειμένου
Το μη πληκτρολογημένο αντικείμενο είναι ένας τύπος δεδομένων στο Power Fx που μπορεί να κρατήσει οποιαδήποτε δομή δεδομένων, σύνθετη ή απλή. Δεν μπορεί να χρησιμοποιηθεί απευθείας και απαιτεί ρητή μετατροπή σε τύπο δεδομένων. Η πρόσβαση στα πεδία σε καρτέλες ενός μη πληκτρολογημένου αντικειμένου μπορεί να γίνει με χρήση της τελείας και η επαλήθευση των πεδίων γίνεται μόνο κατά το χρόνο εκτέλεσης.
Το αντικείμενο που δεν έχει πληκτρολογηθεί είναι ο τύπος επιστροφής συγκεκριμένων μη πληκτρολογημένων παρόχων. Επί του παρόντος, μόνο η συνάρτηση ParseJSON() επιστρέφει μη πληκτρολογημένο αντικείμενο.
Απλοί τύποι
Η τιμή μιας μεταβλητής τύπου μη πληκτρολογημένο αντικείμενο δεν μπορεί να χρησιμοποιηθεί απευθείας. Πρέπει πάντα να το πληκτρολογείτε σωστά χρησιμοποιώντας την αντίστοιχη κατασκευή τύπου.
Τα παρακάτω παραδείγματα μετατρέπουν την τιμή μιας μεταβλητής μη πληκτρολογημένου αντικειμένου με όνομα UOValue
.
Text(UOValue)
Value(UOValue)
Ο παρακάτω πίνακας περιλαμβάνει τους τύπους δεδομένων και τις αντίστοιχες συναρτήσεις για μετατροπή μη πληκτρολογημένου αντικειμένου σε αυτόν τον τύπο δεδομένων.
Τύπος δεδομένων | Function | Description |
---|---|---|
Boolean | Boolean() | Όταν μετατρέπετε μη τυπολογημένο αντικείμενο σε δυαδική τιμή, η τιμή στην οποία βασίζεται πρέπει να αντιπροσωπεύει έναν δυαδικό τύπο ή έναν τύπο που μπορεί να μετατραπεί αυτόματα (όπως μια συμβολοσειρά "true"). |
Color | ColorValue() or RGBA() | Τα χρώματα μπορούν να αναπαρασταθούν με σημειογραφία ορισμού χρώματος φύλλου στυλ με επικάλυψη (CSS) ως συμβολοσειρά ή ως μεμονωμένα στοιχεία RGBA. Το μη πληκτρολογημένο αντικείμενο μπορεί να μετατραπεί απευθείας από συμβολοσειρά ορισμού χρώματος φύλλου στυλ με επικάλυψη (CSS) χρησιμοποιώντας τη συνάρτηση ColorValue() ή από μεμονωμένους αριθμούς RGBA σε χρώμα, χρησιμοποιώντας τη συνάρτηση RGBA(). |
Νόμισμα, Αριθμός | Value() | Όταν μετατρέπετε μη τυπολογημένο αντικείμενο σε αριθμό, η τιμή στην οποία βασίζεται πρέπει να αντιπροσωπεύει έναν αριθμό ή έναν τύπο που μπορεί να μετατραπεί αυτόματα (όπως μια συμβολοσειρά "123.456"). |
Date, DateTime, Time | DateValue(), TimeValue() or DateTimeValue() | Η ημερομηνία, η ώρα και η ημερομηνία/ώρα μπορούν να μετατραπούν απευθείας από μη πληκτρολογημένο αντικείμενο στον αντίστοιχο τύπο τους, όταν αντιπροσωπεύονται σε μορφή ISO 8601. Θα πρέπει πρώτα να μετατραπούν σε κείμενο και άλλες μορφές, χρησιμοποιώντας τη συνάρτηση Text() και, στη συνέχεια, να περνούν στη συνάρτηση DateValue(), TimeValue() ή DateTimeValue() που από προεπιλογή θα χρησιμοποιήσει τη γλώσσα των ρυθμίσεων του τρέχοντα χρήστη για να ερμηνεύσει την ημερομηνία και την ώρα. |
GUID | GUID() | Ένα μη τυπολογημένο αντικείμενο μπορεί να μετατραπεί απευθείας σε GUID, εάν το αντικείμενο στο οποίο βασίζεται αντιπροσωπεύει ένα GUID ή αντιπροσωπεύει μια συμβολοσειρά. |
HyperLink, Image, Media | Text() | Αυτοί οι τύποι δεδομένων είναι τύποι δεδομένων κειμένου, και είναι δυνατό να μετατραπούν σε κείμενο και, στη συνέχεια, να χρησιμοποιηθούν στο Power Fx. |
Επιλογές, Δύο Επιλογή | Switch() or If() | Οι επιλογές και οι δύο επιλογές παρουσιάζονται ως μεταφρασμένες συμβολοσειρές στο Power Fx. Οι επιλογές υποστηρίζονται από έναν αριθμό και δύο επιλογές ως δυαδική τιμή. Δεν υπάρχει άμεση μετατροπή από δυαδική τιμή, αριθμό ή συμβολοσειρά σε μια επιλογή ή δύο επιλογές, αλλά οι συναρτήσεις Switch() ή If() μπορούν να χρησιμοποιηθούν στη δυαδική τιμή, στο κείμενο ή στην τιμή αριθμού για τη σωστή αντιστοίχιση της τιμής επιλογής ή δύο επιλογών. |
Εγγραφή | δ/υ | Δεν υπάρχει άμεση μετατροπή από μη πληκτρολογημένο αντικείμενο σε δομή καρτέλας, αλλά είναι δυνατή η ανάκτηση μεμονωμένων πεδίων από το μη πληκτρολογημένο αντικείμενο για τη δημιουργία μιας νέας καρτέλας. |
Αναφορά καρτέλας | δ/υ | Οι αναφορές καρτελών είναι μοναδικές σε προελεύσεις δεδομένων και δεν έχουν καμία ουσιαστική αναπαράσταση σε μη πληκτρολογημένα αντικείμενα. |
Table | Table() και ForAll() | Ένα μη πληκτρολογημένο αντικείμενο μπορεί να αναπαριστά έναν πίνακα, ο οποίος μπορεί να μετατραπεί σε πίνακα. Αυτά τα αντικείμενα μπορούν να είναι πίνακες καρτελών ή πίνακες τιμών που ουσιαστικά είναι πίνακες μίας στήλης. Το ForAll() μπορεί να χρησιμοποιηθεί για τη δημιουργία ενός πίνακα με καρτέλες πλήρως πληκτρολογημένες. Εξετάστε τα παραδείγματα παρακάτω σε αυτό το άρθρο για περισσότερες πληροφορίες. |
Μήνυμα κειμένου | Text() | Το κείμενο είναι δυνατό να μετατραπεί απευθείας. Εάν ένα μη πληκτορλογημένο αντικείμενο αντιπροσωπεύει έναν αριθμό, θα πρέπει πρώτα να μετατρέψετε το μη πληκτρολογημένο αντικείμενο σε αριθμό χρησιμοποιώντας την Value() πριν από τη μετατροπή σε κείμενο. |
Τύποι καρτελών
Μπορείτε να αποκτήσετε πρόσβαση σε πεδία μιας μεταβλητής που αντιπροσωπεύουν μια καρτέλα μη πληκτρολογημένου αντικειμένου, χρησιμοποιώντας την τακτική σημειογραφία τελείας που χρησιμοποιείται για τις καρτέλες. Ωστόσο, η παρουσία των πεδίων δεν θα επαληθευτεί μέχρι τον χρόνο εκτέλεσης. Ως εκ τούτου, δεν υπάρχει διαθέσιμο intellisense. Εάν ένα πεδίο δεν υπάρχει ή έχει μια υποκείμενη τιμή null, η πρόσβαση σε αυτό θα έχει ως αποτέλεσμα μια τιμή Blank().
Κάθε πεδίο στην καρτέλα είναι επίσης τύπου μη πληκτρολογημένου αντικειμένου και πρέπει να πληκτρολογείται σωστά. Το πεδίο μπορεί να είναι μια μη πληκτρολογημένη καρτέλα απλού τύπου. Σε περίπτωση που πρόκειται για καρτέλα, μπορείτε να προσθέσετε τη σημειογραφία της τελείας. Εάν κάποιο πεδίο στην αλυσίδα δεν υπάρχει, επιστρέφεται Blank().
Τα παρακάτω παραδείγματα χρησιμοποιούν πεδία από μια μεταβλητή μη πληκτρολογημένου αντικειμένου με όνομα UORecord
.
Text(UORecord.StringField)
Value(UORecord.Field.ChildField)
Στην περίπτωση που ένα όνομα πεδίου αποτελείται από ένα μη έγκυρο όνομα αναγνωριστικού, για παράδειγμα, όταν τα ονόματα πεδίων ξεκινούν με έναν αριθμό ή περιέχουν μη έγκυρους χαρακτήρες, όπως ενωτικό, μπορείτε να βάλετε τα ονόματα πεδίων σε μεμονωμένες προσφορές:
untyped.'01'
untyped.'my-field'
Δυναμική πρόσβαση σε στήλες
Μερικές φορές τα ονόματα των στηλών σε μια καρτέλα θα είναι δυναμικά. Χρησιμοποιήστε τη συνάρτηση ColumnNames για να προσδιορίσετε ποια ονόματα στηλών είναι διαθέσιμα σε μια εγγραφή και, στη συνέχεια, χρησιμοποιήστε τη συνάρτηση Column για να ανακτήσετε την τιμή μιας στήλης με όνομα.
Για παράδειγμα,
LettersUsed = ParseJSON( "{ ""d"": 2, ""p"": 3 }" );
Concat( ColumnNames( LettersUsed ) As Names, Names.Value, ", " )
// returns "d, p"
Sum( ForAll( ColumnNames( LettersUsed ) As Names, Column( LettersUsed, Names.Value ) ), Value )
// returns 5
Πίνακες
Μια μεταβλητή μη πληκτρολογημένου αντικειμένου μπορεί να περιέχει έναν πίνακα. Παρόλο που ο πίνακας μπορεί να είναι είτε πίνακας καρτελών είτε πίνακας απλών τύπων, η μετατροπή του πίνακα μη πληκτρολογημένου αντικειμένου σε πίνακα με τη χρήση της συνάρτησης Table() θα έχει πάντα ως αποτέλεσμα έναν πίνακα μίας στήλης μη πληκτρολογημένων αντικειμένων. Οι συναρτήσεις όπως ForAll() και Index() δεν απαιτούν να δημιουργείτε πρώτα έναν Table() και, ως εκ τούτου, δεν απαιτούν να χρησιμοποιήσετε το πεδίο μίας στήλης Value
,
Για παράδειγμα, για να λάβετε τον δεύτερο αριθμό σε έναν πίνακα μη πληκτρολογημένων αντικειμένων που περιέχουν τιμές αριθμού ([1, 2, 3]
), ο παρακάτω τύπος μπορεί να χρησιμοποιηθεί για την ανάκτηση της δεύτερης γραμμής στον πίνακα και για τη μετατροπή της στήλης σε έναν αριθμό:
Value( Index( UOArray, 2 ) )
Εάν το μη πληκτρολογημένο αντικείμενο μετατράπηκε πρώτα σε Table(), η δεύτερη γραμμή στον πίνακα μίας στήλης αποτελέσματος είναι μια στήλη Value
που περιέχει το μη πληκτρολογημένο αντικείμενο:
Value( Index( Table( UOArray ), 2 ).Value )
Για έναν πίνακα καρτελών με μια στήλη κειμένου με το όνομα Field
, εφαρμόζεται η ίδια λογική. Η πρόσβαση στο μη πληκτρολογημένο αντικείμενο είναι δυνατή απευθείας ή εάν χρησιμοποιηθεί η συνάρτηση Table() έχει ως αποτέλεσμα έναν πίνακα μίας στήλης μη πληκτρολογημένου αντικειμένου.
Η στήλη Field
μπορεί να έχει πρόσβαση απευθείας από το μη πληκτρολογημένο αντικείμενο που επιστρέφεται από τη συνάρτηση Index().
Text( Index( UORecordArray, 2 ).Field )
Κατά τη χρήση της συνάρτησης Table(), πρώτα ανακτήστε τη στήλη Value
μίσας στήλης για να λάβετε το μη πληκτρολογημένο αντικείμενο και μετά να αποκτήσετε πρόσβαση στη στήλη Field
:
Text( Index( Table( UORecordArray ), 2 ).Value.Field )
Για να μετατρέψετε έναν πίνακα καρτελών σε έναν πληκτρολογημένο πίνακα, μπορείτε να χρησιμοποιήσετε τη συνάρτηση ForAll() και να μετατρέψετε κάθε μεμονωμένο πεδίο.
ForAll( UORecordArray, { FirstField: Value(ThisRecord.FirstField), SecondField: Text(ThisRecord.SecondField) } )
Εάν το μη πληκτρολογημένο αντικείμενο μετατραπεί για πρώτη φορά σε πίνακα, πάλι, ο πίνακας μίας στήλης που προκύπτει από μη πληκτρολογημένο αντικείμενο θα απαιτεί να χρησιμοποιήσετε τη στήλη Value
για να λάβετε τα πεδία.
ForAll( Table(UORecordArray), { FirstField: Value(ThisRecord.Value.FirstField), SecondField: Text(ThisRecord.Value.SecondField) } )
Μετατροπή σε τυποποιημένες εγγραφές και πίνακες
Αντί να μετατρέπουν κάθε απλή τιμή ξεχωριστά, οι συναρτήσεις ParseJSON, IsType και AsType μπορούν να χρησιμοποιηθούν για τη μαζική μετατροπή ενός μη τυποπολογημένου αντικειμένου σε τυπολογημένο αντικείμενο. Χρησιμοποιήστε τη συνάρτηση Type για να δημιουργήσετε έναν τύπο που θα αντιστοιχίσει την ατυπολογημένη δομή σε μια τυπολογημένη δομή.
Για παράδειγμα, εδώ ερμηνεύουμε τις συμβολοσειρές JSON ως τιμές ημερομηνίας ώρας, χωρίς να χρειάζεται να καλέσουμε τη συνάρτηση DateTimeValue:
Eclipse = ParseJSON( "{ ""Start"": ""2026-08-12T18:26:00.000Z"", ""End"": ""2026-08-12T18:33:00.000Z"" }",
Type( { Start: DateTime, End: DateTime } ) );
DateDiff( Eclipse.Start, Eclipse.End, TimeUnit.Minutes )
// 7