Data types

Notitie

Microsoft Power Fx is de nieuwe naam voor de formuletaal van canvas-apps. Aan deze artikelen wordt gewerkt terwijl we de taal extraheren uit canvas-apps en deze integreren met andere Microsoft Power Platform-producten en het beschikbaar maken als open source. Begin met het Microsoft Power Fx-overzicht voor een inleiding in de taal.

Informatie stroomt door een app in kleine, afzonderlijke waarden, net zoals de cellen van een spreadsheet. Gegevens in een veld Geboortedatum en een veld Verjaardag stromen allemaal als een Datum-waarde door die het jaar, de maand en de dag omvat. De app weet hoe deze waarden moeten worden opgemaakt, hoe de invoer wordt beperkt tot de geschikte informatie en hoe waarden worden gedeeld met een database. Geboortedatums zijn anders van verjaardagen, maar het systeem verwerkt ze op precies dezelfde manier. In dit geval is Datum een voorbeeld van een gegevenstype.

Dit artikel bevat details over de gegevenstypen die door canvas-apps worden ondersteund. Wanneer een app verbinding maakt met een externe gegevensbron, wordt elk gegevenstype in die bron toegewezen aan een gegevenstype voor canvas-apps.

Gegevenstype Beschrijving Voorbeelden
Booleaanse waarde Een true- of false-vraag. Kan direct worden gebruikt in If, Filter en andere functies zonder vergelijking. true
Kleur Een kleurspecificatie, inclusief een alfakanaal. Color.Red
ColorValue( "#102030" )
RGBA( 255, 128, 0, 0.5 )
Valuta Een valutawaarde die is opgeslagen in een geval met een drijvende komma. Valutawaarden zijn hetzelfde als numerieke waarden met een valuta-opmaak. 123
4.56
Datum Een datum zonder tijd in de tijdzone van de app-gebruiker. Date( 2019, 5, 16 )
DateTime Een datum met een tijd in de tijdzone van de app-gebruiker. DateTimeValue( "May 16, 2019 1:23:09 PM" )
Decimaal Een nummer met hoge precisie, grondtal 10-bewerkingen en een beperkt bereik. 123
Decimaal( '1.2345' )
GUID Een Globally Unique Identifier. GUID()
GUID( "123e4567-e89b-12d3-a456-426655440000" )
Hyperlink Een tekenreeks met een hyperlink. "https://powerapps.microsoft.com"
Image Een Universal Resource Identifier-tekenreeks (URI) naar een afbeelding in een .jpeg-, .png-, .svg-, .gif- of een andere veelgebruikte indeling voor webafbeeldingen. MyImage toegevoegd als een app-resource
"https://northwindtraders.com/logo.jpg"
"appres://blobmanager/7b12ffa2..."
Media Een URI-tekenreeks naar een video- of audio-opname. MyVideo toegevoegd als een app-resource
"https://northwindtraders.com/intro.mp4"
"appres://blobmanager/3ba411c..."
Getal of Drijvend Een nummer met standaard precisie, grondtal 2-bewerkingen en een groot bereik. 123
8.903e121
1.234e200
Keuze Een keuze uit een reeks opties, ondersteund door een nummer. Dit gegevenstype combineert een lokaliseerbaar tekstlabel met een numerieke waarde. Het label verschijnt in de app en de numerieke waarde wordt opgeslagen en gebruikt voor vergelijkingen. ThisItem.OrderStatus
Record Een record met gegevenswaarden. Dit samengestelde gegevenstype bevat exemplaren van andere gegevenstypen die in dit onderwerp worden vermeld. Meer informatie: Werken met tabellen. { Bedrijf: "Northwind Traders",
Personeel: 35,
Non-profit: onwaar }
Referentie vastleggen Een verwijzing naar een record in een tabel. Dergelijke verwijzingen worden vaak gebruikt bij polymorfe zoekopdrachten. Meer informatie: Werken met verwijzingen. First(Accounts).Owner
Table Een tabel met records. Alle records moeten dezelfde namen hebben voor hun velden met dezelfde gegevenstypen en weggelaten velden worden behandeld als leeg. Dit samengestelde gegevenstype bevat exemplaren van andere gegevenstypen die in dit onderwerp worden vermeld. Meer informatie: Werken met tabellen. Table( { FirstName: "Sidney",
LastName: "Higa" },
{ FirstName: "Nancy",
LastName: "Anderson" } )
Tekst Een Unicode-tekenreeks. "Hallo wereld"
Tijd Een tijd zonder datum in de tijdzone van de app-gebruiker. Time( 11, 23, 45 )
Twee opties Een keuze uit een reeks van twee opties, ondersteund door een booleaanse waarde. Dit gegevenstype combineert een lokaliseerbaar tekstlabel met een booleaanse waarde. Het label verschijnt in de app en de booleaanse waarde wordt opgeslagen en gebruikt voor vergelijkingen. ThisItem.Taxable
Niet-getypeerd object Een object van een ongedeclareerd type. Het onderliggende object kan elk bestaand type zijn en kan worden geconverteerd naar compatibele typen met behulp van functies zoals Boolean(), Value() en Table(). Raadpleeg voor meer informatie Niet-getypeerd object en Werken met JSON. ParseJSON("{ ""Field"" : 1234 }").Field

Veel van deze gegevenstypen zijn vergelijkbaar en hebben dezelfde onderliggende weergave, zoals een veld Hyperlink dat wordt behandeld als Text. De aanvullende gegevenstypen zorgen voor betere standaardervaringen in formulieren en andere besturingselementen.

Blank

Alle gegevenstypen kunnen een lege waarde hebben (met andere woorden, geen waarde). De term "null" wordt voor dit concept vaak gebruikt in databases.

Gebruik de functie Blank met de functie Set of Patch om een variabele of veld in te stellen op leeg. Met Bijvoorbeeld, Set( x, Blank() ) verwijdert u bijvoorbeeld elke waarde in de globale variabele x.

Test op een lege waarde met de functie IsBlank. Vervang mogelijk lege waarden door niet-lege waarden met de functie Coalesce.

Omdat alle gegevenstypen leeg ondersteunen, hebben de gegevenstypen Booleaans en Twee opties in feite drie mogelijke waarden.

Al deze vier gegevenstypen zijn gebaseerd op een Unicode-tekenreeks.

Ingesloten tekst

Ingesloten tekenreeksen in een formule staan tussen dubbele aanhalingstekens. Gebruik twee dubbele aanhalingstekens samen om een één dubbel aanhalingsteken in de tekenreeks weer te geven. Overweeg het gebruik van bijvoorbeeld de volgende formule in de eigenschap OnSelect van een besturingselement Button:

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

dit resulteert in een banner wanneer de knop wordt ingedrukt, waarbij de eerste en laatste dubbele aanhalingstekens worden weggelaten (omdat ze de tekenreeks afscheiden) en de herhaalde dubbele aanhalingstekens rond Hallo Wereld! worden vervangen door een enkel dubbel aanhalingsteken:

pop-upmelding met het bericht dat Jane zei

Enkele aanhalingstekens worden gebruikt voor id-namen die speciale tekens bevatten en geen speciale betekenis hebben binnen een teksttekenreeks.

Tekenreeksinterpolatie

Gebruik tekenreeksinterpolatie om formules in een teksttekenreeks in te sluiten. Dit is vaak gemakkelijker om mee te werken en de uitvoer te visualiseren dan het gebruik van de functie Concatenate of de operator &.

Laat de teksttekenreeks voorafgaan door een dollarteken $ en zet de formule die moet worden ingesloten tussen accolades { }. Gebruik herhaalde accolades om een accolade in de teksttekstreeks op te nemen: {{ of }}. Tekenreeksinterpolatie kan overal worden gebruikt waar een standaard teksttekenreeks kan worden gebruikt.

Bekijk bijvoorbeeld deze formule met algemene variabelen Appels ingesteld op 3 en Bananen ingesteld op 4:

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

Deze formule retourneert de tekenreeks We hebben 3 appels, 4 bananen, wat in totaal 7 vruchten oplevert. De variabelen Appels en Bananen worden in de tekst ingevoegd en vervangen de accolades, samen met het resultaat van de wiskundige formule Appels + Bananen. Spaties en andere tekens rond de accolades blijven ongewijzigd.

Ingesloten formules kunnen alle functies of operators bevatten. Hiervoor hoeft het resultaat van de formule alleen te worden omgezet in een teksttekenreeks. Met deze formule wordte bijvoorbeeld NickName ingevoegd als deze is opgegeven of FirstName als dat niet het geval is in een begroeting:

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

Als NickName is ingesteld op "Joep", produceert deze formule de teksttekenreeks Welkom Joep, leuk je te ontmoeten!. Maar als NickNameleeg is en FirstName "Jos" is, produceert deze formule de tekst Beste Jos, leuk je te ontmoeten! in plaats daarvan.

Tekenreeksinterpolatie kan standaardtekstreeksen in de ingesloten formule bevatten. Als bijvoorbeeld NickName en FirstName geen van beide zijn opgegeven, kunnen we nog steeds "Vriend" opgeven als vervanging:

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

Tekenreeksinterpolaties kunnen zelfs worden genest. Bekijk dit voorbeeld waarbij Voornaam, Middelste naam en Achternaam worden gecombineerd tot een begroeting. Zelfs als een of twee van deze waarden leeg zijn, zal het juiste aantal spaties tussen de naamdelen staan. Als geen van de onderdelen aanwezig is, wordt de interpolatie van de binnenste tekenreeks samenvouwen tot een lege tekenreeks en door de functie Coalesce worden vervangen door "Vriend".

$"Welcome {Coalesce( Trim( $"{First} {Middle} {Last}"}), "Friend" )}!"
Voornaam Middelste naam Achternaam Resultaat
John Quincy Doe Welcome John Quincy Doe!
John leeg Doe Welcome John Doe!
leeg leeg Doe Welcome Doe!
leeg leeg leeg Welcome Friend!

Nieuwe regels

Ingesloten teksttekenreeksen kunnen nieuwe regels bevatten. Overweeg bijvoorbeeld om de eigenschap Text van een besturingselement Label op het volgende in te stellen:

"Line 1
Line 2
Line 3"

De bovenstaande formule resulteert in drie regels die worden weergegeven in het besturingselement Label:

Ingesloten teksttekenreeks en besturingselement Label met drie regels met Regel 1, Regel 2 en Regel 3.

Nieuwe regels worden ook ondersteund bij tekenreeksinterpolatie, zoals hieronder weergegeven:

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

De bovenstaande formule resulteert in dezelfde uitvoer:

Formule voor tekenreeksinterpolatie en besturingselement Label met drie regels met Regel 1, Regel 2 en Regel 3.

Afbeeldings- en mediaresources

Via het menu File kunt u afbeeldings-, video- en audiobestanden toevoegen als app-resources. De naam van het geïmporteerde bestand wordt de resourcenaam in de app. In deze afbeelding wordt het Northwind Traders-logo, dat nwindlogo wordt genoemd, toegevoegd aan een app:

Northwind-resource.

Als u deze resource in een app wilt gebruiken, specificeert u deze in de eigenschap Afbeelding van een besturingselement Image:

Northwind-afbeelding.

URI's voor afbeeldingen en andere media

U kunt een beetje verdergaan met dat laatste voorbeeld door de eigenschap Text van een besturingselement Label in te stellen op nwindlogo. Het label toont een tekenreeks:

Northwind-tekst.

Canvas-apps verwijzen naar elke afbeelding of ander mediabestand, of het nu in de cloud is of toegevoegd als app-resource, met een URI-in te stellen .

De eigenschap Image bijvoorbeeld van een afbeeldingsbesturingselement accepteert niet alleen app-resources, maar ook koppelingen naar afbeeldingen op internet, zoals "https://northwindtraders.com/logo.jpg"". De eigenschap accepteert ook inline afbeeldingen die gebruikmaken van het schema met gegevens-URI-'s, zoals in dit voorbeeld:

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

Deze URI geeft een opgeschaalde versie weer van twee paarse diamanten:

Dubbele diamanten.

U kunt de meest recente afbeelding weergeven die is vastgelegd in een besturingselement Camera als u de eigenschap Image van een afbeeldingsbesturingselement instelt op de eigenschap Photo van het camerabesturingselement. De app bevat de afbeelding in het geheugen en de Photo-eigenschap van jet camerabesturingselementen retourneert een URI-verwijzing naar de afbeelding. U maakt bijvoorbeeld een foto en de eigenschap Photo van de camera stuurt dit terug: "appres://blobmanager/7b12ffa2ea4547e5b3812cb1c7b0a2a0/1".

U gebruikt een URI om te verwijzen naar een afbeelding of een ander mediabestand dat is opgeslagen in een database. Op die manier haalt de app de daadwerkelijke gegevens pas op als ze echt nodig zijn. Bijvoorbeeld een bijlage in een Microsoft Dataverse-tabel kan "appres://datasources/Contacts/table/..." retourneren. Net als in het cameravoorbeeld kunt u deze afbeelding weergeven door de eigenschap Image van een afbeeldingsbesturingselement in te stellen op deze verwijzing, die de binaire gegevens ophaalt.

Wanneer u een mediagegevenstype, zoals een afbeelding, opslaat in een database, verzendt de app de daadwerkelijke afbeelding of mediagegevens, niet de URI-referentie.

Maximale grootte

Als tekenreeksen en URI's hebben deze gegevenstypen geen vooraf ingestelde limiet voor hun lengte.

De binaire gegevens waarnaar deze gegevenstypen verwijzen, hebben ook geen vooraf ingestelde limiet voor grootte. Een afbeelding bijvoorbeeld die is vastgelegd met het camerabesturingselement waarnaar nu wordt verwezen als "appres://...", kan resolutie hebben met een hoogte en breedte als de camera van het apparaat aankan. De resolutie, framesnelheid en andere kenmerken van mediabestanden worden niet beperkt door het gegevenstype, maar specifieke besturingselementen voor het afspelen en vastleggen van media hebben mogelijk hun eigen beperkingen.

Alle gegevensgroottes zijn echter afhankelijk van de hoeveelheid beschikbaar geheugen in de app. Browsers die op een desktopcomputer draaien, ondersteunen doorgaans meer dan 100 megabytes aan gegevens. De hoeveelheid beschikbaar geheugen op een apparaat zoals een telefoon kan echter veel lager zijn, meestal in het bereik van 30-70 megabytes. Test algemene scenario's op alle apparaten waarop deze moet worden uitgevoerd om te bepalen of uw app binnen deze limieten werkt.

Pas de goede gewoonte toe om gegevens niet langer dan nodig in het geheugen te bewaren. Upload afbeeldingen zo snel mogelijk naar een database; download afbeeldingen alleen wanneer de gebruiker van de app daarom vraagt.

Nummers

Notitie

Power Apps ondersteunt nu alleen Drijvend en dat is het type van alle getallen. Ondersteuning voor Decimaal wordt binnenkort toegevoegd.

Power Fx ondersteunt twee soorten getallen: Decimaal en Drijvend (met synoniemen Getal en Valuta).

Decimaal is het best voor de meeste zakelijke berekeningen. Hiermee kunt u getallen met grondtal 10 nauwkeurig weergeven, wat betekent dat 0.1 exact kan worden weergegeven en niet gevoelig is voor afrondingsfouten tijdens berekeningen. Het bereik is groot genoeg voor elke zakelijke behoefte, tot wel 1028 met een nauwkeurigheid tot 28 cijfers. Decimaal is het standaard numerieke gegevenstype voor de meeste Power Fx-hosts, gebruikt als iemand enkel 2*2 schrijft.

Drijvend is het best voor wetenschappelijke berekeningen. Hiermee kunt u getallen in een veel groter bereik weergeven, tot 10308. De nauwkeurigheid is beperkt tot 15 decimalen en de wiskunde is gebaseerd op grondtal 2, zodat sommige algemene decimale waarden niet nauwkeurig kunnen worden weergegeven. Drijvend heeft ook hogere prestaties en heeft de voorkeur als dat een factor is en precisie niet kritisch is.

Decimale getallen

Het gegevenstype Decimaal gebruikt meestal het decimale gegevenstype .NET. Sommige hosts, zoals Dataverse-formulekolommen die worden uitgevoerd in SQL Server, gebruiken het decimale gegevenstype SQL Server.

Met Decimaal rekent u zoals u dat op school hebt geleerd, met grondtal 10 cijfers. Dat is erg belangrijk om afrondingsfouten te voorkomen als gevolg van zeer kleine verschillen die kunnen optellen als u grondtal 2-wiskunde gebruikt (zoals gebruikt door Drijvend).

Het bereik gaat van positief 79,228,162,514,264,337,593,543,950,335 tot negatief 79,228,162,514,264,337,593,543,950,335. Het decimaalteken kan overal binnen deze cijfers worden geplaatst, waardoor een precisie van maximaal 28 cijfers wordt verkregen, en toch nauwkeurig worden weergegeven. 79.228.162.514.264,337593543950335 kan bijvoorbeeld exact worden weergegeven, net als 7,9228162514264337593543950335.

Getallen met drijvende komma

Het gegevenstype Drijvend, ook wel bekend als Getal of Valuta, gebruikt de IEEE 754-standaard voor zwevende kommagetallen met dubbele precisie. Deze standaard biedt een zeer groot aantal getallen om mee te werken, van –1,79769 x 10308 tot 1,79769 x 10308. De kleinste waarde die kan worden weergegeven is 5 x 10–324.

Drijvend kan gehele getallen weergeven tussen –9.007.199.254.740.991 (- (253 - 1)) en 9.007.199.254.740.991 (253 - 1), inclusief. Dit bereik is groter dan de integer-gegevenstypen met 32-bits (of 4-bytes) die databases vaak gebruiken. Canvas-apps kunnen echter geen integer-gegevenstypen met 64-bits (of 8-bytes) weergeven. Mogelijk wilt u het getal in een tekstveld opslaan of een berekende kolom gebruiken om een kopie van het getal in een tekstveld te maken, zodat het wordt toegewezen aan het gegevenstype Text in de canvas-app. Op deze manier kunt u deze waarden vasthouden, weergeven en invoeren, en ze vergelijken om te bepalen of ze gelijk zijn. In dit formulier kunt u er echter geen numerieke berekeningen op uitvoeren.

Drijvende-kommaberekeningen zijn bij benadering, dus het kan soms onverwachte resultaten opleveren met veel gedocumenteerde voorbeelden. Je zou verwachten dat de formule 55 / 100 * 100 precies 55 retourneert en dat (55 / 100 * 100) - 55 precies nul retourneert. De laatste formule retourneert echter 7,1054 x 10–15, wat erg klein is maar niet nul. Dat kleine verschil veroorzaakt normaal gesproken geen probleem en de app rondt het af bij het tonen van het resultaat. Kleine verschillen kunnen echter in latere berekeningen samenkomen en lijken dan het verkeerde antwoord te geven.

Databasesystemen slaan vaak valuta's op en voeren decimale berekeningen uit, wat een kleiner bereik maar meer controle over de precisie biedt. Canvas-apps wijzen standaard valuta's toe aan en uit drijvende-kommawaarden. Daarom kan het resultaat verschillen van berekeningen die worden uitgevoerd in een native decimaal gegevenstype. Als dit type discrepantie problemen veroorzaakt, kunt u met deze waarden werken als Tekst, zoals u dat kunt doen met grote gehele getallen die eerder in deze sectie zijn beschreven.

Standaardwaarden en omzettingen

Notitie

Power Apps ondersteunt nu alleen Drijvend en dat is het type van alle getallen. Ondersteuning voor Decimaal wordt binnenkort toegevoegd.

De meeste Power Fx-hosts gebruiken standaard Decimaal. Dit heeft invloed op:

  • Letterlijke getallen in formules. Het getal 1.234 wordt geïnterpreteerd als een decimale waarde. De formule 1.234 * 2 interpreteert bijvoorbeeld de 1.234 en 2 als Decimaal en retourneert een Decimaal resultaat.
  • De functie Waarde. Value( "1.234" ) retourneert een Decimale waarde. Bij de formule Value( "1.234" ) * 2 interpreteert de functie Waarde bijvoorbeeld de inhoud van de tekstreeks "1.234" als een Decimaal.

Om met drijvende waarden te werken, wordt de functie Drijvend gebruikt. Als we het bovenstaande voorbeeld uitbreiden, zet Float( 1.234 ) de Decimaal1.234 om naar Drijvend. Drijvend kan ook worden gebruikt als vervanging voor Waarde om een tekenreeks met getal met drijvende komma, zoals Float( "1.234" ) , om te zetten naar een Drijvende waarde, die vereist is als het getal niet kan worden weergegeven als een Decimaal.

Samengevat:

Gebruik Decimaal Drijvend
Letterlijke getallen in formules 1.234 Float( 1.234 )
Float( "1.234" )
Omzetting van tekstreeks Value( "1.234" )
Decimal( "1.234" )
Float( "1.234" )
Omzetting tussen numerieke typen Decimal( float ) Float( decimal )
Omzetting naar tekstreeks Text( decimal ) Text( float )

Numerieke typen combineren

Drijvende en Decimale waarden kunnen vrijelijk worden gemengd. Bij combinatie worden Decimale waarden omgezet naar Zwevende waarden vanwege het grotere bereik. Omdat dit kan resulteren in een verlies aan precisie, is het belangrijk om de twee niet onnodig te combineren. Omdat Decimaal het standaard letterlijke gegevenstype is en de meeste numerieke functies dit type behouden, is het relatief eenvoudig om de omzetting naar Drijvend te vermijden zonder dat u dit wilt.

Bekijk bijvoorbeeld de volgende berekening met pac power-fx repl na het installeren van de Power Platform CLI. Omdat beide getallen Decimaal zijn, wordt de berekening uitgevoerd in Decimaal en behoudt het resultaat de volledige precisie:

>> 1.0000000000000000000000000001 * 2
2.0000000000000000000000000002

Als in plaats daarvan de tweede operand werd gewijzigd in Drijvend, zou de hele berekening worden uitgevoerd in Drijvend en zou het kleine breukgedeelte verloren gaan:

>> 1.0000000000000000000000000001 * Float(2)
2

Datum, Tijd en DateTime

Tijdzones

Datum-/tijdwaarden vallen in deze categorieën:

  • Gebruikersinstelling: deze waarden zijn opgeslagen in UTC (Coordinated Universal Time ), maar de tijdzone van de app-gebruiker heeft invloed op hoe de app deze waarden toont en hoe de app-gebruiker ze specificeert. Zo ziet hetzelfde moment er voor een gebruiker in Canada anders uit dan voor een gebruiker in Japan.
  • Tijdzone-onafhankelijk: de app geeft deze waarden op dezelfde manier weer en de app-gebruiker specificeert ze op dezelfde manier, ongeacht de tijdzone. Hetzelfde moment ziet er voor een gebruiker in Canada anders uit dan voor een gebruiker in Japan. App-auteurs die niet verwachten dat hun apps in verschillende tijdzones worden uitgevoerd, gebruiken deze waarden omdat ze over het algemeen eenvoudiger zijn.

Deze tabel toont enkele voorbeelden:

Type Datum/tijd Waarde opgeslagen in de database Waarde weergegeven en 7 uur ten westen van UTC ingevoerd Waarde weergegeven en 4 uur ten oosten van UTC ingevoerd
Gebruikersinstelling Zondag,19mei2019
4:00 uur
Zaterdag,18mei2019
21:00 uur
Zondag,19mei2019
8:00 uur
Tijdzone-onafhankelijk Zondag,19mei2019
4:00 uur
Zondag,19mei2019
4:00 uur
Zondag,19mei2019
4:00 uur

Voor datum/tijden met de Gebruikersinstelling gebruiken canvas-apps de tijdzone van de browser of het apparaat, maar modelgestuurde apps gebruiken de instelling van de gebruiker in Dataverse. Deze instellingen komen doorgaans overeen, maar de resultaten kunnen verschillen als deze instellingen verschillen.

Gebruik de functies DateAdd en TimeZoneInformation om lokale tijd om te zetten naar UTC en weer terug. Zie de voorbeelden aan het einde van de documentatie voor deze functies.

Numerieke equivalenten

Canvas-apps bevatten en berekenen alle datum-/tijdwaarden, of Gebruikersinstelling of Tijdzone-onafhankelijk in UTC. De app vertaalt de waarden op basis van de tijdzone van de app-gebruiker wanneer ze worden weergegeven en wanneer de app-gebruiker ze specificeert.

Wanneer een canvas-app een tijdzone-onafhankelijke waarde leest uit een gegevensbron of een dergelijke waarde schrijft naar een gegevensbron, past de app de waarde automatisch aan ter compensatie van de tijdzone van de gebruiker van de app. De app behandelt de waarde vervolgens als een UTC-waarde, consistent met alle andere datum-/tijdwaarden in de app. Vanwege deze compensatie verschijnt de originele tijdzone-onafhankelijke waarde wanneer de app de UTC-waarde aanpast voor de tijdzone van de app-gebruiker.

U kunt dit gedrag nauwkeuriger observeren door de functie Value te gebruiken om toegang te krijgen tot de onderliggende numerieke waarde voor een datum-/tijdwaarde. Deze functie retourneert de datum-/tijdwaarde als het aantal milliseconden sinds 1 januari 1970 00:00:00.000 UTC.

Omdat elke datum-/tijdwaarde in UTC wordt gehouden, zal de formule Value( Date( 1970, 1, 1 ) ) in de meeste delen van de wereld niet nul opleveren omdat de functie Date een datum in UTC retourneert. De formule retourneert bijvoorbeeld 28.800.000 in een tijdzone die acht uur is verschoven ten opzichte van UTC. Dat aantal weerspiegelt het aantal milliseconden in acht uur.

Terugkomend op het voorbeeld hierboven:

Type Datum/tijd Waarde opgeslagen in de database Waarde weergegeven en 7 uur ten westen van UTC ingevoerd Functie Value functie geeft
Gebruikersinstelling Zondag,19mei2019
4:00 uur
Zaterdag,18mei2019
21:00 uur
1,558,238,400,000
(Zondag,19mei2019
4:00 AM UTC)
Tijdzone-onafhankelijk Zondag,19mei2019
4:00 uur
Zondag,19mei2019
4:00 uur
1,558,263,600,000
(Zondag,19mei2019
11:00 AM UTC)

Unix-tijden converteren

Unix-tijden geven het aantal seconden weer sinds 1 januari 1970 00:00:00 UTC. Omdat canvas-apps milliseconden gebruiken in plaats van seconden, kunt u tussen de twee converteren door te vermenigvuldigen of te delen door 1000.

Unix-tijd toont bijvoorbeeld 9 september 2001 om 01:46:40 UTC als 1.000.000.000. Om die datum-/tijdwaarde in een canvas-app weer te geven, vermenigvuldigt u dat aantal met 1000 om het naar milliseconden te converteren en gebruikt u het vervolgens in een Text-functie. De formule Text( 1000000000 * 1000, DateTimeFormat.UTC ) retourneert de tekenreeks 2001-09-09T01:46:40.000Z.

Die functie geeft echter Zaterdag 8 september, 2001 18:46:40 als u de indeling DateTimeFormat.LongDateTime24 gebruikt in een tijdzone die -7 uur verschoven is ten opzichte van UTC (7 uur ten westen van UTC). Dit resultaat toont correct de DateTime-waarde op basis van de lokale tijdzone.

Om te converteren naar een Unix-tijd deelt u het resultaat van Waarde door 1.000:
RoundDown( Value( UnixTime ) / 1000, 0 )

Als u de Unix-tijd nodig hebt als een Datum-waarde voor verdere berekeningen of weergave binnen Power Apps, gebruikt u deze formule:
DateAdd( Date( 1970,1,1 ), UnixTime, Seconds )

SQL Server

SQL Server heeft Datetime, Datetime2 en andere gegevenstypen voor datum/tijd die geen tijdzoneverschuiving bevatten en niet aangeven in welke tijdzone ze zich bevinden. Canvas-apps gaan ervan uit dat deze waarden zijn opgeslagen in UTC en behandelen ze als Gebruikersinstelling. Als de waarden bedoeld zijn als tijdzone-onafhankelijk, corrigeert u ze voor de UTC-omzettingen met de functie TimeZoneOffset.

Canvas-apps gebruiken de meegeleverde tijdzonegegevens in Datetimeoffset-velden bij het converteren van een waarde naar de interne UTC-representatie van de app. De apps gebruiken altijd UTC als tijdzone (nul tijdzoneverschuiving) wanneer ze gegevens schrijven.

Canvas-apps lezen en schrijven waarden van het gegevenstype Tijd in SQL Server als teksttekenreeksen in de ISO 8601-duurindeling. Ontleed bijvoorbeeld de volgende tekenreeksindeling en gebruik de functie Time om de tekenreeks 'PT2H1M39S' te converteren naar een tijd-waarde:

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)

Datum- en tijdinformatie mengen

Datum, Tijd en DateTime hebben verschillende namen, maar ze bevatten allemaal dezelfde informatie over datums en tijden.

Een Datum-waarde kan tijdinformatie bevatten, die meestal middernacht is. Een Tijd-waarde kan datuminformatie bevatten, die gewoonlijk 1 januari 1970 is. Dataverse slaat ook tijdinformatie op met een veld Alleen datum maar toont standaard alleen de datuminformatie. Canvas-apps maken soms ook onderscheid tussen deze gegevenstypen om standaardindelingen en besturingselementen te bepalen.

Het optellen en aftrekken van datum- en tijdwaarden wordt niet aanbevolen omdat tijdzones en andere conversies verwarrende resultaten kunnen geven. Gebruik de functie Value om datum/tijd-waarden eerst naar milliseconden te converteren en rekening te houden met de tijdzone van de app-gebruiker, of gebruik de functies DateAdd en DateDiff om op te tellen of af te trekken met een van deze waarden.

Keuzen en Ja/Nee

Keuzen en gegevenstypen met twee opties bieden twee of meer keuzen die een appgebruiker kan selecteren. Een keuze Orderstatus kan bijvoorbeeld de keuzen Nieuw, Verzonden, Gefactureerd en Gesloten bieden. Het gegevenstype met twee opties biedt slechts twee keuzes.

Beide gegevenstypen tonen hun labels in een tekenreekscontext. Een labelbesturingselement toont bijvoorbeeld een van de orderstatusopties als de eigenschap Text van het besturingselement is ingesteld op een formule die naar die keuze verwijst. Optielabels zijn mogelijk gelokaliseerd voor app-gebruikers op verschillende locaties.

Wanneer een app-gebruiker een optie selecteert en die wijziging opslaat, verzendt de app de gegevens naar de database, die de gegevens opslaat in een taalonafhankelijke weergave. Een optie in een keuze wordt verzonden en opgeslagen als een getal, en een optie in een gegevenstype met twee opties wordt verzonden en opgeslagen als een booleaanse waarde.

De labels zijn alleen voor weergavedoeleinden. U kunt geen directe vergelijkingen maken met de labels omdat ze specifiek zijn voor een taal. In plaats daarvan heeft elke keuze een opsomming die werkt met het onderliggende getal of de onderliggende booleaanse waarde. U kunt deze formule bijvoorbeeld niet gebruiken:

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

Maar u kunt wel deze formule gebruiken:

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

Voor algemene keuzen (die door tabellen worden gedeeld), komt de naam van de optieset-opsomming overeen met de naam van de algemene keuze. Voor lokale keuzen (die betrekking hebben op een tabel), kan de naam de naam van de tabel bevatten. Dit gedrag voorkomt conflicten als meerdere tabellen keuzen hebben met dezelfde naam. Zo kan bijvoorbeeld de tabel Accounts een keuze Orderstatus hebben met de naam Orderstatus (Accounts). Die naam bevat een of meer spaties en haakjes, dus u moet deze tussen enkele aanhalingstekens plaatsen als u ernaar verwijst in een formule.

Bovendien kunnen waarden met twee opties zich ook gedragen als booleaanse waarden. De waarde met twee opties TaxStatus kan de labels hebben Belastbaar en Niet-belastbaar hebben, die overeenkomen met true en false. Gebruik deze formule om dit te demonstreren:

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

U kunt ook deze gelijkwaardige formule gebruiken:

If( ThisItem.Taxable, ...