Comparteix a través de


Tipus de dades d'objecte sense escriure

L'objecte sense tipus és un tipus de dades del Power Fx que pot tenir qualsevol estructura de dades, complexa o simple. No es pot utilitzar directament i requereix una conversió explícita a un tipus de dades. Es pot accedir als camps dels registres d'un objecte sense tipus mitjançant la notació de punts, i l'existència de camps només es verificarà en temps d'execució.

L'objecte sense tipus és el tipus de retorn de proveïdors sense tipus específics. Actualment, només la funció ParseJSON() retorna objectes sense tipus.

Tipus simples

El valor d'una variable de tipus objecte sense tipus no es pot utilitzar directament. Sempre l'heu d'escriure correctament amb el constructor de tipus corresponent.

Els exemples següents converteixen el valor d'una variable d'objecte sense tipus anomenada UOValue.

Text(UOValue)
Value(UOValue)

A la taula següent s'enumeren els tipus de dades i les funcions corresponents per convertir objecte sense tipus a aquest tipus de dades.

Tipus de dades Function Descripció
Boolean Boolean() Quan es converteix un objecte sense escriure a booleà, el valor subjacent ha de representar un booleà o untipus que es pugui convertir automàticament (com ara una cadena "true").
Color ColorValue() o RGBA() Els colors es poden representar a la notació de definició de color Full d'estil en cascada (CSS) com a cadena o com a components RGBA individuals. L'objecte sense tipus es pot convertir directament d'una cadena de definició de Full d'estil en cadena (CSS) mitjançant la funció ColorValue() o de nombres a color amb la funció RGBA().
Divisa, número Value() En convertir un objecte sense escriure a número , el valor subjacent ha de representar un número o un tipus que es pugui convertirautomàticament (com ara una cadena "123.456").
Date, DateTime, Time DateValue(), TimeValue() o DateTimeValue() La data, l'hora i la data i hora es poden convertir directament d'objecte sense tipus al seu tipus respectiu, quan es representi en format ISO 8601. La resta de formats s'han de convertir primer a text utilitzant la funció Text() i després passar-los a la funció DateValue(), TimeValue() o DateTimeValue(), que per defecte utilitzarà el llenguatge de la configuració de l'usuari actual per interpretar la data i l'hora.
GUID GUID() Un objecte sense escriure es pot convertir directament a GUID si l'objecte subjacent representa un GUID o si representa una cadena.
HyperLink, Image, Media Text() Aquests tipus de dades són tipus de dades de text i es poden convertir en text i després utilitzar-se al Power Fx.
Choice, Two Option Switch() o If() Choices i two options es presenten com a cadenes localitzades al Power Fx. Choices tenen el suport d'un nombre i dues opcions com a booleans. No hi ha cap conversió directa de booleà, nombre o cadena a opció o dues opcions, però les funcions Switch() o If() es poden utilitzar al booleà, text o nombre per assignar correctament el valor choice o two options.
Enregistra n/d No hi ha cap conversió directa d'un objecte sense tipus a una estructura de registres, però els camps individuals es poden recuperar de l'objecte sense tipus per crear un registre nou.
Referència de registre n/d Les referències de registre són úniques de les fonts de dades i no tenen cap representació significativa en objectes sense tipus.
Table Table() i ForAll() Un objecte sense tipus pot representar una matriu, que es pot convertir en una taula. Aquests objectes poden ser matrius de registres o matrius de valors que són efectivament taules d'una columna. ForAll() es pot utilitzar per crear una taula amb registres totalment tipats. Per obtenir més informació, reviseu els exemples en aquest article.
SMS Text() El text es pot convertir directament. Si un objecte sense tipus representa un nombre, heu de convertir primer l'objecte sense tipus al nombre amb Value() per convertir-lo en text.

Tipus de registres

Podeu accedir als camps d'una variable que representi un registre d'objecte sense tipus mitjançant la notació de punts normal utilitzada per als registres. Tanmateix, l'existència de camps no es verificarà fins al temps d'execució. Per tant, no hi ha cap intellisense disponible. Si un camp no existeix o té un valor nul, l'accés a aquest valor donarà un valor Blank().

Cada camp del registre també és de tipus objecte sense tipus i s'ha de escriure correctament. El camp pot ser un registre sense tipus de tipus senzill. En cas que sigui un registre, podeu encadenar la notació de punts. Si no hi ha cap camp a la cadena, es retornarà Blank().

Els exemples següents utilitzen camps d'un objecte sense tipus anomenat UORecord.

Text(UORecord.StringField)
Value(UORecord.Field.ChildField)

En cas que un nom de camp consisteixi en un nom d'identificador no vàlid, per exemple, quan els noms dels camps comencen per un número o contenen caràcters no vàlids, com ara un guionet, podeu col·locar els noms dels camps entre cometes simples:

untyped.'01'
untyped.'my-field'

Matrius

Una variable d'objecte sense tipus pot contenir una matriu. Encara que la matriu sigui una matriu de registres o una matriu de tipus simples, la conversió de la matriu d'objecte sense tipus en una taula utilitzant la funció Table() sempre tindrà com a resultat una taula d'objecte sense tipus d'una sola columna. Les funcions com ara ForAll() i Index() no requereixen que creeu primer una Table() i, per tant, no cal que utilitzeu el camp Value d'una sola columna.

Per exemple, per obtenir el segon nombre en una matriu d'objectes sense tipus que conté valors numèrics ( [1, 2, 3] ), la fórmula següent es pot utilitzar per recuperar la segona fila de la taula i convertir la columna en un nombre:

Value( Index( UOArray, 2 ) )

Si l'objecte sense tipus s'ha convertit en una Table() primer, la segona fila de la taula d'una columna resultant és una columna Value que conté l'objecte sense tipus.

Value( Index( Table( UOArray ), 2 ).Value )

Per a una matriu de registres que té una columna de text anomenada Field, s'aplica la mateixa lògica. L'objecte sense tipus es pot accedir directament o, si s'utilitza la funció Table() tindrà com a resultat una taula d'una columna d'objecte sense tipus.

A la columna Field s'hi pot accedir directament des de l'objecte sense tipus retornat per la funció Index().

Text( Index( UORecordArray, 2 ).Field )

Quan utilitzeu la funció Table(), primer recupereu la columna Value d'una columna per obtenir l'objecte senst tipus i, a continuació, accediu a la columna Field:

Text( Index( Table( UORecordArray ), 2 ).Value.Field )

Per convertir una matriu de registres en una taula amb tipus, podeu utilitzar la funció ForAll() i convertir cada camp individual.

ForAll( UORecordArray, { FirstField: Value(ThisRecord.FirstField), SecondField: Text(ThisRecord.SecondField) } )

Si l'objecte sense tipus es converteix primer en una taula, de nou, la taula resultant d'objecte sense tipus necessitarà que utilitzeu la columna Value per obtenir els camps.

ForAll( Table(UORecordArray), { FirstField: Value(ThisRecord.Value.FirstField), SecondField: Text(ThisRecord.Value.SecondField) } )