Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dynamic to typ danych w programie Power Fx, który może przechowywać dowolną strukturę danych, złożoną lub prostą. Nie można jej używać bezpośrednio i konwersji na inny typ danych w czasie wykonywania, jawnie lub niejawnie. Dostęp do pól rekordów w wartości dynamicznej można uzyskać przy użyciu notacji kropkowej, a istnienie pól jest weryfikowane tylko w czasie wykonywania.
Istnieją dwa sposoby tworzenia wartości dynamicznej :
- Za pomocą funkcji ParseJSON.
- Używanie łącznika zwracającego typ "dynamiczny".
Uwaga / Notatka
Dynamiczny był wcześniej nazywany UntypedObject. Tylko nazwa została zmieniona, nie ma żadnych zmian w semantyce. Jedynym miejscem, w którym nazwa byłaby wyświetlana w formule, jest wersja eksperymentalna funkcji zdefiniowanych przez użytkownika i typów zdefiniowanych przez użytkownika.
Typy proste
Nie można bezpośrednio używać wartości zmiennej zawierającej wartość dynamiczną . Zawsze trzeba go poprawnie wpisać przy użyciu odpowiedniego konstruktora typu lub przez przekonwertowanie go na określony typ za pomocą funkcji AsType i ParseJSON .
Poniższe przykłady konwertują wartość zmiennej dynamicznej o nazwie DynValue.
Text(DynValue)
Value(DynValue)
W poniższej tabeli wymieniono typy danych i odpowiednie funkcje, aby przekonwertować dynamiczny na ten typ danych.
| Typ danych | Function | opis |
|---|---|---|
| logiczny | Boolean() | Podczas konwertowania wartości dynamicznejna wartość logiczną wartość bazowa musi reprezentować wartość logiczną lub typ, który może zostać automatycznie przekonwertowany (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. Dynamiczne można konwertować bezpośrednio z ciągu definicji kolorów kaskadowego arkusza stylów (CSS) przy użyciu funkcji ColorValue() lub z poszczególnych liczb RGBA na kolor przy użyciu funkcji RGBA(). |
| Waluta, liczba | Value() | Podczas konwertowania wartości dynamicznej na liczbę wartość bazowa musi reprezentować liczbę 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 można bezpośrednio przekonwertować z dynamicznego na odpowiedni typ, gdy jest reprezentowany 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. |
| GUID | GUID() | Wartość dynamiczna można bezpośrednio przekonwertować na identyfikator GUID, jeśli obiekt źródłowy 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 dynamicznej na strukturę rekordów, ale poszczególne pola można pobrać z dynamicznego, aby utworzyć nowy rekord. |
| Odwołanie do rekordu | nie dotyczy | Odwołania do rekordów są unikatowe dla źródeł danych i nie mają znaczącej reprezentacji w dynamicznym. |
| Table | Table() i ForAll() | Dynamiczny może reprezentować tablicę, którą można przekonwertować na 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 wartość dynamiczna reprezentuje liczbę, musisz najpierw przekonwertować wartość dynamiczną na liczbę przy użyciu funkcji Value() przed przekonwertowaniem na tekst. |
Typy rekordów
Dostęp do pól w zmiennej reprezentującej rekord dynamiczny można uzyskać przy użyciu regularnej notacji kropkowej używanej dla rekordów. 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 Dynamic i musi być poprawnie wpisane. Pole może być rekordem dynamicznym prostego typu. 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 dynamicznej o nazwie DynRecord.
Text(DynRecord.StringField)
Value(DynRecord.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:
dynamic.'01'
dynamic.'my-field'
Dynamiczny dostęp do kolumn
Czasami nazwy kolumn w rekordzie będą dynamiczne. Użyj funkcji ColumnNames, aby określić, które nazwy kolumn są dostępne w rekordzie, a następnie użyj funkcji Column, aby pobrać wartość nazwanej kolumny.
Na przykład
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
Tablice
Zmienna dynamiczna może zawierać tablicę. Mimo że tablica może być tablicą rekordów lub tablicą prostych typów, konwertowanie tablicy dynamicznej na tabelę przy użyciu funkcji Table() zawsze spowoduje utworzenie jednokolumny tabeli Dynamiczne. Funkcje takie jak ForAll() i Index() nie wymagają uprzedniego utworzenia Table() i w rezultacie nie wymagają użycia jednokolumnowego pola Value,
Aby na przykład uzyskać drugą liczbę w tablicy dynamicznych zawierających wartości liczbowe ( [1, 2, 3] ), można użyć następującej formuły do pobrania drugiego wiersza w tabeli i przekonwertowania kolumny na liczbę:
Value( Index( UOArray, 2 ) )
Jeśli parametr Dynamiczny został przekonwertowany na tabelę(), drugi wiersz w tabeli z jedną kolumną wyników jest kolumną zawierającą kolumnę ValueDynamic:
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 dynamicznej można uzyskać bezpośrednio lub jeśli używasz funkcji Table() spowoduje utworzenie tabeli dynamicznej z jedną kolumną.
Dostęp Field do kolumny można uzyskać bezpośrednio z funkcji Dynamic zwróconej przez funkcję Index().
Text( Index( UORecordArray, 2 ).Field )
W przypadku korzystania z funkcji Table() najpierw pobierz kolumnę z jedną kolumną Value , aby uzyskać kolumnę Dynamic, a następnie uzyskaj dostęp do Field kolumny:
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 kolumna Dynamic jest najpierw konwertowana na tabelę, wynikowa jednokolumna tabela Dynamic będzie wymagać użycia Value kolumny w celu pobrania pól.
ForAll( Table(UORecordArray), { FirstField: Value(ThisRecord.Value.FirstField), SecondField: Text(ThisRecord.Value.SecondField) } )
Konwertowanie na wpisane rekordy i tabele
Ważne
- Używanie wartości AsType i IsType z wartościami dynamicznymi jest funkcją eksperymentalną.
- Funkcje eksperymentalne nie są przeznaczone do użytku produkcyjnego i mogą nie być kompletne. Te funkcje są udostępniane przed oficjalnym wydaniem, dzięki czemu można szybciej uzyskać do nich dostęp i przekazać opinie na ich temat. Więcej informacji: Zrozumienie eksperymentalnych, podglądowych i wycofanych funkcji w aplikacjach kanwy
- Zachowanie opisane w tym artykule jest dostępne tylko wtedy, gdy funkcja eksperymentalna Typy zdefiniowane przez użytkownika w Ustawienia > Nadchodzące funkcje > Eksperymentalne jest włączona (domyślnie jest wyłączona).
- Twoja opinia jest dla nas cenna. Poinformuj nas, co myślisz na forum społeczności funkcji eksperymentalnych usługi Power Apps.
Zamiast konwertować każdą prostą wartość pojedynczo, funkcje ParseJSON, IsType i AsType mogą służyć do zbiorczej konwersji dynamicznej na typowany obiekt. Użyj funkcji Type , aby utworzyć typ, który zamapuje strukturę dynamiczną na typową strukturę.
Na przykład tutaj interpretujemy ciągi JSON jako wartości daty i czasu, bez konieczności wywoływania funkcji 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