Data Types
Nota
Microsoft Power Fx és el nom nou del llenguatge de formules de les aplicacions de llenç. Aquests articles són un treball en curs a mesura que extraiem el llenguatge de les aplicacions de llenç, l'integrem amb altres productes del Microsoft Power Platform i fem que estigui disponible com a codi obert. Comenceu amb la Informació general del Microsoft Power Fxper veure una introducció al llenguatge.
La informació flueix a través d'una aplicació en valors petits i discrets, com ara les cel·les d'un full de càlcul. Per exemple, les dades d'un camp Natalici i d'un camp Aniversari fluirien com un valor Data que inclou l'any, el mes i el dia. L'aplicació sap com formatar aquests valors, restringir l'entrada al que és apropiat per a cadascun d'ells i compartir els valors amb una base de dades. Els natalicis es diferencien dels aniversaris a la gent, però el sistema els gestiona de la mateixa manera. En aquest cas, Data és un exemple de tipus de dades.
En aquest article es proporciona informació sobre els tipus de dades que admeten les aplicacions del llenç. Quan una aplicació es connecta a una font de dades externa, cada tipus de dades de la font s'assigna a un tipus de dades per a les aplicacions del llenç.
Tipus de dades | Descripció | Exemples |
---|---|---|
Booleà | Un valor de cert o fals. Es pot utilitzar directament a If, Filter i altres funcions sense comparació. | veritable |
Color | Especificació de color, incloent-hi un canal alfa. | Color.Vermell ColorValue( "#102030") RGBA( 255, 128, 0, 0.5 ) |
Moneda | Valor de moneda que s'emmagatzema en un número de coma flotant. Els valors de moneda són el mateix que els valors de número amb opcions de format de moneda. | 123 4.56 |
Datar | Una data sense hora, a la zona horària de l'usuari de l'aplicació. | Data( 2019, 5, 16 ) |
DataHora | Una data amb hora, a la zona horària de l'usuari de l'aplicació. | DateTimeValue( "16 de maig, 2019 1:23:09 PM" ) |
Decimal | Un número d'alta precisió, operacions de base 10 i abast limitat. | 123 Decimal( "1.2345" ) |
GUID | Un identificador únic global. | GUID() GUID( "123e4567-e89b-12d3-a456-426655440000" ) |
Enllaç | Cadena de text que conté un enllaç. | "https://powerapps.microsoft.com" |
Imatge | Una cadena de text d'un Identificador universal de recurs (URI) a una imatge en format .jpeg, .png, .svg, .gif o qualsevol altre format d'imatge web comú. | MyImage afegit com a recurs de l'aplicació "https://northwindtraders.com/logo.jpg" "appres://blobmanager/7b12ffa2..." |
Mitjans | Cadena de text de l'URI en un vídeo o enregistrament d'àudio. | MyVideo afegit com a recurs de l'aplicació "https://northwindtraders.com/intro.mp4" "appres://blobmanager/3ba411c..." |
Nombre o flotant | Un número amb precisió estàndard, operacions de base 2 i una àmplia gamma. | 123 8.903e121 1.234e200 |
Elecció | Una opció d'un conjunt d'opcions, amb el suport d'un nombre. Aquest tipus de dades combina una etiqueta de text localitzable amb un valor numèric. L'etiqueta es mostra a l'aplicació i el valor numèric s'emmagatzema i s'utilitza per a les comparacions. | ThisItem.OrderStatus |
Rècord | Registre de valors de dades. Aquest tipus de dades compostes conté instàncies d'altres tipus de dades que s'enumeren en aquest tema. Més informació: Treballar amb taules. | { Companyia: "Northwind Traders", Personal: 35, Sense ànim de lucre: fals } |
Referència del registre | Una referència a un registre d'una taula. Aquestes referències s'utilitzen sovint amb les cerques polimòrfiques. Més informació: Treballar amb referències. | Primer(Comptes). Propietari |
Taula | Taula de registres. Tots els registres han de tenir els mateixos noms per als seus camps amb els mateixos tipus de dades i els camps omesos es tracten en blanc. Aquest tipus de dades compostes conté instàncies d'altres tipus de dades que s'enumeren en aquest tema. Més informació: Treballar amb taules. | Taula( { Nom: "Sidney", LastName: "Higa" }, { FirstName: "Nancy", LastName: "Anderson" } ) |
SMS | Cadena de text Unicode. | "Hola, món" |
Hora | Una hora sense data, a la zona horària de l'usuari de l'aplicació. | Temps( 11, 23, 45 ) |
Dues opcions | Una opció d'un conjunt de dues opcions, amb el suport d'un valor booleà. Aquest tipus de dades combina una etiqueta de text localitzable amb un valor booleà. L'etiqueta es mostra a l'aplicació i el valor booleà s'emmagatzema i s'utilitza per a les comparacions. | ThisItem.Subjecte a impostos |
objecte sense tipus | Un objecte d'un tipus no declarat. L'objecte subjacent podria ser qualsevol tipus existent i es pot convertir en tipus compatibles amb funcions com ara Boolean(), Value(), Table() etc. Per obtenir més informació, vegeu Objecte Untyped i Treballar amb JSON. | ParseJSON ("{ ""Field"" : 1234 }"). Camp |
Molts d'aquests tipus de dades són semblants i tenen la mateixa representació subjacent, com ara un camp Enllaç que es tracta com a Text. Els tipus de dades addicionals proporcionen millors experiències per defecte dels formularis i altres controls.
En blanc
Tots els tipus de dades poden tenir un valor buit (és a dir, cap valor). El terme "nul" s'utilitza sovint a les bases de dades d'aquest concepte.
Utilitzeu la funció Blank amb la funció Set o Patch per definir una variable o un camp en blanc. Per exemple, Set( x, Blank() ) suprimeix qualsevol valor de la variable x global.
Proveu un valor en blanc mitjançant la funció IsBlank. Substituïu els valors en blanc possibles amb valors que no siguin en blanc mitjançant la funció Coalesce.
Com que tots els tipus de dades admeten en blanc, els tipus de dades Booleà i Dues opcions tenen en efecte en tres valors possibles.
Text, enllaç, imatge i multimèdia
Els quatre d'aquests tipus de dades es basen en una cadena de text Unicode.
Text incrustat
Les cadenes de text incrustades d'una fórmula s'escriuen entre cometes dobles. Utilitzeu dues cometes dobles per representar una sola cometa doble a la cadena de text. Per exemple, utilitzar la fórmula següent a la propietat OnSelect del control Botó:
Notify( "Jane said ""Hello, World!""" )
resulta en un bàner quan es prem el botó, on s'ometen les primeres i les darreres cometes dobles (ja que delimiten la cadena de text) i les cometes dobles repetides al voltant de Hola món! se substitueixen per una cometa doble simple:
Les cometes simples s'utilitzen per als noms d'identificador que contenen caràcters especials i no tenen cap significat especial dins d'una cadena de text.
Interpolació de cadenes
Utilitzeu la interpolació de cadenes per incrustar fórmules dins d'una cadena de text. Sovint és més fàcil treballar i visualitzar la sortida que utilitzar la funció Concatenate o l'operador & .
Prefixeu la cadena de text amb un signe de dòlar $ i tanqueu la fórmula que s'incrustarà amb claus { }. Per incloure una clau a la cadena de text, utilitzeu claus repetides: {{ o }}. La interpolació de cadenes es pot utilitzar a qualsevol lloc on es pugui utilitzar una cadena de text estàndard.
Per exemple, considereu aquesta fórmula amb variables globals Pomes establert en 3 i Plàtans establert en 4:
$"We have {Apples} apples, {Bananas} bananas, yielding {Apples+Bananas} fruit total."
Aquesta fórmula torna la cadena de text Tenim 3 pomes, 4 plàtans, amb un total de 7 fruites. Les variables Pomes i Plàtans s'insereixen en el text substituint les claus, juntament amb el resultat de la fórmula matemàtica Pomes+Plàtans. Els espais i altres caràcters que envolten les claus es conserven tal com són.
Les fórmules incrustades poden incloure qualsevol funció o operador. Tot el que cal és que el resultat de la fórmula es pugui convertir en una cadena de text. Per exemple, aquesta fórmula inserirà NickName si se subministra, o FirstName si no se subministra, en una salutació:
$"Welcome {Coalesce( NickName, FirstName )}, it's great to meet you!" )
Si NickName s'estableix en "Joe", aquesta fórmula produirà la cadena de text Benvingut Joe, encantat de conèixer-te! Però si NickName és un espai_en_blanc i FirstName es "Joseph", aleshores aquesta fórmula genera Estimat Joseph, és un plaer conèixer-te!.
La interpolació de cadenes pot incloure cadenes de text estàndard a la fórmula incrustada. Per exemple, si no se subministra NickName ni FirstName, encara podríem proporcionar "Amic" com a substitut:
$"Welcome {Coalesce( NickName, FirstName, "Friend" )}!"
Les interpolacions de cadena es poden fins i tot imbricar. Considereu aquest exemple, on els noms First, Middle i Last es combinen en una salutació. Fins i tot si un o dos d'aquests valors són espai_en_blanc, el nombre correcte d'espais estarà entre les parts del nom. Si no es proporciona cap de les peces, la interpolació de la cadena interna es reduirà a una cadena buida i se substituirà per la funció Coalesce per "Amic".
$"Welcome {Coalesce( Trim( $"{First} {Middle} {Last}"}), "Friend" )}!"
Nom | Mig | Última | Resultat |
---|---|---|---|
John | Qunicy | Doe | Welcome John Quincy Doe! |
John | Buit | Doe | Welcome John Doe! |
Buit | Buit | Doe | Welcome Doe! |
Buit | Buit | Buit | Welcome Friend! |
Noves línies
Les cadenes de text incrustades poden contenir salts de línia. Per exemple, considereu establir la propietat Text d'un control Label al següent:
"Line 1
Line 2
Line 3"
La fórmula anterior dona com a resultat tres línies que es mostren al control Label:
Les noves línies també són compatibles amb la interpolació de cadenes, com es mostra a continuació:
$"Line {1}
Line {1+1}
Line {1+1+1}"
La fórmula anterior genera la mateixa sortida:
Recursos d'imatge i multimèdia
A través del menú Fitxer, podeu afegir fitxers d'imatge, vídeo i àudio com a recursos d'aplicació. El nom del fitxer importat es converteix en el nom del recurs a l'aplicació. En aquest gràfic, el logotip de Northwind Traders, que s'anomena nwindlogo, s'ha afegit a una aplicació:
Per utilitzar aquest recurs en una aplicació, especifiqueu-lo a la propietat Imatge d'un control Imatge:
URI per a imatges i altres continguts multimèdia
Podeu aprofundir una mica més en aquest últim exemple configurant la propietat Text d'un control Etiqueta a nwindlogo. L'etiqueta mostra una cadena de text:
Les aplicacions del llenç fan referència a cada imatge o a un altre fitxer multimèdia, tant si es troba al núvol com si s'afegeix com a recurs de l'aplicació, mitjançant una cadena de text de l'URI.
Per exemple, la propietat Image d'un control d'imatge no només accepta recursos de l'aplicació, sinó també enllaços a imatges del web, com ara "https://northwindtraders.com/logo.jpg". La propietat també accepta imatges en línia que utilitzen l'esquema URI de dades, com en aquest exemple:
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAFAQMAAACtnVQoAAAABlBMVEUAAAB0J3UMNU6VAAAAAXRSTlMAQObYZgAAABRJREFUCNdjUGJgCGVg6GgAkkA2AA8/AffqCEBsAAAAAElFTkSuQmCC"
L'URI mostra una versió en escala de dos diamants de color porpra:
Podeu mostrar la imatge més recent capturada en un control Càmera si definiu la propietat Imatge d'un control d'imatge a la propietat Photo del control de càmera. L'aplicació té la imatge en memòria i la propietat Photo del control de la càmera torna una referència de l'URI a la imatge. Per exemple, podeu capturar una imatge i la propietat Photo de la càmera podria retornar "appres://blobmanager/7b12ffa2ea4547e5b3812cb1c7b0a2a0/1".
Utilitzeu un URI per fer referència a una imatge o a un altre fitxer multimèdia que s'emmagatzema en una base de dades. D'aquesta manera, l'aplicació no recupera les dades reals fins que no es necessitin. Per exemple, un fitxer adjunt d'una taula del Microsoft Dataverse podria tornar "appres://datasources/Contacts/table/..." Com a l'exemple de la càmera, podeu visualitzar aquesta imatge ajustant la propietat Imatge d'un control d'imatge a aquesta referència, que recupera les dades binàries.
Quan deseu un tipus de dades multimèdia, com ara una imatge, a una base de dades, l'aplicació envia les dades d'imatge o de contingut multimèdia, no la referència de l'URI.
Límits de mida
Com les cadenes de text i els URI, aquests tipus de dades no tenen límit de longitud.
Les dades binàries a les quals fan referència aquests tipus de dades tampoc no tenen un límit de mida predeterminat. Per exemple, una imatge capturada a través del control de la càmera a la qual es fa referència com a "appres://..." pot tenir una mida i una resolució tan grans com la capacitat de la càmera del dispositiu. La resolució, la taxa de fotogrames i altres atributs dels fitxers multimèdia no estan limitades pel tipus de dades, però els controls específics per a la reproducció i la captura de contingut poden tenir les seves pròpies limitacions.
No obstant, totes les mides de dades estan subjectes a la quantitat de memòria disponible a l'aplicació. Els navegadors que s'executen en un ordinador d'escriptori solen admetre més de 100 megabytes de dades. No obstant, la quantitat de memòria disponible en un dispositiu com ara un telèfon pot ser una mica més baixa, normalment en l'interval de 30-70 megabytes. Per determinar si l'aplicació s'executarà dins d'aquests límits, proveu escenaris habituals a tots els dispositius en els quals hauria d'executar-se.
Com a millor pràctica, cal mantenir les dades en memòria només sempre que calgui. Carregueu imatges a una base de dades tan bon punt pugueu; baixeu les imatges només quan l'usuari de l'aplicació les sol·liciti.
Números
Nota
Power Apps només admet Float avui i és el tipus de tots els números. Aviat s'afegirà suport decimal .
Power Fx admet dos tipus de números: decimal i flotant (amb sinònims nombre i moneda).
El decimal és el millor per a la majoria de càlculs empresarials. Pot representar amb precisió els números en base 10, el que significa que 0.1
es pot representar exactament i no serà propens a errors d'arrodoniment durant els càlculs. Té un rang prou gran per a qualsevol necessitat empresarial, fins a 1028 amb fins a 28 dígits de precisió. Decimal és el tipus de dades numèriques predeterminat per a la majoria Power Fx d'equips, utilitzat si simplement s'escriu 2*2
.
El flotador és el millor per a càlculs científics. Pot representar nombres en un rang molt més gran, fins a 10308. La precisió està limitada a 15 decimals i les matemàtiques es basen en la base 2, de manera que no poden representar amb precisió alguns valors decimals comuns. El flotador també té un rendiment més alt i s'afavoreix si aquest és un factor i la precisió no és crítica.
Nombres decimals
El tipus de dades Decimal utilitza amb més freqüència el tipus de dades decimal .NET. Alguns equips, com ara Dataverse les columnes de fórmules que s'executen a l'SQL Serer, utilitzen el tipus de dades decimals de l'SQL Server.
Decimal fa matemàtiques de la mateixa manera que vas aprendre a l'escola, utilitzant dígits de base 10. Això és molt important per evitar errors d'arrodoniment de diferències molt petites que es poden acumular quan s'utilitzen matemàtiques de base 2 (com les utilitzades per Float).
El rang és de 79,228,162,514,264,337,593,543,950,335 positiu a 79,228,162,514,264,337,593,543,950,335 negatiu. El separador decimal es pot col·locar en qualsevol lloc dins d'aquests números, proporcionant fins a 28 dígits de precisió, i encara es pot representar amb precisió. Per exemple, 79,228,162,514,264.337593543950335 es pot representar exactament, igual que 7.9228162514264337593543950335.
Nombres de coma flotant
El tipus de dades Float , també conegut com a Number o Currency, utilitza l'estàndard de coma flotant de doble precisió IEEE 754. Aquesta norma proporciona un interval molt ampli de números en què treballar, des de –1,79769 x 10308 fins a 1,79769 x 10308. El valor més petit que es pot representar és 5 x 10–324.
El flotant pot representar exactament nombres enters (o enters) entre –9,007,199,254,740,991 (–(253 – 1)) i 9,007,199,254,740,991 (253 – 1), ambdós inclosos. Aquest interval és major que els tipus de dades d'enters de 32 bits (o 4 bytes) que s'utilitzen habitualment en bases de dades. No obstant, les aplicacions del llenç no poden representar els tipus de dades d'enters de 64 bits (o de 8 bytes). Pot ser que us interessi emmagatzemar el número en un camp de text o utilitzar una columna calculada per fer una còpia del número en un camp de text, de manera que s'assigni a un tipus de dades Text a l'aplicació del llenç. D'aquesta manera, podeu mantenir, visualitzar i introduir aquests valors, així com comparar-los per determinar si són iguals; tanmateix, no podeu fer càlculs numèrics en aquest formulari.
L'aritmètica de punt flotant és aproximada, de manera que de vegades pot donar resultats inesperats amb molts exemples documentats. Potser espereu que la fórmula 55 / 100 * 100 retorni exactament 55 i que (55 / 100 * 100) - 55 retorni exactament zero. No obstant això, l'última formula retorna 7,1054 x 10–15, que és molt petit però no zero. Aquesta diferència minúscula normalment no causa cap problema i l'aplicació l'arrodoneix en mostrar el resultat. No obstant, les petites diferències poden acumular-se en càlculs posteriors i semblar donar una resposta incorrecta.
Els sistemes de base de dades sovint emmagatzemen monedes i realitzen càlculs mitjançant matemàtica decimal, que ofereix un interval més petit però un major control sobre la precisió. Per defecte, les aplicacions del llenç assignen les monedes dins i fora de valors de coma flotant; per tant, pot ser que el resultat sigui diferent dels càlculs que es facin en un tipus de dades decimal natiu. Si aquest tipus de discrepància provoca problemes, pot ser que us interessi treballar amb aquests valors com a Text, com podríeu fer amb enters grans descrits abans en aquesta secció.
Valors predeterminats i conversions
Nota
Power Apps només admet Float avui i és el tipus de tots els números. Aviat s'afegirà suport decimal .
La majoria d'equips Power Fx utilitzen Decimal per defecte. Això afecta:
- Nombres literals en fórmules. El nombre
1.234
s'interpretarà com un valor decimal . Per exemple, la fórmula1.234 * 2
interpretarà el i1.234
com2
a decimal i retornarà un resultat decimal . - Funció de valor.
Value( "1.234" )
retornarà un valor decimal . Per exemple, la fórmulaValue( "1.234" ) * 2
de la funció Valor interpretarà el contingut de la cadena"1.234"
de text com un decimal.
Per treballar amb valors Float , s'utilitza la funció Float . Ampliant l'exemple anterior, Float( 1.234 )
es convertirà el decimal1.234
a flotant. Float també es pot utilitzar com a reemplaçament de Value per convertir una cadena que conté un número de coma flotant com Float( "1.234" )
ara un valor Float , que és necessari si el nombre no es pot representar com a decimal.
En resum:
Ús | Decimal | Flotar |
---|---|---|
Nombres literals en fórmules | 1.234 |
Float( 1.234 ) Float( "1.234" ) |
Conversió de cadena de text | Value( "1.234" ) Decimal( "1.234" ) |
Float( "1.234" ) |
Conversió entre tipus numèrics | Decimal( float ) |
Float( decimal ) |
Conversió a cadena de text | Text( decimal ) |
Text( float ) |
Barreja de tipus numèrics
Els valors flotants i decimals es poden barrejar lliurement. Quan es barregen, els valors decimals es converteixen en valors flotants a causa de l'interval més gran. Com que això pot provocar una pèrdua de precisió, és important no barrejar els dos innecessàriament. Com que Decimal és el tipus de dades literal predeterminat i la majoria de les funcions numèriques conservaran el tipus, és relativament fàcil evitar moure's a Float sense desitjar-ho.
Per exemple, considereu el càlcul següent després d'instal pac power-fx repl
·lar la Power Platform CLI. Com que els dos números són decimals, el càlcul es fa en decimal i el resultat conserva una precisió completa:
>> 1.0000000000000000000000000001 * 2
2.0000000000000000000000000002
Si, en canvi, el segon operand es canviés a Float , tot el càlcul es faria a Float i es perdria la petita part fraccionària:
>> 1.0000000000000000000000000001 * Float(2)
2
Data, Hora i DateTime
Fusos horaris
Els valors de data/hora es classifiquen en aquestes categories:
- Local de l'usuari: aquests valors s'emmagatzemen a UTC (temps universal coordinat), però la zona horària de l'usuari de l'aplicació afecta com l'aplicació mostra aquests valors i com l'usuari de l'aplicació els especifica. Per exemple, el mateix moment apareix de manera diferent a un usuari del Canadà que a un usuari del Japó.
- Independent de la zona horària: l'aplicació mostra aquests valors de la mateixa manera i l'usuari de l'aplicació els especifica de la mateixa manera, independentment de la zona horària. El mateix moment apareix igual a un usuari del Canadà i a un usuari del Japó. Els creadors de l'aplicació que no esperen que les seves aplicacions s'executin en zones horàries diferents utilitzen aquests valors perquè són més simples en general.
En aquesta taula es mostren alguns exemples:
Tipus data/hora | Valor emmagatzemat a la base de dades | Valor mostrat i introduït a 7 hores a l'oest de l'UTC | Valor mostrat i introduït a 4 hores a l'est de l'UTC |
---|---|---|---|
Local d'usuari | Diumenge, 19demaig,2019 4:00 AM |
Dissabte, 18demaig,2019 9:00 PM |
Diumenge, 19demaig,2019 8:00 AM |
Independent de la zona horària | Diumenge, 19demaig,2019 4:00 AM |
Diumenge, 19demaig,2019 4:00 AM |
Diumenge, 19demaig,2019 4:00 AM |
Per a les dades i hores Hora local de l'usuari, les aplicacions del llenç utilitzen la zona horària del navegador o dispositiu, però les aplicacions basades en models utilitzen la configuració de l'usuari al Dataverse. Normalment, aquestes opcions coincideixen, però els resultats són diferents si aquesta configuració és diferent.
Utilitzeu les funcions DateAdd i TimeZoneInformation per convertir l'hora local en UTC i viceversa. Vegeu els exemples al final de la documentació d'aquestes funcions.
Equivalents numèrics
Les aplicacions del llenç emmagatzemen i calculen tots els valors de data/hora, tant Hora local de l'usuari o Independent del fus horari, en UTC. L'aplicació tradueix els valors basats en la zona horària de l'usuari de l'aplicació per mostrar-los i quan l'usuari de l'aplicació els especifica.
Quan una aplicació del llenç llegeix un valor Independent del fus horari d'una font de dades o escriu un valor a una font de dades, l'aplicació ajusta automàticament el valor per compensar la zona horària de l'usuari de l'aplicació. A continuació, l'aplicació tracta el valor com un valor UTC, coherent amb tots els altres valors de data/hora a l'aplicació. A causa d'aquesta compensació, el valor Independent del fus horari original es mostra quan l'aplicació ajusta el valor UTC per al fus horari de l'usuari de l'aplicació.
Podeu observar aquest comportament amb més deteniment utilitzant la funció Value per accedir al valor numèric subjacent per a un valor de data/hora. Aquesta funció retorna el valor de data/hora com a nombre de mil·lisegons des de l'1 de gener de 1970 00:00:00.000 UTC.
Com que cada valor de data i hora s'emmagatzema en UTC, la fórmula Value( Date( 1970, 1, 1 ) ) no retornarà zero a la major part del món perquè la funció Date torna una data en UTC. Per exemple, la fórmula retornarà 28.800.000 en una zona horària que difereix de l'UTC en vuit hores. Aquest nombre reflecteix el nombre de mil·lisegons en vuit hores.
Tornant al nostre exemple anterior:
Tipus data/hora | Valor emmagatzemat a la base de dades | Valor mostrat i introduït a 7 hores a l'oest de l'UTC | Retorn de la funció de valor |
---|---|---|---|
Local d'usuari | Diumenge, 19demaig,2019 4:00 AM |
Dissabte, 18demaig,2019 9:00 PM |
1,558,238,400,000 (Diumenge, 19demaig,2019 4:00 AM UTC) |
Independent de la zona horària | Diumenge, 19demaig,2019 4:00 AM |
Diumenge, 19demaig,2019 4:00 AM |
1,558,263,600,000 (Diumenge, 19demaig,2019 11:00 AM UTC) |
Convertir hores de l'Unix
Les hores de l'Unix reflecteixen el nombre de segons des de l'1 de gener de 1970 00:00:00 UTC. Com que les aplicacions del llenç utilitzen mil·lisegons en comptes de segons, podeu convertir entre els dos multiplicant o dividint per 1.000.
Per exemple, l'hora de l'Unix mostra el 9 de setembre de 2001, a la 01:46:40 UTC com a 1.000.000.000. Per mostrar aquest valor de data/hora en una aplicació del llenç, multipliqueu-lo per 1.000 per convertir-lo en mil·lisegons i, a continuació, utilitzeu-lo en una funció Text. La fórmula Text( 1000000000 * 1000, DateTimeFormat.UTC ) retorna la cadena 2001-09-09T01:46:40.000Z.
No obstant això, aquesta funció retorna Dissabte, 8 de setembre de 2001 18:46:40 si utilitzeu el format DateTimeFormat.LongDateTime24 en una zona horària amb -7 hores de diferència des de l'UTC (7 hores a l'oest de l'UTC). Aquest resultat mostra correctament el valor DateTime que es basa en la zona horària local.
Per convertir-la en una hora de l'Unix, dividiu el resultat de Value entre 1.000:
RoundDown( Valor( UnixTime ) / 1000, 0 )
Si necessiteu l'hora de l'Unix en un valor Data per continuar els càlculs o per mostrar-la al Power Apps, utilitzeu aquesta fórmula:
DateAdd( Data( 1970,1,1 ), UnixTime, Segons )
SQL Server
L'SQL Server té Datetime, Datetime2 i altres tipus de dades de data/hora que no inclouen un desplaçament de zona horària i no indiquen en quina zona horària es troben. Les aplicacions del llenç assumeixen que aquests valors que s'emmagatzemen en UTC i els tracten com a Hora local de l'usuari. Si els valors estan destinats a ser independents del fus horari, corregiu les traduccions a l'UTC mitjançant la funció TimeZoneOffset.
Les aplicacions del llenç utilitzen la informació sobre la zona horària dels camps Datetimeoffset per convertir un valor en la representació interna en UTC de l'aplicació. Les aplicacions sempre utilitzen l'UTC com a fus horari (diferència de fus horari zero) quan escriuen dades.
Les aplicacions del llenç llegeixen i escriuen els valors del tipus de dades Hora a l'SQL Server com a cadenes de text en el format de duració ISO 8601. Per exemple, heu d'analitzar aquest format de cadena i utilitzar la funció Time per convertir la cadena de text "PT2H1M39S" a un valor Hora:
With(
Match( "PT2H1M39S", "PT(?:(?<hours>\d+)H)?(?:(?<minutes>\d+)M)?(?:(?<seconds>\d+)S)?" ),
Time( Value( hours ), Value( minutes ), Value( seconds ) )
)
// Result: 2:01 AM (as shown in a label control, use the Text function to see the seconds)
Mesclar informació de data i hora
Date, Time i DateTime tenen noms diferents, però tots contenen la mateixa informació sobre dates i hores.
Un valor Data pot incloure informació d'hora, la qual cosa sol ser la mitjanit. Un valor Hora pot incloure informació de data, que sol ser l'1 de gener de 1970. El Dataverse també emmagatzema informació d'hora amb un camp Només data però només mostra la informació de la data per defecte. De manera semblant, les aplicacions del llenç distingeixen de vegades entre aquests tipus de dades per determinar els formats i els controls per defecte.
Sumar i restar directament valors de data i hora no és recomanable perquè la zona horària i altres conversions podrien generar resultats que poden confondre. Utilitzeu la funció Value per convertir els valors de data/hora en mil·lisegons i tingueu en compte el fus horari de l'usuari de l'aplicació, o bé utilitzeu les funcions DateAdd i DateDiff per sumar o restar d'un d'aquests valors.
Eleccions i Sí/No
Les eleccions i els tipus de dades de dues opcions proporcionen dues o més eleccions perquè un usuari de l'aplicació les seleccioni. Per exemple, una opció Estat de la comanda pot oferir les opcions Nova, Enviada, Facturada i Tancada. El tipus de dades de dues opcions només ofereix dues opcions.
Tots dos tipus de dades mostren les seves etiquetes en un context de cadena de text. Per exemple, un control d'etiqueta mostra una de les opcions d'estat de comanda si la propietat Text del control es defineix com una fórmula que fa referència a aquesta opció. Pot ser que les etiquetes d'opcions es localitzin per a usuaris d'aplicacions en diferents ubicacions.
Quan un usuari de l'aplicació selecciona una opció i desa aquest canvi, l'aplicació transmet les dades a la base de dades, que emmagatzema dades en una representació que és independent de la llengua. Una opció en una elecció es transmet i s'emmagatzema com a nombre, i una opció en un tipus de dades de dues opcions es transmet i s'emmagatzema com a valor booleà.
Les etiquetes són només per a finalitats de visualització. No podeu dur a terme comparacions directes amb les etiquetes perquè són específiques d'un idioma. En comptes d'això, cada elecció té una enumeració que funciona amb el nombre subjacent o el valor booleà. Per exemple, no podeu utilitzar aquesta fórmula:
If( ThisItem.OrderStatus = "Active", ...
Però podeu utilitzar aquesta fórmula:
If( ThisItem.OrderStatus = OrderStatus.Active, ...
Per a les opcions globals (que comparteixen les taules), el nom de l'enumeració del conjunt d'opcions coincideix amb el nom de l'elecció global. Per a les eleccions locals (que centren l'àmbit en una taula), el nom podria contenir el nom de la taula. Aquest comportament evita els conflictes si diverses taules tenen eleccions que tenen el mateix nom. Per exemple, la taula Comptes pot tenir una elecció OrderStatus i el seu nom podria ser OrderStatus (Comptes). Aquest nom conté un o diversos espais i parèntesis, de manera que heu d'envoltar-lo amb cometes simples si hi feu referència en una fórmula.
A més, els valors de dues opcions també poden comportar-se com a valors booleans. Per exemple, un valor de dues opcions que s'anomeni TaxStatus podria tenir les etiquetes Taxable i No taxable, que es corresponen amb cert i fals respectivament. Per demostrar-ho, podeu utilitzar aquesta fórmula:
If( ThisItem.Taxable = TaxStatus.Taxable, ...
També podeu utilitzar aquesta fórmula equivalent:
If( ThisItem.Taxable, ...