Typ danych obiektu bez typu
Obiekt bez typu to typ Power Fx danych, w którym można przechowywać dowolną strukturę danych, złożoną lub prostą. Nie można jej używać bezpośrednio i wymaga jawnej konwersji w typ danych. Dostęp do pól w rekordach w obiekcie bez typu można uzyskać za pomocą notacji kropkowej, a istnienie pól jest weryfikowane tylko w czasie wykonywania.
Obiekt bez typu jest typem zwracanym przez określonych dostawców bez typu. Obecnie tylko funkcja ParseJSON() zwraca obiekt bez typu.
Typy proste
Wartość zmiennej typu obiekt bez typu nie może być użyta bezpośrednio. Zawsze należy wpisać go poprawnie, korzystając z odpowiedniego konstruktora typu.
Poniższe przykłady konwertują wartość obiektu bez typu o nazwie UOValue
.
Text(UOValue)
Value(UOValue)
W poniższej tabeli wymieniono typy danych i odpowiadające im funkcje służące do konwersji obiektu bez typu na ten typ danych.
Typ danych | Function | opis |
---|---|---|
Wartość logiczna | Wartość logiczna() | Gdy obiekt bez typu nie jest konwertowany na wartość logiczną, podstawowa wartość musi reprezentować wartość logiczną lub typ, który można automatycznie przekonwertować (na przykład ciąg „true”). |
Color | ColorValue() lub RGBA() | Kolory mogą być reprezentowane w notacji definicji kolorów kaskadowego arkusza stylów (CSS) jako ciąg znaków lub jako pojedyncze składniki RGBA. Obiekt bez typu można przekonwertować bezpośrednio z ciągu definicji kolorów kaskadowego arkusza stylów (CSS) za pomocą funkcji ColorValue() lub z poszczególnych liczb RGBA na kolor za pomocą funkcji RGBA(). |
Waluta, liczba | Wartość() | Gdy obiekt bez typu nie jest konwertowany na numer, podstawowa wartość musi reprezentować numer lub typ, który można automatycznie przekonwertować (na przykład ciąg „123.456”). |
Data, data i godzina, godzina | DateValue(), TimeValue() lub DateTimeValue() | Data, godzina i data/godzina mogą być bezpośrednio przekonwertowane z obiektu bez typu na ich odpowiedni typ, gdy są reprezentowane w formacie ISO 8601. Inne formaty należy najpierw przekonwertować na tekst za pomocą funkcji Text(), a następnie przekazać do funkcji DateValue(), TimeValue() lub DateTimeValue() funkcja, która domyślnie będzie używać języka ustawień bieżącego użytkownika do interpretacji daty i czasu. |
Identyfikator GUID | Funkcja GUID() | Obiekt bez typu można bezpośrednio przekonwertować na identyfikator GUID, jeśli podstawowy obiekt reprezentuje identyfikator GUID lub jeśli reprezentuje ciąg. |
Hiperłącze, obraz, multimedia | Tekst() | Te typy danych są typami danych tekstowych i mogą być konwertowane na tekst, a następnie używane w programie Power Fx. |
Wybór, dwie opcje | Switch() lub If() | Opcje do wyboru i dwie opcje są prezentowane jako zlokalizowane ciągi w Power Fx programie. Wybory są wspierane przez liczbę i dwie opcje jako wartości logiczne. Nie ma bezpośredniej konwersji z wartości logicznej, liczby lub ciągu na wybór lub dwa opcje, ale Switch() lub If() funkcje mogą być użyte na wartości logicznej, tekstowej lub liczbowej, aby poprawnie przypisać wartość wybór lub dwie opcje. |
Nagraj | nie dotyczy | Nie ma bezpośredniej konwersji z obiektu bez typu na strukturę rekordu, ale poszczególne pola można pobrać z obiektu bez typu w celu utworzenia nowego rekordu. |
Odwołanie do rekordu | nie dotyczy | Odwołania do rekordów są unikalne dla źródeł danych i nie mają znaczącej reprezentacji w obiektach bez typu. |
Table | Table() i ForAll() | Obiekt bez typu może reprezentować tablicę, którą można przekształcić w tabelę. Te objekty mogą być tablicami rekordów lub tablicami wartości, które w rzeczywistości są tabelami jednokolumnowymi. Funkcja ForAll() może służyć do tworzenia tabeli z w pełni wpisanymi rekordami. Przykłady można znaleźć w dalszej część tego artykułu, aby uzyskać więcej informacji. |
Tekst | Tekst() | Tekst można bezpośrednio przekonwertować. Jeśli obiekt bez typu reprezentuje liczbę, musisz najpierw przekonwertować obiekt bez typu na liczbę za pomocą funkcji Value() przed konwersją na tekst . |
Typy rekordów
Możesz uzyskać dostęp do pól w zmiennej reprezentującej rekord obiekt bez typu przy użyciu zwykłej notacji kropkowej używanej w rekordach. Jednak istnienie pól nie zostanie zweryfikowane do czasu uruchomienia. W rezultacie nie ma więc żadnych dostępnych danych. Jeśli pole nie istnieje lub ma podstawową wartość null, dostęp do niego spowoduje wartość Blank().
Każde pole w rekordzie jest również typu obiekt bez typu i musi być poprawnie wpisane. Pole może być rekordem bez typu prostego. Jeśli jest to rekord, możesz połączyć notację z kropkami. Jeśli jakiekolwiek pole w łańcuchu nie istnieje, zwracana jest wartość Blank().
W poniższych przykładach użyto pól ze zmiennej beztypowego obiektu o nazwie UORecord
.
Text(UORecord.StringField)
Value(UORecord.Field.ChildField)
Jeśli nazwa pola składa się z nieprawidłowej nazwy identyfikatora, na przykład kiedy nazwa pola rozpoczyna się od liczby lub zawiera nieprawidłowe znaki, na przykład łącznik, można umieścić nazwy pól w pojedynczym cudzysłowie:
untyped.'01'
untyped.'my-field'
Tablice
Zmienna obiekt bez typu może zawierać tablicę. Mimo że tablica może być albo tablicą rekordów, albo tablicą prostych typów, konwertowanie tablicy obiekt bez typu na tabelę za pomocą funkcji Table() zawsze spowoduje powstanie jednokolumnowej tabeli zawierającej obiekty bez typu. Funkcje takie jak ForAll() i Index() nie wymagają uprzedniego utworzenia Table() i w rezultacie nie wymagają użycia jednokolumnowego pola Value
,
Na przykład, aby uzyskać drugą liczbę z tablicy beztypowego obiektu zawierającego wartości liczbowe ( [1, 2, 3]
), można użyć następującej formuły do pobrania drugiego wiersza w tabeli i przekonwertuj kolumnę na liczbę:
Value( Index( UOArray, 2 ) )
Jeśli obiekt bez typu został najpierw przekonwertowany na Table(), drugi wiersz w wynikowej jednokolumnowej tabeli to kolumna Value
zawierająca obiekt bez typu:
Value( Index( Table( UOArray ), 2 ).Value )
W przypadku tablicy rekordów z kolumną tekstową o nazwie Field
, stosowana jest ta sama logika. Dostęp do obiektu bez określonego typu można uzyskać bezpośrednio lub jeśli użycie funkcji Table() spowoduje utworzenie jednokolumnowej tabeli zawierającej obiekt bez określonego typu.
Do kolumny Field
można uzyskać dostęp bezpośrednio ze zwracanego obiektu bez typu przez funkcję Index().
Text( Index( UORecordArray, 2 ).Field )
Podczas korzystania z funkcji Table() najpierw pobierz jednokolumnową kolumnę Value
, aby uzyskać obiekt bez typu, a następnie przejdź do kolumny Field
:
Text( Index( Table( UORecordArray ), 2 ).Value.Field )
Aby przekonwertować tablicę rekordów na tabelę z typem, można użyć funkcji ForAll() i przekonwertować poszczególne pola.
ForAll( UORecordArray, { FirstField: Value(ThisRecord.FirstField), SecondField: Text(ThisRecord.SecondField) } )
Jeśli obiekt bez określonego typu zostanie najpierw przekonwertowany na tabelę, wynikowa jednokolumnowa tabela obiektu bez określonego typu będzie wymagała użycia kolumny Value
w celu uzyskania pól.
ForAll( Table(UORecordArray), { FirstField: Value(ThisRecord.Value.FirstField), SecondField: Text(ThisRecord.Value.SecondField) } )