Typ danych obiektu bez typu

Obiekt bez typu to typ danych w Power Fx, który może 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 niedyskonsowany jest typem zwrotu określonych dostawców, którzy nie są wczytywani. 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 Boolean() 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() or 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 Value() 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() or 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 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 Text() 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() Choices i dwie opcje są przedstawiane jako zlokalizowane ciągi w programie Power Fx. Choices jest wsadowy 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. ForAll() może być użyty do utworzenia tabeli z w pełni wpisanymi rekordami. Przykłady można znaleźć w dalszej część tego artykułu, aby uzyskać więcej informacji.
Tekst Text() 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) } )