Datatyp för typlöst objekt
typlöst objektär en datatyp som Power Fx kan innehålla vilken datastruktur som helst, komplex eller enkel. Den kan inte användas direkt och kräver explicit konvertering till en datatyp. Fält i poster i ett objekt utan angiven typ kan nås med hjälp av punktmarkering och förteckningar över fält verifieras endast vid körning.
typlöst objektär returtypen för specifika leverantörer utan typ. För tillfället returnera funktionen ParseJSON() objekt utan angiven typ.
Enkla typer
Värdet för en variabel av typen objekt utan angiven typ objekt kan inte användas direkt. Du måste alltid skriva rätt med motsvarande typkonstruktor.
I följande exempel konverteras värdet för variabeln objekt utan angiven typ till namnet UOValue
.
Text(UOValue)
Value(UOValue)
I följande tabell visas datatyperna och motsvarande funktioner som används för att konvertera objekt utan angiven typ till den datatypen.
Datatyp | Function | Description |
---|---|---|
Booleskt | boolesk() | När du konverterar typlöst objekt till booleskt, måste det underliggande värdet representera en boolesk eller en typ som kan konverteras automatiskt (till exempel en sträng "true"). |
Color | ColorValue() eller RGBA() | Färger kan representeras i sammanhängande formatmallar (CSS) färgdefinitions notation som en sträng, eller som enskilda RGBA-komponenter. Objekt utan angiven typ kan konverteras direkt från sammanhängande formatmallar (CSS) med funktionen ColorValue() eller från individuell RGBA nummer till färg med funktionen RGBA(). |
Valuta, tal | Värde() | När du konverterar typlöst objekt till nummer, måste det underliggande värdet representera ett nummer eller en typ som kan konverteras automatiskt (till exempel en sträng "123.456"). |
Datum, DateTime, Tid | DateValue(), TimeValue() eller DateTimeValue() | Datum, tid och datetime kan konverteras direkt från objekt utan angiven typ till respektive typ, när de representeras i ISO 8601-format. Andra format måste först konverteras till text med funktionen Text() och anges sedan i funktionen DateValue(), TimeValue() eller DateTimeValue() som standard använder språket i den aktuella användarens inställningar för att tolka datum och tid. |
GUID | GUID() | Ett typlöst objekt kan konverteras direkt till GUID om det underliggande objektet representerar ett GUID, eller om det representerar en sträng. |
HyperLink, bild, Media | Text() | Dessa datatyper är textdatatyper och kan konverteras till text och sedan användas i Power Fx. |
Val, två alternativ | switch() eller if() | Val och två alternativ visas som lokaliserade strängar i Power Fx. Alternativen backas upp av ett nummer och två alternativ som booleska värden. Det finns ingen direkt konvertering från boolesk, tal eller sträng till val eller två alternativ, men funktionerna Switch() eller If() kan användas på booleska, text- eller talvärden för att korrekt tilldela värdet val eller två alternativet. |
Post | saknas | Det finns ingen direkt konvertering från objekt utan angiven typ till en poststruktur, men enskilda fält kan hämtas från objekt utan angiven typ för att skapa en ny post. |
Referens för post | saknas | Postreferenser är unika för datakällor och har ingen meningsfull representation i objekt utan angiven typ. |
Register | Table() och ForAll() | Ett objekt utan angiven typ kan representera en matris som kan konverteras till en tabell. Dessa objekt kan vara matriser med poster eller matriser med värden som i praktiken är tabeller med en kolumn. ForAll() kan användas för att skapa en tabell med fullständigt skrivna poster. Läs exemplen längre ned i den här artikeln om du vill ha mer information. |
Text | Text() | Text kan konverteras direkt. Om ett objekt utan angivet värde representerar ett tal måste du först konvertera objekt utan angivet värde till tal med Value() innan du konverterar till text. |
Posttyper
Du kan komma åt fält på en variabel som representerar objekt utan angivet värde med hjälp av vanlig punktmarkering för poster. Om det finns fält eller inte kommer inte att verifieras förrän vid körning. Det finns därför inte heller någon intellisense tillgänglig. Om ett fält inte finns eller har ett underliggande null-värde resulterar åtkomsten till det i ett Blank() värde.
Varje fält i posten är också av typen objekt utan angivet värde och måste skrivas korrekt. Fältet kan vara en post utan angivet värde av enkel typ. Om det är en post kan du skapa en punktmarkering. Om något fält i programmet inte finns returneras Blank().
I följande exempel används fält från ett objekt utan angiven typ till namnet UORecord
.
Text(UORecord.StringField)
Value(UORecord.Field.ChildField)
Om ett fältnamn består av ett ogiltigt ID-namn, till exempel när fältnamnen börjar med ett tal eller innehåller ogiltiga tecken, t.ex. ett bindestreck, kan du placera fältnamnen i enskilda citattecken:
untyped.'01'
untyped.'my-field'
Matriser
En variabel objekt utan angiven typ kan innehålla en matris. Även om matrisen kan vara antingen en matris av poster eller matris av enkla typer, konverterar matrisen objekt utan angiven typ till en tabell med funktionen Table() har alltid ett resultat i en tabell med en kolumn av objekt utan angiven typ. För funktioner som ForAll() och Index() behöver du inte först skapa en Table() och därför behöver du inte använda fältet Value
med en kolumn,
Om du till exempel vill hämta det andra numret i en matris med objekt utan angiven typ med nummervärden ([1, 2, 3]
), följande formel kan användas för att hämta den andra raden i tabellen och konvertera kolumnen till ett tal:
Value( Index( UOArray, 2 ) )
Om objekt utan angiven typ först konverterades till en Table() först är den andra raden i den resulterande tabellen med en kolumn Value
som innehåller objekt utan angiven typ:
Value( Index( Table( UOArray ), 2 ).Value )
För en matris med poster som har en textkolumn med namnet Field
gäller samma logik. Ett objekt utan angiven typ kan kommas åt direkt eller om du använder funktionen Table() resulterar i en tabell med en kolumn med objekt utan angiven typ.
Kolumnen Field
kan nås direkt från objekt utan angiven typ som returneras av funktionen Index().
Text( Index( UORecordArray, 2 ).Field )
När du använder funktionen Table() hämtar du först den enskilda kolumnen för Value
för att hämta objekt utan angiven typ och sedan kolumnen Field
:
Text( Index( Table( UORecordArray ), 2 ).Value.Field )
Om du vill konvertera en matris med poster till en typad tabell kan du använda funktionen ForAll() och konvertera varje enskilt fält.
ForAll( UORecordArray, { FirstField: Value(ThisRecord.FirstField), SecondField: Text(ThisRecord.SecondField) } )
Om objekt utan angiven typ först konverteras till en tabell kräver tabellen med en kolumn för objekt utan angiven typ kräver att du använder kolumnen Value
för att hämta fälten.
ForAll( Table(UORecordArray), { FirstField: Value(ThisRecord.Value.FirstField), SecondField: Text(ThisRecord.Value.SecondField) } )