Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Dynamická je datový typ v Power Fx, který může obsahovat libovolnou datovou strukturu, složitou nebo jednoduchou. Nelze ho použít přímo a převést na jiný datový typ za běhu, a to buď explicitně, nebo implicitně. Pole záznamů v dynamické hodnotě lze získat přístup pomocí zápisu tečky a existence polí je ověřena pouze za běhu.
Dynamickou hodnotu můžete vytvořit dvěma způsoby:
- Použití funkce ParseJSON.
- Použití spojnice, která vrací "dynamický" typ.
Poznámka:
Dynamická byla dříve označována jako UntypedObject. Změnil se pouze název, sémantika se nijak nemění. Jediné místo, kde by se název objevil ve vzorci, je v experimentálních verzích uživatelem definovaných funkcí a uživatelem definovaných typů.
Jednoduché typy
Hodnotu proměnné obsahující dynamickou hodnotu nelze použít přímo. Vždy ho musíte správně zadat pomocí odpovídajícího konstruktoru typu nebo převodem na konkrétní typ pomocí funkcí AsType a ParseJSON .
Následující příklady převedou hodnotu dynamické proměnné s názvem DynValue.
Text(DynValue)
Value(DynValue)
Následující tabulka uvádí datové typy a odpovídající funkce pro převod dynamického na tento datový typ.
| Datový typ | Function | Description |
|---|---|---|
| logický | Boolean() | Při převodu dynamické na logickou hodnotu musí podkladová hodnota představovat logickou hodnotu nebo typ, který lze automaticky převést (například řetězec "true"). |
| Color | ColorValue() nebo RGBA() | Barvy mohou být reprezentovány v zápisu definice barvy kaskádového stylu (CSS) jako řetězec nebo jako jednotlivé komponenty RGBA. Dynamickou funkci lze převést přímo z řetězce definice barvy šablony stylů CSS (Cascading Style Sheet) pomocí funkce ColorValue() nebo z jednotlivých čísel RGBA na barvu pomocí funkce RGBA(). |
| Měna, číslo | Value() | Při převodu dynamické hodnoty na číslo musí podkladová hodnota představovat číslo nebo typ, který lze automaticky převést (například řetězec 123,456). |
| Datum, datum a čas, čas | DateValue(), TimeValue() nebo DateTimeValue() | Datum, čas a datum a čas lze přímo převést z dynamické na příslušný typ, pokud je znázorněno ve formátu ISO 8601. Jiné formáty musí být nejprve převedeny na text pomocí funkce Text() a poté předány do funkce DateValue(), TimeValue() nebo DateTimeValue(), která ve výchozím nastavení použije jazyk nastavení aktuálního uživatele. |
| GUID | GUID() | Dynamická hodnota může být přímo převedena na IDENTIFIKÁTOR GUID, pokud podkladový objekt představuje identifikátor GUID nebo pokud představuje řetězec. |
| Hypertextový odkaz, obrázek, médium | Text() | Tyto datové typy jsou textové datové typy a lze je převést na text a poté použít v Power Fx. |
| Volba, dvě možnosti | Switch() nebo If() | Choices a two options jsou prezentovány jako lokalizované řetězce v Power Fx. Chocies jsou podloženy číslem a two options jako logické hodnoty. Neexistuje žádný přímý převod z logické hodnoty, čísla nebo řetězce na choice nebo two options, ale funkce Switch() nebo If() lze použít na logickou, textovou nebo číselnou hodnotu ke správnému přiřazení hodnoty choice nebo two option. |
| Zaznamenat | nelze použít | Neexistuje žádný přímý převod z dynamické struktury na strukturu záznamů, ale jednotlivá pole lze načíst z dynamického objektu a vytvořit nový záznam. |
| Reference záznamu | nelze použít | Odkazy na záznamy jsou jedinečné pro zdroje dat a nemají smysluplnou reprezentaci v dynamic. |
| Table | Table() a ForAll() | Dynamická může představovat pole, které lze převést na tabulku. Tyto objekty mohou být pole záznamů nebo pole hodnot, které jsou ve skutečnosti tabulkami s jedním sloupcem. ForAll() lze použít k vytvoření tabulky s plně typovanými záznamy. Další informace naleznete v příkladech níže v tomto článku. |
| Text | Text() | Text lze přímo převádět. Pokud dynamická hodnota představuje číslo, musíte před převodem na text nejprve převést dynamickou hodnotu na číslo pomocí value(). |
Typy záznamů
K polím v proměnné představující dynamický záznam můžete přistupovat pomocí běžného zápisu tečky používaného pro záznamy. Existence polí však bude ověřena až za běhu. V důsledku toho není k dispozici ani IntelliSense. Pokud pole neexistuje nebo má podkladovou hodnotu null, přístup k ní bude mít za následek hodnotu Blank().
Každé pole záznamu je také typu Dynamické a musí být správně napsané. Pole může být dynamický záznam jednoduchého typu. V případě, že se jedná o záznam, můžete zřetězit tečkovou notaci. Pokud některé pole v řetězci neexistuje, vrátí se Blank().
Následující příklady používají pole z dynamické proměnné s názvem DynRecord.
Text(DynRecord.StringField)
Value(DynRecord.Field.ChildField)
V případě, že název pole obsahuje neplatný název identifikátoru, například když názvy polí začínají číslem nebo obsahují neplatné znaky, jako je spojovník, můžete názvy polí uvést do jednoduchých uvozovek:
dynamic.'01'
dynamic.'my-field'
Dynamický přístup ke sloupcům
Někdy budou názvy sloupců v záznamu dynamické. Pomocí funkce ColumnNames určete, které názvy sloupců jsou v záznamu k dispozici, a potom pomocí funkce Column načtěte hodnotu pojmenovaného sloupce.
Příklad:
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
Pole
Dynamická proměnná může obsahovat pole. I když pole může být matice záznamů nebo matice jednoduchých typů, převod dynamické matice na tabulku pomocí funkce Table() vždy způsobí tabulku s jedním sloupcem dynamic. Funkce jako ForAll() a Index() nevyžadují, abyste nejprve vytvořili Table() a v důsledku toho nevyžadují použití jednosloupcového pole Value.
Pokud chcete například získat druhé číslo v matici dynamických číselných hodnot ( [1, 2, 3] ), můžete použít následující vzorec k načtení druhého řádku v tabulce a převodu sloupce na číslo:
Value( Index( UOArray, 2 ) )
Pokud se dynamická funkce nejprve převede na tabulku (Table(), druhý řádek ve výsledné tabulce s jedním sloupcem Value je sloupec obsahující dynamickou hodnotu:
Value( Index( Table( UOArray ), 2 ).Value )
Pro pole záznamů, které mají textový sloupec nazvaný Field, platí stejná logika. K dynamickému přístupu je možné přistupovat přímo nebo pokud použijete funkci Table(), bude výsledkem tabulka s jedním sloupcem funkce Dynamic.
Ke Field sloupci může přistupovat přímo funkce Dynamic vrácená funkcí Index().
Text( Index( UORecordArray, 2 ).Field )
Při použití funkce Table() nejprve načtěte sloupec s jedním sloupcem Value , abyste získali dynamickou hodnotu, a pak se ke sloupci Field dostali:
Text( Index( Table( UORecordArray ), 2 ).Value.Field )
Chcete-li převést pole záznamů na typovanou tabulku, můžete použít funkci ForAll() a převést každé jednotlivé pole.
ForAll( UORecordArray, { FirstField: Value(ThisRecord.FirstField), SecondField: Text(ThisRecord.SecondField) } )
Pokud se dynamická funkce nejprve převede na tabulku, bude výsledná tabulka s jedním sloupcem dynamického zobrazení vyžadovat, abyste k získání polí použili Value sloupec.
ForAll( Table(UORecordArray), { FirstField: Value(ThisRecord.Value.FirstField), SecondField: Text(ThisRecord.Value.SecondField) } )
Převod na typové záznamy a tabulky
Důležité
- Použití AsType a IsType s dynamickými hodnotami je experimentální funkce.
- Experimentální funkce nejsou určené pro produkční použití a nemusí být dokončené. Jsou to funkce, které jsou poskytnuté před oficiálním vydáním, abyste si je mohli co nejdříve vyzkoušet a napsat nám své názory. Další informace: Popis experimentálních a vyřazených funkcí nebo funkcí Preview v aplikacích plátna
- Chování, které tento článek popisuje, je k dispozici pouze v případě, že je experimentální funkce uživatelem definované typy v nastavení > nadcházejících funkcí > experimentální (ve výchozím nastavení je vypnutá).
- Vaše názory jsou pro nás cenné. Dejte nám vědět, co si myslíte, v komunitním fóru o experimentálníchfunkcích Power Apps.
Místo individuálního převodu jednotlivých jednoduchých hodnot lze funkce ParseJSON, IsType a AsType použít k hromadnému převodu Dynamic na typovaný objekt. Pomocí funkce Typ vytvořte typ, který mapuje dynamickou strukturu na typovou strukturu.
Tady například interpretujeme řetězce JSON jako hodnoty data a času, aniž bychom museli volat funkci 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