Tipos de datos

Nota

Microsoft Power Fx es el nuevo nombre del lenguaje de fórmulas para aplicaciones de lienzo. Estos artículos son un trabajo en progreso a medida que extraemos el idioma de las aplicaciones de lienzo, lo integramos con otros productos Microsoft Power Platform y ponerlo a disposición como código abierto. Empiece con Información general de Microsoft Power Fx para una introducción al idioma.

La información fluye a través de una aplicación en valores pequeños y discretos, muy parecidos a las celdas de una hoja de cálculo. Por ejemplo, datos en un campo Cumpleaños y un campo Aniversario fluirían como un valor Fecha que incluye el año, el mes y el día. La aplicación sabe cómo formatear estos valores, restringir la entrada a lo que es apropiado para cada uno y compartir los valores con una base de datos. Los cumpleaños difieren de los aniversarios para las personas, pero el sistema los maneja exactamente de la misma manera. En este caso, Fecha es un ejemplo de un tipo de datos.

Este artículo proporciona detalles para los tipos de datos que admiten las aplicaciones de lienzo. Cuando una aplicación se conecta a un origen de datos externo, cada tipo de datos en esa fuente se asigna a un tipo de datos para aplicaciones de lienzo.

Tipo de datos Descripción Ejemplos
Booleano Un valor true o false. Se puede usar directamente en If, Filter y otras funciones sin comparación. true
Color Una especificación de color, que incluye un canal alfa. Color.Red
ColorValue( "#102030" )
RGBA( 255, 128, 0, 0.5 )
Divisa Un valor de divisa que se almacena en un número de punto flotante. Los valores de divisa son los mismos que los valores numéricos con opciones de formato de divisa. 123
4,56
Fecha Una fecha sin hora, en la zona horaria del usuario de la aplicación. Date( 2019, 5, 16 )
Fecha y hora Una fecha con hora, en la zona horaria del usuario de la aplicación. DateTimeValue("16 de mayo, 2019 1:23:09 PM")
Decimal Un número con alta precisión, operaciones de base 10 y alcance limitado. 123
Decimal( "1,2345" )
GUID Un identificador único global (GUID). GUID()
GUID( "123e4567-e89b-12d3-a456-426655440000" )
Hipervínculo Una cadena de texto que contiene un hipervínculo. "https://powerapps.microsoft.com"
Image Un identificador universal de recursos (URI) cadena de texto a una imagen en .jpeg, .png, .svg, .gif u otro formato de imagen web común. MyImage agregado como recurso de aplicación
"https://northwindtraders.com/logo.jpg"
"appres://blobmanager/7b12ffa2..."
Medios Una cadena de texto URI para una grabación de vídeo o audio. MyVideo agregado como recurso de aplicación
"https://northwindtraders.com/intro.mp4"
"appres://blobmanager/3ba411c..."
Nuḿero o Flotante Un número con precisión estándar, operaciones de base 2 y alcance amplio. 123
8,903e121
1,234e200
Opción Una elección de un conjunto de opciones, respaldado por un número. Este tipo de datos combina una etiqueta de texto localizable con un valor numérico. La etiqueta aparece en la aplicación y el valor numérico se almacena y se utiliza para realizar comparaciones. ThisItem.OrderStatus
Registro Un registro de valores de datos. Este tipo de datos compuesto contiene instancias de otros tipos de datos que se enumeran en este tema. Más información: Trabajar con tablas. { Company: "Northwind Traders",
Staff: 35,
NonProfit: false }
Registro de referencia Una referencia a un registro en una tabla. Tales referencias a menudo se usan con búsquedas polimórficas. Más información: Trabajar con referencias. First(Accounts).Owner
Table Una tabla de registros. Todos los registros deben tener los mismos nombres para sus campos con los mismos tipos de datos, y los campos omitidos se tratan como blank. Este tipo de datos compuesto contiene instancias de otros tipos de datos que se enumeran en este tema. Más información: Trabajar con tablas. Table( { FirstName: "Sidney",
LastName: "Higa" },
{ FirstName: "Nancy",
LastName: "Anderson" } )
Text Una cadena de texto Unicode. "Hola, Mundo"
Hora Una hora sin fecha, en la zona horaria del usuario de la aplicación. Time( 11, 23, 45 )
Dos opciones Una elección de un conjunto de dos opciones, respaldado por un valor booleano. Este tipo de datos combina una etiqueta de texto localizable con un valor booleano. La etiqueta aparece en la aplicación y el valor booleano se almacena y se utiliza para realizar comparaciones. ThisItem.Taxable
Objeto Untyped Un objeto de un tipo no declarado. El objeto subyacente podría ser cualquier tipo existente y se puede convertir en tipos compatibles usando funciones como Boolean(), Value(), Table() etc. Para más información, vea Objeto Untyped y Trabajo con JSON. ParseJSON("{ ""Field"" : 1234 }").Field

Muchos de estos tipos de datos son similares y tienen la misma representación subyacente, como un campo Hipervínculo siendo tratado como Texto. Los tipos de datos adicionales proporcionan mejores experiencias predeterminadas en formularios y otros controles.

Blank

Todos los tipos de datos pueden tener un valor de blank (en otras palabras, sin valor). El término "nulo" se usa a menudo en bases de datos para este concepto.

Use la función Blank con la función Set o Patch para establecer una variable o campo a blank. Por ejemplo, Set (x, Blank() ) elimina cualquier valor en la variable global x.

Prueba para un valor blank usando la función IsBlank. Reemplaza posibles valores blank con valores no blank utilizando la función Coalesce.

Como todos los tipos de datos son compatibles con blank, los tipos de datos Booleano y Dos opciones tienen efectivamente tres valores posibles.

Los cuatro tipos de datos se basan en una cadena de texto Unicode.

Texto incrustado

Las cadenas de texto incrustadas en una fórmula están entre comillas dobles. Use dos comillas dobles juntas para representar una comilla doble en la cadena de texto. Por ejemplo, usando la siguiente fórmula en la propiedad OnSelect de un control Button:

Notify( "Jane said ""Hello, World!""" )

da como resultado un banner cuando se presiona el botón, donde se omiten la primera y la última comillas dobles (ya que delimitan la cadena de texto) y las comillas dobles repetidas alrededor de ¡Hola Mundo! se reemplazan una comilla doble:

notificación emergente con el mensaje que Jane dijo

Las comillas simples se utilizan para nombres identificadores que contienen caracteres especiales y no tienen un significado especial dentro de una cadena de texto.

Interpolación de cadenas

Utilice la interpolación de cadenas para incrustar fórmulas dentro de una cadena de texto. Normalmente, tanto el trabajo como la visualización de la salida son más fáciles así que utilizando la función Concatenate o el operador &.

Prefije la cadena de texto con un signo de dólar $ y encierre la fórmula que se incrustará con llaves { }. Para incluir una llave en la cadena de texto, use llaves repetidas: {{ o }}. La interpolación de cadenas se puede usar en cualquier lugar donde se pueda usar una cadena de texto estándar.

Por ejemplo, considere esta fórmula con variables globales Manzanas en 3 y Plátanos en 4:

$"We have {Apples} apples, {Bananas} bananas, yielding {Apples+Bananas} fruit total."

Esta fórmula devuelve la cadena de texto Tenemos 3 manzanas, 4 plátanos, dando un total de 7 frutas. Las variables Manzanas y Plátanos se insertan en el texto reemplazando las llaves, junto con el resultado de la fórmula matemática Manzanas+Plátanos. Los espacios y otros caracteres alrededor de las llaves se conservan tal como están.

Las fórmulas incrustadas pueden incluir cualquier función u operador. Todo lo que se requiere es que el resultado de la fórmula pueda convertirse en una cadena de texto. Por ejemplo, esta fórmula insertará NickName si se suministra, o FirstName si no, en un saludo:

$"Welcome {Coalesce( NickName, FirstName )}, it's great to meet you!" )

Si NickName se establece en "Joe", entonces esta fórmula produce la cadena de texto ¡Bienvenido Joe, es un placer conocerte!. Pero si NickName es espacio en blanco y FirstName es "Joseph", entonces esta fórmula produce Querido Joseph, ¡encantado de conocerte!.

La interpolación de cadenas puede incluir cadenas de texto estándar en la fórmula incrustada. Por ejemplo, si no se suministra ni NickName ni FirstName fueron suministrados, todavía podríamos proporcionar "Amigo" como sustituto:

$"Welcome {Coalesce( NickName, FirstName, "Friend" )}!"

Las interpolaciones de cadenas incluso se pueden anidar. Considere este ejemplo donde los nombres First, Middle, y Last se combinan en un saludo. Incluso si uno o dos de estos valores son espacio en blanco, el número correcto de espacios estará entre las partes del nombre. Si no se proporciona ninguna de las partes, la interpolación de la cadena interna colapsará en una cadena vacía y será reemplazada por la función Coalesce por "Amigo".

$"Welcome {Coalesce( Trim( $"{First} {Middle} {Last}"}), "Friend" )}!"
First Middle Last Resultado
John Qunicy Doe Welcome John Quincy Doe!
John blank Doe Welcome John Doe!
blank blank Doe Welcome Doe!
blank blank blank Welcome Friend!

Nuevas líneas

Las cadenas de texto incrustadas pueden contener saltos de línea. Por ejemplo, considere establecer la propiedad Text de un control Label a lo siguiente:

"Line 1
Line 2
Line 3"

La fórmula anterior da como resultado tres líneas que se muestran en el control label:

Cadena de texto incrustada y control de etiqueta que muestra tres líneas con Línea 1, Línea 2 y Línea 3.

Las líneas nuevas también son compatibles con la interpolación de cadenas, como se muestra a continuación:

$"Line {1}
Line {1+1}
Line {1+1+1}"

La fórmula anterior da como resultado el mismo resultado:

Fórmula de interpolación de cadena y control label que muestra tres líneas con Línea 1, Línea 2 y Línea 3.

Recursos de imagen y medios

A través del menú Archivo, puede agregar archivos de imagen, vídeo y audio como recursos de la aplicación. El nombre del archivo importado se convierte en el nombre del recurso en la aplicación. En este gráfico, el logotipo de Northwind Traders, que se llama nwindlogo, se ha agregado a una aplicación:

Recurso de Northwind.

Para usar este recurso en una aplicación, especifíquelo en la propiedad Image de un control Image:

Imagen de Northwind.

URI para imágenes y otros medios

Puede profundizar un poco más en ese último ejemplo configurando la propiedad Text de un control Label a nwindlogo. La etiqueta muestra una cadena de texto:

Texto de Northwind.

Las aplicaciones de lienzo hacen referencia a cada imagen u otro archivo multimedia, ya sea en la nube o agregado como recurso de aplicación, mediante una cadena de texto URI.

Por ejemplo, la propiedad Image de un control de imagen acepta no solo recursos de la aplicación sino también enlaces a imágenes en la web, como "https://northwindtraders.com/logo.jpg". La propiedad también acepta imágenes en línea que usan el esquema de URI de datos, como en este ejemplo:

"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAFAQMAAACtnVQoAAAABlBMVEUAAAB0J3UMNU6VAAAAAXRSTlMAQObYZgAAABRJREFUCNdjUGJgCGVg6GgAkkA2AA8/AffqCEBsAAAAAElFTkSuQmCC"

Ese URI muestra una versión ampliada de dos diamantes morados:

Diamantes dobles.

Puede mostrar la imagen más reciente capturada en un control Camera si configura la propiedad Image de un control de imagen para la propiedad Photo del control de la cámara. La aplicación guarda la imagen en la memoria y la propiedad Photo del control de la cámara devuelve una referencia de URI a la imagen. Por ejemplo, puede tomar una foto y la propiedad Photo de la cámara podría devolver "appres://blobmanager/7b12ffa2ea4547e5b3812cb1c7b0a2a0/1".

Usa un URI para hacer referencia a una imagen u otro archivo multimedia almacenado en una base de datos. De esta forma, la aplicación no recupera los datos reales hasta que realmente se necesitan. Por ejemplo, un archivo adjunto en una tabla de Microsoft Dataverse podría devolver "appres://datasources/Contacts/table/..." Como en el ejemplo de la cámara, puede mostrar esta imagen configurando la propiedad Image de un control de imagen a esta referencia, que recupera los datos binarios.

Cuando guarda un tipo de datos multimedia, como una imagen, en una base de datos, la aplicación envía la imagen real o los datos multimedia, no la referencia de URI.

Límites de tamaño

Como cadenas de texto y URI, estos tipos de datos no tienen un límite preestablecido en su longitud.

Los datos binarios a los que hacen referencia estos tipos de datos tampoco tienen un límite predeterminado de tamaño. Por ejemplo, una imagen capturada a través del control de la cámara que ahora se hace referencia como "appres://..." puede ser tan grande y de alta resolución como la cámara del dispositivo puede alcanzar. La resolución, la velocidad de fotogramas y otros atributos de los archivos multimedia no están limitados por el tipo de datos, pero los controles específicos para reproducir y capturar medios pueden tener sus propias limitaciones.

Sin embargo, todos los tamaños de datos están sujetos a la cantidad de memoria disponible en la aplicación. Los navegadores que se ejecutan en una ordenador de escritorio generalmente admiten más de 100 megabytes de datos. Sin embargo, la cantidad de memoria disponible en un dispositivo, como un teléfono, podría ser mucho menor, típicamente en el rango de 30-70 megabytes. Para determinar si su aplicación se ejecutará dentro de estos límites, pruebe escenarios comunes en todos los dispositivos en los que debería ejecutarse.

Como práctica recomendada, mantenga los datos en la memoria solo el tiempo que sea necesario. Cargue imágenes a una base de datos tan pronto como pueda; descargue imágenes solo cuando el usuario de la aplicación las solicite.

Números

Nota

Power Apps solo admite Flotante hoy y es el tipo de todos los números. Pronto se agregará compatibilidad con decimales.

Power Fx admite dos tipos de números: Decimales y Flotantes (con sinónimos Número y Moneda).

Decimal es mejor para la mayoría de los cálculos comerciales. Puede representar con precisión números en base 10, lo que significa que 0.1 puede representarse exactamente y no será propenso a errores de redondeo durante los cálculos. Tiene un rango lo suficientemente amplio para cualquier necesidad empresarial, hasta 1028 con hasta 28 dígitos de precisión. Decimal es el tipo de datos numéricos predeterminado para la mayoría de los hosts de Power Fx y se utiliza si uno simplemente escribe 2*2.

Flotante es mejor para cálculos científicos. Puede representar números en un rango mucho mayor, hasta 10308. La precisión está limitada a 15 decimales y las matemáticas se basan en base 2, por lo que no pueden representar con precisión algunos valores decimales comunes. Flotante también tiene un mayor rendimiento y se favorece si ese es un factor y la precisión no es crítica.

Números decimales

El tipo de datos Decimal utiliza con mayor frecuencia el tipo de datos decimal .NET. Algunos hosts, como las columnas de fórmula de Dataverse que se ejecutan en SQL Server, utilizan el tipo de datos decimal de SQL Server.

Decimal hace matemáticas como aprendiste en la escuela, usando base 10 dígitos. Esto es muy importante para evitar errores de redondeo de diferencias muy pequeñas que pueden acumularse cuando se utilizan matemáticas de base 2 (como las utilizadas por Flotante).

El rango va de positivo 79,228,162,514,264,337,593,543,950,335 a negativo 79,228,162,514,264,337,593,543,950,335. El separador decimal se puede colocar en cualquier lugar dentro de estos números, lo que proporciona hasta 28 dígitos de precisión y aún se puede representar con precisión. Por ejemplo, 79,228,162,514,264.337593543950335 se puede representar exactamente, al igual que 7.9228162514264337593543950335.

Números de punto flotante

El tipo de datos Flotante, también conocido como Número o Divisa, utiliza el estándar de coma flotante de doble precisión IEEE 754. Este estándar proporciona una gran variedad de números en los que trabajar, desde –1,79769 x 10308 a 1,79769 x 10308. El valor más pequeño que se puede representar es 5 x 10–324.

Flotante puede representar exactamente números enteros (o enteros) entre –9.007.199.254.740.991 (–(253 – 1)) y 9.007.199.254.740.991 (253 – 1), inclusive. Este rango es mayor que los tipos de datos enteros de 32 bits (o 4 bytes) que las bases de datos usan comúnmente. Sin embargo, las aplicaciones de lienzo no pueden representar tipos de datos enteros de 64 bits (u 8 bytes). Es posible que desee almacenar el número en un campo de texto o usar una columna calculada para hacer una copia del número en un campo de texto, de modo que se asigne a un tipo de datos Texto de la aplicación de lienzo. De esta manera, puede mantener, mostrar e introducir estos valores, así como compararlos para determinar si son iguales; sin embargo, no puede realizar cálculos numéricos sobre ellos en este formulario.

La aritmética de punto flotante es aproximada, por lo que a veces puede dar resultados inesperados con muchos ejemplos documentados. Puede esperar que la fórmula 55/100 * 100 devuelva exactamente 55 y (55/100 * 100) - 55 devuelva exactamente cero. Sin embargo, la última fórmula devuelve 7,1054 x 10-15, que es muy pequeño pero no cero. Esa pequeña diferencia normalmente no causa un problema y la aplicación lo redondea cuando muestra el resultado. Sin embargo, pequeñas diferencias pueden agravarse en cálculos posteriores y parecen dar una respuesta incorrecta.

Los sistemas de bases de datos a menudo almacenan divisas y realizan cálculos mediante el uso de matemática decimal, que ofrece un rango menor pero un mayor control sobre la precisión. Por defecto, las aplicaciones de lienzo asignan divisas dentro y fuera de valores de punto flotante; por lo tanto, el resultado puede diferir de los cálculos que se realizan en un tipo de datos decimales nativo. Si este tipo de discrepancia causará problemas, es posible que desee trabajar con estos valores como Texto, tal como lo haría con los enteros grandes descritos anteriormente en esta sección.

Valores predeterminados y conversiones

Nota

Power Apps solo admite Flotante hoy y es el tipo de todos los números. Pronto se agregará compatibilidad con decimales.

La mayoría de los hosts de Power Fx usan Decimal de forma predeterminada. Esto impacta:

  • Números literales en fórmulas. El número 1.234 será interpretado como un valor Decimal. Por ejemplo, la fórmula 1.234 * 2 interpretará 1.234 y 2 como Decimal y devolverá un resultado Decimal.
  • Función Value. Value( "1.234" ) devolverá un valor Decimal. Por ejemplo, la fórmula Value( "1.234" ) * 2 la función Valor interpretará el contenido de la cadena de texto "1.234" como Decimal.

Para trabajar con valores Flotantes, se utiliza la función Float. Ampliando el ejemplo anterior, Float( 1.234 ) convertirá Decimal1.234 a Flotante. Flotante también se puede utilizar como reemplazo de Valor para convertir una cadena que contiene un número de punto flotante como Float( "1.234" ) a un valor flotante , que es necesario si el número no se puede representar como un decimal.

En resumen:

Uso Decimal Flotante
Números literales en fórmulas 1.234 Float( 1.234 )
Float( "1.234" )
Conversión de cadena de texto Value( "1.234" )
Decimal( "1.234" )
Float( "1.234" )
Conversión entre tipos numéricos Decimal( float ) Float( decimal )
Conversión a cadena de texto Text( decimal ) Text( float )

Mezclar tipos numéricos

Los valores flotantes y decimales se pueden mezclar libremente. Cuando se mezclan, los valores decimales se convierten en valores flotantes debido al rango más amplio. Dado que esto puede provocar una pérdida de precisión, es importante no mezclar los dos innecesariamente. Dado que Decimal es el tipo de datos literal predeterminado y la mayoría de las funciones numéricas conservarán el tipo, es relativamente fácil evitar pasar a Flotante sin desearlo.

Por ejemplo, considere el siguiente cálculo utilizando pac power-fx repl después de instalar Power Platform CLI. Dado que ambos números son Decimal, el cálculo se realiza en Decimal y el resultado conserva total precisión:

>> 1.0000000000000000000000000001 * 2
2.0000000000000000000000000002

Si en cambio, el segundo operando se cambiara a Flotante, todo el cálculo se haría en Flotante y se perdería la pequeña parte fraccionaria:

>> 1.0000000000000000000000000001 * Float(2)
2

Fecha, hora y DateTime

Zonas horarias

Los valores de fecha/hora entran en estas categorías:

  • Usuario local: estos valores se almacenan en UTC (hora universal coordinada), pero la zona horaria del usuario de la aplicación afecta cómo la aplicación muestra estos valores y cómo los especifica el usuario de la aplicación. Como ejemplo, el mismo momento parece diferente para un usuario en Canadá que para un usuario en Japón.
  • Zona horaria independiente: la aplicación muestra estos valores de la misma manera y el usuario de la aplicación los especifica de la misma manera, independientemente de la zona horaria. El mismo momento aparece igual para un usuario en Canadá que para un usuario en Japón. Los autores de aplicaciones que no esperan que sus aplicaciones se ejecuten en diferentes zonas horarias usan estos valores porque son más simples en general.

Esta tabla muestra algunos ejemplos:

Tipo fecha/hora Valor almacenado en la base de datos Valor mostrado e introducido 7 horas al oeste de UTC Valor mostrado e introducido 4 horas al este de UTC
Local del usuario Domingo,mayo19,2019
4:00 a.m.
Sábado,mayo18,2019
9:00 p.m.
Domingo,mayo19,2019
8:00 a.m.
Independiente de la zona horaria Domingo,mayo19,2019
4:00 a.m.
Domingo,mayo19,2019
4:00 a.m.
Domingo,mayo19,2019
4:00 a.m.

Para las fechas/horas Usuario local, las aplicaciones de lienzo utilizan la zona horaria del navegador o dispositivo, pero las aplicaciones basadas en modelos utilizan la configuración del usuario en Dataverse. Estas configuraciones generalmente coinciden, pero los resultados serán diferentes si estas configuraciones difieren.

Use las funciones DateAdd y TimeZoneInformation para convertir la hora local a UTC y viceversa. Vea los ejemplos al final de la documentación para estas funciones.

Equivalentes numéricos

Las aplicaciones de lienzo mantienen y calculan todos los valores de fecha/hora, ya sea Local del usuario o Zona horaria independiente en UTC. La aplicación traduce los valores según la zona horaria del usuario de la aplicación cuando los muestra y cuando el usuario de la aplicación los especifica.

Cuando una aplicación de lienzo lee un valor Zona horaria independiente de un origen de datos o escribe dicho valor en un origen de datos, la aplicación ajusta automáticamente el valor para compensar la zona horaria del usuario de la aplicación. La aplicación luego trata el valor como un valor UTC, consistente con todos los demás valores de fecha/hora en la aplicación. Debido a esta compensación, el valor original Zona horaria independiente aparece cuando la aplicación ajusta el valor UTC para la zona horaria del usuario de la aplicación.

Puede observar este comportamiento más de cerca utilizando la función Value para acceder al valor numérico subyacente para un valor de fecha/hora. Esta función devuelve el valor de fecha/hora como el número de milisegundos desde el 1 de enero, 1970 00:00:00.000 UTC.

Debido a que cada valor de fecha/hora se mantiene en UTC, la fórmula Value( Date( 1970, 1, 1 ) ) no devolverá cero en la mayoría de las partes del mundo porque la función Date devuelve una fecha en UTC. Por ejemplo, la fórmula devolvería 28.800.000 en una zona horaria que se compensa con respecto a UTC en ocho horas. Ese número refleja el número de milisegundos en ocho horas.

Volviendo a nuestro ejemplo superior:

Tipo fecha/hora Valor almacenado en la base de datos Valor mostrado e introducido 7 horas al oeste de UTC La función Value devuelve
Local del usuario Domingo,mayo19,2019
4:00 a.m.
Sábado,mayo18,2019
9:00 p.m.
1,558,238,400,000
(Domingo,mayo19,2019
4:00 a.m. UTC)
Independiente de la zona horaria Domingo,mayo19,2019
4:00 a.m.
Domingo,mayo19,2019
4:00 a.m.
1,558,263,600,000
(Domingo,mayo19,2019
11:00 a.m. UTC)

Convertir tiempos Unix

Los tiempos Unix reflejan el número de segundos desde el 1 de enero, 1970 00:00:00 UTC. Debido a que las aplicaciones de lienzo usan milisegundos en lugar de segundos, puede convertir entre los dos multiplicando o dividiendo por 1000.

Por ejemplo, la hora de Unix muestra el 9 de septiembre de 2001 a las 01:46:40 UTC como 1.000.000.000. Para mostrar ese valor de fecha/hora en una aplicación de lienzo, multiplique ese número por 1000 para convertirlo a milisegundos y luego úselo en una función Text. La formula Text(1000000000 * 1000, DateTimeFormat.UTC) devuelve la cadena 2001-09-09T01:46:40.000Z.

Sin embargo, esa función devuelve sábado 8 de septiembre, 2001 18:46:40 si usa el formato DateTimeFormat.LongDateTime24 en una zona horaria que esté compensada en -7 horas con respecto a UTC (7 horas al oeste de UTC). Este resultado muestra el valor DateTime correctamente basado en la zona horaria local.

Para convertir a un tiempo Unix, divida el resultado de Valor por 1000:
RoundDown( Value( UnixTime ) / 1000, 0 )

Si necesita el tiempo de Unix en un valor Fecha para cálculos posteriores o visualización dentro de Power Apps, use esta fórmula:
DateAdd( Date( 1970,1,1 ), UnixTime, Seconds )

SQL Server

SQL Server tiene Datetime, Datetime2 y otros tipos de datos de fecha / hora que no incluyen un desplazamiento de zona horaria y no indican en qué zona horaria se encuentran. Las aplicaciones de lienzo asumen que estos valores se almacenan en UTC y los tratan como Local del usuario. Si los valores están destinados a ser independientes de la zona horaria, corrija las traducciones UTC utilizando la función TimeZoneOffset.

Las aplicaciones de lienzo utilizan la información de zona horaria incluida en campos Datetimeoffset al convertir un valor a la representación UTC interna de la aplicación. Las aplicaciones siempre usan UTC como zona horaria (desplazamiento de zona horaria cero) cuando escriben datos.

Las aplicaciones de lienzo leen y escriben valores de tipo de datos Hora en SQL Server como cadenas de texto en el Formato de duración ISO 8601. Por ejemplo, debe analizar este formato de cadena y usar la función Time para convertir la cadena de texto "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)

Mezcla de información de fecha y hora

Fecha, Hora y DateTime tienen nombres diferentes, pero todos contienen la misma información sobre fechas y horas.

Un valor Fecha puede incluir información de hora, que generalmente es medianoche. Un valor Hora puede contener información de fecha, que generalmente es el 1 de enero de 1970. Dataverse también almacena información de hora en un campo Solo fecha pero muestra solo la información de la fecha de forma predeterminada. Del mismo modo, las aplicaciones de lienzo a veces distinguen entre estos tipos de datos para determinar los formatos y controles predeterminados.

No se recomienda agregar y restar valores de fecha y hora directamente porque la zona horaria y otras conversiones pueden causar resultados confusos. O usa la función Value para convertir los valores de fecha/hora a milisegundos primero y tener en cuenta la zona horaria del usuario de la aplicación, o usa las funciones DateAdd y DateDiff para sumar o restar uno de estos valores.

Opciones y Sí/No

Las opciones y los tipos de datos de dos opciones proporcionan dos o más opciones para que las seleccione el usuario de la aplicación. Por ejemplo, una opción Estado de la orden puede ofrecer las opciones Nuevo, Enviado, Facturado y Cerrado. El tipo de datos de dos opciones ofrece solo dos opciones.

Ambos tipos de datos muestran sus etiquetas en un contexto de cadena de texto. Por ejemplo, un control de etiqueta muestra una de las opciones de estado del pedido si la propiedad del control Text se establece en una fórmula que hace referencia a esa elección. Las etiquetas de opciones pueden estar localizadas para usuarios de aplicaciones en diferentes ubicaciones.

Cuando un usuario de la aplicación selecciona una opción y guarda ese cambio, la aplicación transmite los datos a la base de datos, que almacena esos datos en una representación que es independiente del idioma. Una opción en una elección se transmite y almacena como un número, y una opción en un tipo de datos de dos opciones se transmite y almacena como un valor booleano.

Las etiquetas son solo para fines de visualización. No puede realizar comparaciones directas con las etiquetas porque son específicas de un idioma. En cambio, cada opción tiene una enumeración que funciona con el número subyacente o el valor booleano. Por ejemplo, no puede usar esta fórmula:

If( ThisItem.OrderStatus = "Active", ...

Pero puede usar esta fórmula:

If( ThisItem.OrderStatus = OrderStatus.Active, ...

Para las opciones globales (qué tablas comparten), el nombre de la enumeración del conjunto de opciones coincide con el nombre de la elección global. Para las opciones locales (que tienen como ámbito una tabla), el nombre puede contener el nombre de la tabla. Este comportamiento evita conflictos si varias tablas tienen opciones que tienen el mismo nombre. Por ejemplo, la tabla Cuentas puede tener una opción OrderStatus y su nombre podría ser OrderStatus (cuentas). Ese nombre contiene uno o más espacios y paréntesis, por lo que debe rodearlo con comillas simples si hace referencia a él en una fórmula.

Además, los valores de dos opciones también pueden comportarse como valores booleanos. Por ejemplo, un valor de dos opciones llamado TaxStatus podría tener las etiquetas Taxable y Non-Taxable, que corresponden a true y false respectivamente. Para demostrarlo, puede usar esta fórmula:

If( ThisItem.Taxable = TaxStatus.Taxable, ...

También puede usar esta fórmula equivalente:

If( ThisItem.Taxable, ...