Types de données

Note

Microsoft Power Fx est le nouveau nom du langage de formule pour les applications canevas. Ces articles associés sont un travail en cours car nous extrayons le langage des applications de canevas, l’intégrons à d’autres produits Microsoft Power Platform, et le rendons disponible en open source. Commencez par l’Aperçu de Microsoft Power Fx pour une introduction à la langue.

Les informations circulent dans une application en petites valeurs discrètes, tout comme les cellules d’une feuille de calcul. Par exemple, les données d’un champ Anniversaire et d’un champ Fête circulent en tant que valeur Date qui comprend l’année, le mois et le jour. L’application sait mettre en forme ces valeurs, restreindre l’entrée à ce qui est approprié pour chacune et partager les valeurs avec une base de données. Les anniversaires diffèrent des fêtes pour les gens, mais le système les gère exactement de la même manière. Dans ce cas, Date est un exemple de Type de données.

Cet article fournit des détails sur les types de données pris en charge par les applications canevas. Lorsqu’une application se connecte à un source de données externe, chaque type de données de cette source est mappé sur un type de données pour les applications canevas.

Type de données Description Exemples
Booléenne Valeur True ou False. Peut être utilisée directement dans If, Filter et d’autres fonctions sans comparaison. true
Couleur Spécification de couleur, y compris un canal alpha. Color.Red
ColorValue( "#102030" )
RGBA( 255, 128, 0, 0.5 )
Devise Valeur de la devise stockée en nombre à virgule flottante. Les valeurs des devises sont identiques aux valeurs numériques avec des options de mise en forme de la devise. 123
4.56
Date Date sans heure, dans le fuseau horaire de l’utilisateur de l’application. Date( 2019, 5, 16 )
Date/Heure Date avec heure, dans le fuseau horaire de l’utilisateur de l’application. DateTimeValue( "May 16, 2019 1:23:09 PM" )
Décimal Un nombre avec une haute précision, des opérations en base 10 et une portée limitée. 123
Decimal( "1.2345" )
GUID Identificateur global unique. GUID()
GUID( "123e4567-e89b-12d3-a456-426655440000" )
Lien hypertexte Une chaîne de texte contenant un lien hypertexte. "https://powerapps.microsoft.com"
Image Chaîne de texte Uniform Resource Identifier (URI) vers une image au format .jpeg, .png, .svg, .gif ou tout autre format d’image web courant. MonImage ajouté en tant que ressource d’application
"https://northwindtraders.com/logo.jpg"
"appres://blobmanager/7b12ffa2..."
Média Chaîne de texte URI vers un enregistrement vidéo ou audio. MaVidéo ajouté en tant que ressource d’application
"https://northwindtraders.com/intro.mp4"
"appres://blobmanager/3ba411c..."
Nombre ou Flottant Un nombre avec une précision standard, des opérations en base 2 et une large portée. 123
8,903e121
1.234e200
Option Un choix parmi un groupe d’options, soutenu par un nombre. Ce type de données combine une étiquette de texte localisable avec une valeur numérique. L’étiquette apparaît dans l’application et la valeur numérique est stockée et utilisée pour les comparaisons. ThisItem.OrderStatus
Enregistrement Enregistrement des valeurs des données. Ce type de données composé contient des instances d’autres types de données répertoriés dans ce sujet. Pour plus d’informations, voir Utilisation des tables. { Company: "Northwind Traders",
Staff: 35,
NonProfit : false }
Référence d’enregistrement Une référence à un enregistrement dans une table. Ces références sont souvent utilisées avec des recherches polymorphes. Pour plus d’informations, voir Utilisation des références. First(Accounts).Owner
Table Table d’enregistrements. Tous les enregistrements doivent avoir les mêmes noms pour leurs champs avec les mêmes types de données et les champs omis sont traités comme vides. Ce type de données composé contient des instances d’autres types de données répertoriés dans ce sujet. Pour plus d’informations, voir Utilisation des tables. Table( { FirstName: "Sidney",
LastName: "Higa" },
{ FirstName: "Nancy",
LastName: "Anderson" } )
Texte Chaîne de texte Unicode. "Hello, World"
Durée Heure sans date, dans le fuseau horaire de l’utilisateur de l’application. Time( 11, 23, 45 )
Deux options Un choix parmi un groupe de deux options, soutenu par une valeur booléenne. Ce type de données combine une étiquette de texte localisable avec une valeur booléenne. L’étiquette apparaît dans l’application et la valeur booléenne est stockée et utilisée pour les comparaisons. ThisItem.Taxable
Objet sans type Objet de type non déclaré. L’objet sous-jacent peut être n’importe quel type existant et peut être converti en types compatibles à l’aide de fonctions telles que Boolean(), Value(), Table() etc. Pour plus d’informations, voir Objet sans type et Utiliser JSON. ParseJSON("{ ""Field"" : 1234 }").Field

Beaucoup de ces types de données sont similaires et ont la même représentation sous-jacente, comme un champ Lien hypertexte traité comme Texte. Les types de données supplémentaires offrent de meilleures expériences par défaut dans les formulaires et autres contrôles.

Blank

Tous les types de données peuvent avoir une valeur de vide (en d’autres termes, aucune valeur). Le terme « null » est souvent utilisé dans les bases de données pour ce concept.

Utilisez la fonction Blank avec la fonction Set ou Patch pour définir une variable ou un champ sur vide. Par exemple, Ensemble(x, Vide() ) supprime toute valeur de la variable globale x.

Test d’une valeur vide en utilisant la fonction IsBlank. Remplacer de possibles valeurs vides par des valeurs non vides en utilisant la fonction Coalesce.

Parce que tous les types de données prennent en charge vide, les types de données Booléenne et Deux options ont effectivement trois valeurs possibles.

Ces quatre types de données sont basés sur une chaîne de texte Unicode.

Texte intégré

Les chaînes de texte intégrées dans une formule sont placées entre guillemets doubles. Utilisez deux guillemets doubles pour représenter un guillemet simple dans la chaîne de texte. Par exemple, en utilisant la formule suivante dans la propriété OnSelect d’un contrôle Button :

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

entraîne une bannière lorsque le bouton est enfoncé, où les premier et dernier guillemets doubles sont omis (car ils délimitent la chaîne de texte) et les guillemets répétés autour Hello, World! sont remplacés par un guillemet simple :

notification contextuelle avec le message de Jane qui dit « Hello, World. »

Les guillemets simples ne sont pas utilisés pour les noms d’identificateurs qui contiennent des caractères spéciaux et n’ont aucune signification spéciale dans une chaîne de texte.

Interpolation de chaîne

Utilisez l’interpolation de chaîne pour incorporer des formules dans une chaîne de texte. Il est souvent plus facile d’utiliser et de visualiser le résultat que d’utiliser la fonction Concatenate ou l’opérateur &.

Ajoutez un préfixe à la chaîne de texte avec un signe dollar $ et insérez la formule entre accolades courbes {}. Pour inclure une accolade dans la chaîne de texte, utilisez des accolades courbes : {{ ou }}. L’interpolation de chaîne peut être utilisée partout où une chaîne de texte standard peut être utilisée.

Par exemple, considérons cette formule avec des variables globales Pommes définie sur 3 et Bananes définie sur 4 :

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

Cette formule renvoie la chaîne de texte Nous avons 3 pommes, 4 bananes, soit un total de 7 fruits. Les variables Pommes et Bananes sont insérées dans le texte à la place des accolades, accompagnées du résultat de la formule mathématique Pommes+Bananes. Les espaces et autres caractères autour des accolades sont conservés tels quels.

Les formules incorporées peuvent inclure n’importe quelles fonctions ou opérateurs. Tout ce qu’il faut, c’est que le résultat de la formule puisse être converti en une chaîne de texte. Par exemple, cette formule insérera NickName s’il est fourni, ou FirstName sinon, dans une salutation :

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

Si NickName est définie sur « Joe », cette formule produit la chaîne de texte Bienvenue Joe, c’est un plaisir de vous rencontrer !. Mais si NickName est vide et FirstName est « Joseph », alors cette formule génère Cher Joseph, ravi de vous rencontrer ! à la place.

L’interpolation de chaîne peut inclure des chaînes de texte standard dans la formule intégrée. Par exemple, si ni NickName ni FirstName n’ont été fournis, nous pourrions toujours fournir "Friend" en remplacement :

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

Les interpolations de chaînes peuvent même être imbriquées. Considérez cet exemple où les noms First, Middle et Last sont combinés dans une salutation. Même si une ou deux de ces valeurs sont définies comme vide, le nombre correct d’espaces sera entre les parties du nom. Si aucune des parties n’est fournie, l’interpolation de la chaîne interne se réduira à une chaîne vide et sera remplacée par la fonction Coalesce par « Friend ».

$"Welcome {Coalesce( Trim( $"{First} {Middle} {Last}"}), "Friend" )}!"
First Middle Last Résultat
John Qunicy Doe Welcome John Quincy Doe!
John vide Doe Welcome John Doe!
vide vide Doe Welcome Doe!
vide vide vide Welcome Friend!

Retours à la ligne

Les chaînes de texte incorporées peuvent contenir des retours à la ligne. Par exemple, envisagez de définir la propriété Text d’un contrôle Label aux éléments suivants :

"Line 1
Line 2
Line 3"

La formule ci-dessus donne trois lignes affichées dans le contrôle Label :

Chaîne de texte intégrée et contrôle Label affichant trois lignes avec Ligne 1, Ligne 2 et Ligne 3.

Les retours à la ligne sont également pris en charge avec l’interpolation de chaîne, comme indiqué ci-dessous :

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

La formule ci-dessus donne le même résultat :

Formule d’interpolation de chaîne et contrôle Label affichant trois lignes avec Ligne 1, Ligne 2 et Ligne 3.

Images et ressources médiatiques

À travers le menu Fichier, vous pouvez ajouter des fichiers image, vidéo et audio en tant que ressources d’application. Le nom du fichier importé devient le nom de la ressource dans l’application. Dans ce graphique, le logo Northwind Traders, nommé nwindlogo, a été ajouté à une application :

Ressource Northwind.

Pour utiliser cette ressource dans une application, spécifiez-la dans la propriété Image d’un contrôle Image :

Image Northwind.

URI pour les images et autres médias

Vous pouvez approfondir un peu ce dernier exemple en définissant la propriété Text d’un contrôle Label sur nwindlogo. L’étiquette affiche une chaîne de texte :

Texte Northwind.

Les applications canevas référencent chaque image ou autre fichier multimédia, que ce soit dans le cloud ou ajouté en tant que ressource d’application, par une chaîne de texte URI.

Par exemple, la propriété Image d’un contrôle Image accepte non seulement les ressources d’application, mais également les liens vers des images sur le web, tels que https://northwindtraders.com/logo.jpg". La propriété accepte également les images en ligne qui utilisent le schéma d’URI de données, comme dans cet exemple :

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

Cet URI affiche une version agrandie de deux diamants violets :

Deux diamants.

Vous pouvez afficher l’image la plus récente capturée dans un contrôle Camera si vous définissez la propriété Image d’un contrôle Image sur la propriété Photo du contrôle Camera. L’application conserve l’image en mémoire et la propriété Photo du contrôle Camera renvoie une référence d’URI à l’image. Par exemple, vous pouvez prendre une photo et la propriété Photo de la caméra pourrait renvoyer "appres://blobmanager/7b12ffa2ea4547e5b3812cb1c7b0a2a0/1".

Vous utilisez un URI pour référencer une image ou un autre fichier multimédia stocké dans une base de données. De cette façon, l’application ne récupère pas les données réelles jusqu’à ce qu’elles soient réellement nécessaires. Par exemple, une pièce jointe dans une table Microsoft Dataverse pourrait revenir "appres://datasources/Contacts/table/..." comme dans l’exemple de la caméra, vous pouvez afficher cette image en réglant la propriété Image d’un contrôle Image sur cette référence, qui récupère les données binaires.

Lorsque vous enregistrez un type de données multimédia, tel qu’une image, dans une base de données, l’application envoie l’image ou les données multimédias réelles, et non la référence URI.

Limites de tailles

En tant que chaînes de texte et URI, ces types de données n’ont pas de limite prédéfinie sur leur longueur.

Les données binaires référencées par ces types de données n’ont pas non plus de limite de taille prédéfinie. Par exemple, une image capturée via le contrôle Camera qui est maintenant référencée comme "appres ://..." peut être aussi grande et haute résolution que la caméra de l’appareil peut le rassembler. La résolution, la fréquence d’images et d’autres attributs des fichiers multimédias ne sont pas limités par le type de données, mais des contrôles spécifiques pour la lecture et la capture de médias peuvent avoir leurs propres limites.

Cependant, toutes les tailles de données sont soumises à la quantité de mémoire disponible dans l’application. Les navigateurs exécutés sur un ordinateur de bureau prennent généralement en charge plus de 100 mégaoctets de données. Cependant, la quantité de mémoire disponible sur un appareil tel qu’un téléphone peut être beaucoup plus faible, généralement entre 30 et 70 mégaoctets. Pour déterminer si votre application s’exécutera dans ces limites, testez des scénarios courants sur tous les appareils sur lesquels elle doit s’exécuter.

Il est recommandé de conserver les données en mémoire aussi longtemps que nécessaire. Chargez des images dans une base de données dès que vous le pouvez ; télécharger des images uniquement lorsque l’utilisateur de l’application les demande.

Numéros

Note

Power Apps ne prend en charge actuellement que Flottant et c’est le type de tous les nombres. La prise en charge de Décimal sera bientôt ajoutée.

Power Fx prend en charge deux types de nombres : Décimal et Flottant (avec les synonymes Nombre et Devise).

Décimal est le meilleur pour la plupart des calculs d’entreprise. Il peut représenter avec précision les nombres en base 10, ce qui signifie que 0.1 peut être représenté exactement et ne sera pas sujet à des erreurs d’arrondi lors des calculs. Il dispose d’une plage suffisamment large pour répondre à tous les besoins métier, jusqu’à 1028 avec jusqu’à 28 chiffres de précision. Décimal est le type de données numérique par défaut pour la plupart des hôtes Power Fx, utilisé si l’on écrit simplement 2*2.

Flottant est idéal pour les calculs scientifiques. Il peut représenter des nombres dans une plage beaucoup plus grande, jusqu’à 10308. La précision est limitée à 15 décimales et les mathématiques sont basées sur la base 2 ; par conséquent, il ne peut pas représenter avec précision certaines valeurs décimales courantes. Flottant a également des performances plus élevées et est privilégié si ce facteur est important et que la précision n’est pas critique.

Nombres décimaux

Le type de données Décimal utilise le plus souvent le type de données décimal .NET. Certains hôtes, tels que les colonnes de formule Dataverse exécutées dans SQL Serer, utilisent le type de données décimal de SQL Server.

Décimal effectue les calculs comme vous l’avez appris à l’école, en utilisant des chiffres en base 10. Ceci est très important pour éviter les erreurs d’arrondi dues à de très petites différences qui peuvent s’accumuler lors de l’utilisation des mathématiques en base 2 (comme utilisées par Flottant).

La plage va du positif 79,228,162,514,264,337,593,543,950,335 au négatif 79,228,162,514,264,337,593,543,950,335. Le séparateur décimal peut être placé n’importe où dans ces nombres, offrant jusqu’à 28 chiffres de précision, tout en étant représenté avec précision. Par exemple, 79,228,162,514,264.337593543950335 peut être représenté exactement, tout comme 7.9228162514264337593543950335.

Nombres à virgule flottante

Le type de données Flottant , également appelé Nombre ou Devise, utilise la norme à virgule flottante à double précision IEEE 754. Cette norme fournit une très large gamme de nombres dans lesquels travailler, de –1,79769 x 10308 à 1,79769 x 10308. La plus petite valeur pouvant être représentée est 5 x 10–324.

Flottant peut représenter exactement des nombres entiers (ou entiers) entre –9 007 199 254 740 991 (–(253 – 1)) et 9 007 199 254 740 991 (253 – 1), inclus. Cette plage est supérieure aux types de données entiers 32 bits (ou 4 octets) que les bases de données utilisent couramment. Cependant, les applications canevas ne peuvent pas représenter des types de données entiers 64 bits (ou 8 octets). Vous souhaiterez peut-être stocker le nombre dans un champ de texte ou utiliser une colonne calculée pour faire une copie du nombre dans un champ de texte, afin qu’il soit mappé dans un Type de données Texte dans l’application canevas. De cette manière, vous pouvez conserver, afficher et saisir ces valeurs, ainsi que les comparer pour déterminer si elles sont égales ; cependant, vous ne pouvez pas effectuer de calculs numériques sur eux sous cette forme.

L’arithmétique à virgule flottante est approximative, elle peut donc parfois donner des résultats inattendus avec de nombreux exemples documentés. Vous pourriez vous attendre à la formule 55 / 100 * 100 pour retourner exactement 55 et (55 / 100 * 100) - 55 pour retourner exactement zéro. Cependant, cette dernière formule renvoie 7,1054 x 10–15, ce qui est très petit mais pas nul. Cette petite différence ne pose normalement pas de problème, et l’application l’arrondit lors de l’affichage du résultat. Cependant, de petites différences peuvent aggraver les calculs ultérieurs et semblent donner une mauvaise réponse.

Les systèmes de base de données stockent souvent des devises et effectuent des calculs en utilisant des mathématiques décimales, qui offrent une plage plus petite mais un meilleur contrôle de la précision. Par défaut, les applications canevas mappent les devises dans et hors des valeurs à virgule flottante ; par conséquent, le résultat peut différer des calculs effectués dans un type de données décimal natif. Si ce type de divergence cause des problèmes, vous pouvez utiliser ces valeurs comme Texte, tout comme vous pourriez le faire avec les grands entiers décrits plus haut dans cette section.

Valeurs par défaut et conversions

Note

Power Apps ne prend en charge actuellement que Flottant et c’est le type de tous les nombres. La prise en charge de Décimal sera bientôt ajoutée.

La plupart des hôtes Power Fx utilisent Décimal par défaut. Cela impacte :

  • Nombres littéraux dans les formules. Le nombre 1.234 sera interprété comme une valeur Décimale. Par exemple, la formule 1.234 * 2 interprétera les 1.234 et 2 comme une valeur Décimale et renverra un résultat Décimal.
  • Fonction de valeur. Value( "1.234" ) renverra une valeur Décimale. Par exemple, dans la formule Value( "1.234" ) * 2, la fonction Value interprétera le contenu de la chaîne de texte "1.234" comme une valeur Décimale.

Pour travailler avec les valeurs Flottant, la fonction Float est utilisée. En étendant l’exemple ci-dessus, Float( 1.234 ) convertira Décimal1.234 en Flottant. Flottant peut également être utilisé en remplacement de Valeur pour convertir une chaîne contenant un nombre à virgule flottante tel que Float( "1.234" ) en une valeur Flottante, qui est requise si le nombre ne peut pas être représenté sous la forme d’une Décimale.

En résumé :

Utilisation Décimal Flottant
Nombres littéraux dans les formules 1.234 Float( 1.234 )
Float( "1.234" )
Conversion à partir de la chaîne de texte Value( "1.234" )
Decimal( "1.234" )
Float( "1.234" )
Conversion entre types numériques Decimal( float ) Float( decimal )
Conversion en chaîne de texte Text( decimal ) Text( float )

Association de types numériques

Les valeurs Flottant et Décimal peuvent être associées librement. Lorsqu’elles sont associées, les valeurs Décimal sont converties en valeurs Flottant en raison de la plage plus large. Puisque cela peut entraîner une perte de précision, il est important de ne pas associer les deux inutilement. Comme Décimal est le type de données littéral par défaut et la plupart des fonctions numériques conserveront le type, il est relativement facile d’éviter de passer à Flottant sans le vouloir.

Par exemple, considérons le calcul suivant en utilisant pac power-fx repl après avoir installé Power Platform CLI. Puisque les deux nombres sont Decimal, le calcul est effectué en Décimal et le résultat conserve toute la précision :

>> 1.0000000000000000000000000001 * 2
2.0000000000000000000000000002

Si, à la place, le deuxième opérande était remplacé par Flottant, alors tout le calcul serait effectué en Flottant et la minuscule partie fractionnaire serait perdue :

>> 1.0000000000000000000000000001 * Float(2)
2

Date, Heure et DateHeure

Fuseaux horaires

Les valeurs de date/heure entrent dans ces catégories :

  • Heure locale de l’utilisateur : Ces valeurs sont stockées en UTC (temps universel coordonné), mais le fuseau horaire de l’utilisateur de l’application affecte la manière dont l’application affiche ces valeurs et la manière dont l’utilisateur de l’application les spécifie. À titre d’exemple, le même moment apparaît différemment pour un utilisateur au Canada que pour un utilisateur au Japon.
  • Indépendant du fuseau horaire : L’application affiche ces valeurs de la même manière et l’utilisateur de l’application les spécifie de la même manière, quel que soit le fuseau horaire. Le même moment apparaît de la même manière pour un utilisateur au Canada que pour un utilisateur au Japon. Les auteurs d’applications qui ne s’attendent pas à ce que leurs applications s’exécutent dans différents fuseaux horaires utilisent ces valeurs car elles sont globalement plus simples.

Ce tableau montre quelques exemples :

Type Date/heure Valeur stockée dans la base de données Valeur affichée et entrée 7 heures à l’ouest de UTC Valeur affichée et entrée 4 heures à l’est de UTC
Heure locale de l’utilisateur Dimanche,mai19,2019
4:00
Samedi,mai18,2019
21:00
Dimanche,mai19,2019
8:00
Sans fuseau horaire Dimanche,mai19,2019
4:00
Dimanche,mai19,2019
4:00
Dimanche,mai19,2019
4:00

Pour les date/heures Heure locale de l’utilisateur, les applications canevas utilisent le fuseau horaire du navigateur ou de l’appareil, mais les applications pilotées par modèle utilisent le paramètre de l’utilisateur dans Dataverse. Ces paramètres correspondent généralement, mais les résultats diffèrent si ces paramètres diffèrent.

Utilisez les fonctions DateAdd et TimeZoneInformation pour convertir l’heure locale en UTC et vice-versa. Voir les exemples à la fin de la documentation de ces fonctions.

Équivalents numériques

Les applications canevas contiennent et calculent toutes les valeurs de date/heure, que ce soit Heure locale de l’utilisateur ou Sans fuseau horaire en UTC. L’application traduit les valeurs en fonction du fuseau horaire de l’utilisateur de l’application lors de leur affichage et lorsque l’utilisateur de l’application les spécifie.

Lorsqu’une application canevas lit une valeur Sans fuseau horaire à partir d’un source de données ou écrit une telle valeur dans un source de données, l’application ajuste automatiquement la valeur pour compenser le fuseau horaire de l’utilisateur de l’application. L’application traite ensuite la valeur comme une valeur UTC, cohérente avec toutes les autres valeurs de date/heure dans l’application. En raison de cette compensation, la valeur Sans fuseau horaire originale apparaît lorsque l’application ajuste la valeur UTC pour le fuseau horaire de l’utilisateur de l’application.

Vous pouvez observer ce comportement de plus près en utilisant la fonction Value pour accéder à la valeur numérique sous-jacente d’une valeur date / heure. Cette fonction renvoie la valeur date / heure sous forme de nombre de millisecondes depuis le 1er janvier 1970 00:00:00.000 UTC.

Étant donné que chaque valeur de date/heure est conservée en UTC, la formule Value( Date( 1970, 1, 1 ) ) ne retournera pas zéro dans la plupart des régions du monde parce que la fonction Date renvoie une date en UTC. Par exemple, la formule renvoie 28 800 000 dans un fuseau horaire décalé de huit heures par rapport à l’UTC. Ce nombre reflète le nombre de millisecondes en huit heures.

Revenons à notre exemple ci-dessus :

Type Date/heure Valeur stockée dans la base de données Valeur affichée et entrée 7 heures à l’ouest de UTC La fonction Value renvoie
Heure locale de l’utilisateur Dimanche,mai19,2019
4:00
Samedi,mai18,2019
21:00
1,558,238,400,000
(Dimanche,mai19,2019
04 h 00 UTC)
Sans fuseau horaire Dimanche,mai19,2019
4:00
Dimanche,mai19,2019
4:00
1,558,263,600,000
(Dimanche,mai19,2019
11 h 00 UTC)

Conversion des heures Unix

Les heures Unix reflètent le nombre de secondes depuis le 1er janvier 1970 00:00:00 UTC. Étant donné que les applications canevas utilisent des millisecondes au lieu de secondes, vous pouvez convertir entre les deux en multipliant ou en divisant par 1 000.

Par exemple, l’heure Unix affiche le 9 septembre 2001 à 01:46:40 UTC sous le nom 1 000 000 000. Pour afficher cette valeur de date / heure dans une application canevas, multipliez ce nombre par 1 000 pour le convertir en millisecondes, puis utilisez-le dans une fonction Text. La formule Text(1000000000 * 1000, DateTimeFormat.UTC) renvoie la chaîne 2001-09-09T01:46:40.000Z.

Cependant, cette fonction renvoie Samedi 8 septembre 2001 18:46:40 si vous utilisez le format DateTimeFormat.LongDateTime24 dans un fuseau horaire décalé de -7 heures par rapport à UTC (7 heures à l’ouest de UTC). Ce résultat affiche la valeur DateHeure correctement basée sur le fuseau horaire local.

Pour convertir en temps Unix, divisez le résultat de Valeur par 1 000 :
RoundDown( Value( UnixTime ) / 1000, 0 )

Si vous avez besoin du temps Unix dans une valeur Date pour d’autres calculs ou affichage dans Power Apps, utilisez cette formule :
DateAdd( Date( 1970,1,1 ), UnixTime, Seconds )

SQL Server

SQL Server a Datetime, Datetime2 et autres types de données de date/heure qui n’incluent pas de décalage de fuseau horaire et n’indiquent pas dans quel fuseau horaire ils se trouvent. Les applications canevas supposent que ces valeurs sont stockées en UTC et les traitent comme Heure locale de l’utilisateur. Si les valeurs sont censées être indépendantes du fuseau horaire, corrigez les conversions UTC en utilisant la fonction TimeZoneOffset.

Les applications canevas utilisent les informations de fuseau horaire incluses dans Datetimeoffset lors de la conversion d’une valeur en représentation UTC interne de l’application. Les applications utilisent toujours UTC comme fuseau horaire (décalage de fuseau horaire nul) lorsqu’elles écrivent des données.

Les applications canevas lisent et écrivent les valeurs de Type de données Time dans SQL Server en tant que chaînes de texte au format de durée ISO 8601. Par exemple, vous devez analyser ce format de chaîne et utiliser la fonction Time pour convertir la chaîne de texte "PT2H1M39S" à une valeur Time :

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)

Mélange des informations de date et d’heure

Date, Heure, et DateHeure ont des noms différents, mais ils contiennent tous les mêmes informations sur les dates et les heures.

Une valeur Date peut inclure des informations sur l’heure, généralement minuit. Une valeur Heure peut contenir des informations de date, qui sont généralement le 1er janvier 1970. Dataverse stocke également des informations de temps avec un champ Date seulement mais affiche uniquement les informations de date par défaut. De même, les applications canevas distinguent parfois ces types de données pour déterminer les formats et les contrôles par défaut.

L’ajout et la soustraction directe de valeurs de date et d’heure ne sont pas recommandés, car le fuseau horaire et d’autres conversions peuvent entraîner des résultats confus. Soit utiliser la fonction Value pour convertir les valeurs de date/heure en millisecondes en premier et prendre en compte le fuseau horaire de l’utilisateur de l’application, ou utilisez les fonctions DateAdd et DateDiff pour ajouter ou soustraire de l’une de ces valeurs.

Choix et Oui/non

Les choix et les types de données à deux options offrent deux choix ou plus à l’utilisateur de l’application. Par exemple, un choix Statut de la commande pourrait offrir les choix Nouveau, Expédié, Facturé, et Fermé. Le type de données à deux options n’offre que deux choix.

Ces deux types de données affichent leurs étiquettes dans un contexte de chaîne de texte. Par exemple, un contrôle d’étiquette affiche l’une des options d’état de la commande si la propriété Text du contrôle est définie sur une formule qui fait référence à ce choix. Les libellés d’options peuvent être localisés pour les utilisateurs d’applications dans différents emplacements.

Lorsqu’un utilisateur d’application sélectionne une option et enregistre cette modification, l’application transmet les données à la base de données, qui stocke ces données dans une représentation indépendante de la langue. Une option dans un groupe d’options est transmise et stockée sous forme de nombre, et une option dans un type de données à deux options est transmise et stockée sous forme de valeur booléenne.

Les étiquettes sont uniquement à des fins d’affichage. Vous ne pouvez pas effectuer de comparaisons directes avec les étiquettes car elles sont spécifiques à une langue. Au lieu de cela, chaque choix a une énumération qui fonctionne avec le nombre sous-jacent ou la valeur booléenne. Par exemple, vous pouvez utiliser cette formule :

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

Mais vous ne pouvez pas utiliser cette formule :

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

Pour les choix globaux (que les tables partagent), le nom de l’énumération du groupe d’options correspond au nom du choix global. Pour les choix locaux (qui sont limités à une table), le nom peut contenir le nom de la table. Ce comportement évite les conflits si plusieurs tables ont des choix portant le même nom. Par exemple, la table Comptes peut avoir un choix OrderStatus, et son nom pourrait être OrderStatus (Accounts). Ce nom contient un ou plusieurs espaces et parenthèses, vous devez donc l’entourer de guillemets simples si vous le référencez dans une formule.

De plus, les valeurs à deux options peuvent également se comporter comme des valeurs booléennes. Par exemple, une valeur à deux options nommée TaxStatus pourrait avoir les étiquettes Imposable et Non imposable, qui correspondent à true et false respectivement. Pour illustrer cela, vous pouvez utiliser cette formule :

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

Vous pouvez utiliser cette formule équivalente :

If( ThisItem.Taxable, ...