Datový typ Netypový objekt
netypový objekt je datový typ v Power Fx , který může obsahovat libovolnou datovou strukturu, složitou nebo jednoduchou. Nelze ho použít přímo a vyžaduje explicitní převod na datový typ. K polím v záznamech v netypovaném objektu lze přistupovat pomocí tečkové notace a existence polí se ověřuje pouze za běhu.
netypový objekt je návratový typ konkrétních poskytovatelů bez typu. V současné době pouze funkce ParseJSON() vrací netypovaný objekt.
Jednoduché typy
Hodnotu proměnné typu netypovaný objekt nelze použít přímo. Vždy ji musíte správně natypovat pomocí odpovídajícího konstruktoru typu.
Následující příklady převádějí hodnotu proměnné netypovaného objektu s názvem UOValue
.
Text(UOValue)
Value(UOValue)
V následující tabulce jsou uvedeny datové typy a odpovídající funkce k převodu netypovaného objektu na daný datový typ.
Datový typ | Function | Description |
---|---|---|
Logické | logický() | Při převodu netypovaného objektu na logickou hodnotu musí základní 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. Netypovaný objekt lze převést přímo z řetězce definice barvy kaskádových stylů (CSS) pomocí funkce ColorValue() nebo z jednotlivých hodnot number RGBA na barvu pomocí funkce RGBA(). |
Měna, číslo | Hodnota() | Při převodu netypovaného objektu na číslo musí základní 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() | Date, time a datetime lze přímo převést z netypovaného objektu na jejich příslušný typ, pokud jsou reprezentovány 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. |
Identifikátor GUID | GUID() | Netypovaný objekt lze přímo převést na GUID, pokud podkladový objekt představuje 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() | Možnosti a dvě možnosti jsou uvedeny jako lokalizované řetězce v Power Fx. Volby jsou podloženy číslem a dvěma možnostmi jako booleovské 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 netypovaného objektu do struktury záznamu, ale jednotlivá pole lze načíst z netypovaného objektu a vytvořit nový záznam. |
Reference záznamu | nelze použít | Reference záznamů jsou jedinečné pro zdroje dat a nemají žádnou smysluplnou reprezentaci v netypových objektech. |
Table | Table() a ForAll() | Netypovaný objekt 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ě zadaný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 netypovaný objekt představuje číslo, musíte nejprve převést netypovaný objekt na číslo pomocí funkce Value() před převodem na text. |
Typy záznamů
Můžete přistupovat k polím na proměnné představující záznam netypovaného objektu pomocí běžné tečkové notace používané 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 v záznamu je také typu netypovaný objekt a musí být správně typováno. Pole může být netypovaný 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 využívají pole z proměnné netypovaného objektu s názvem UORecord
.
Text(UORecord.StringField)
Value(UORecord.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:
untyped.'01'
untyped.'my-field'
Pole
Proměnná netypovaného objektu může obsahovat pole. I když pole může být buď polem záznamů, nebo polem jednoduchých typů, převod pole netypovaného objektu na tabulku pomocí funkce Table() bude mít vždy výsledek jednosloupcovou tabulku netypovaných objektů. 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
.
Chcete-li například získat druhé číslo v poli netypovaného objektu obsahující číselné hodnoty ( [1, 2, 3]
), lze pomocí následujícího vzorce načíst druhý řádek v tabulce a převést sloupec na číslo:
Value( Index( UOArray, 2 ) )
Pokud byl netypovaný objekt nejprve převeden na Table(), druhý řádek ve výsledné jednosloupcové tabulce je sloupce Value
obsahující netypovaný objekt:
Value( Index( Table( UOArray ), 2 ).Value )
Pro pole záznamů, které mají textový sloupec nazvaný Field
, platí stejná logika. K netypovanému objektu lze přistupovat přímo nebo v případě použití funkce Table() bude výsledkem jednosloupcová tabulka netypovaných objektů.
Sloupce Field
je přístupný přímo z netypovaného objektu vráceného funkcí Index().
Text( Index( UORecordArray, 2 ).Field )
Při použití funkce Table() nejprve načtěte jednosloupcovou hodnotu Value
, abyste získali netypovaný objekt, a poté přistupujte ke sloupci Field
:
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 netypovaný objekt nejprve převede na tabulku, opět výsledná jednosloupcová tabulka netypovaných objeků bude vyžadovat použití sloupce Value
pro načtení polí.
ForAll( Table(UORecordArray), { FirstField: Value(ThisRecord.Value.FirstField), SecondField: Text(ThisRecord.Value.SecondField) } )