Datatyper
Bemærk
Microsoft Power Fx er det nye navn til formelsproget for lærredapps. Vi arbejder på disse artikler, mens vi udtrækker sproget fra lærredapps, integrerer det i andre Microsoft Power Platform-produkter og gør det tilgængeligt som open source. Start med Microsoft Power Fx-oversigten for at få en introduktion til sproget.
Oplysninger flyder via en app i små, diskrete værdier og på næsten samme måde som cellerne i et regneark. Data i feltet Fødselsdag og feltet Mærkedag vil f.eks. flyde som en Dato-værdi, der omfatter årstallet, måneden og dagen. Appen ved, hvordan disse værdier formateres, begrænser input til det, der er passende for hver enkelt, og dele værdierne med en database. Fødselsdage adskiller sig fra personers mærkedage, men systemet håndterer dem på præcis samme måde. I dette tilfælde er Dato et eksempel på en datatype.
Denne artikel indeholder oplysninger om de datatyper, som lærredapps understøtter. Når en app opretter forbindelse til en ekstern datakilde, knyttes alle datatyper i denne kilde til en datatype for lærredapps.
Datatype | Beskrivelse | Eksempler |
---|---|---|
boolesk | En sand- eller falsk-værdi. Kan bruges direkte i If, Filter og andre funktioner uden en sammenligning. | sand |
Farve | En farvespecifikation, der inkluderer en alfakanal. | Farve.Rød ColorValue( "#102030" ) RGBA( 255, 128, 0, 0,5 ) |
Valuta | En valutaværdi, der gemmes i et flydende tal. Valutaværdier er de samme som talværdier med indstillinger for valutaformatering. | 123 4.56 |
Dato | En dato uden et tidspunkt i tidszonen for appens bruger. | Dato( 2019, 5, 16 ) |
Dato og klokkeslæt | En dato med et klokkeslæt i tidszonen for appens bruger. | DateTimeValue( "16. maj 2019 1:23:09 PM" ) |
Decimal | Et tal med høj præcision, basis 10 handlinger og begrænset område. | 123 Decimal( "1.2345" ) |
GUID | En Globally Unique Identifier. | GUID() GUID( "123e4567-e89b-12d3-a456-426655440000" ) |
Link | En tekststreng, der indeholder et link. | "https://powerapps.microsoft.com" |
Billede | En URI-adressetekststreng (Universal Resource Identifier) til et billede i .jpeg-, .png-, .SVG-, .gif- eller andre almindelige webbilledformater. | MyImage tilføjet som en app-ressource "https://northwindtraders.com/logo.jpg" "appres://blobmanager/7b12ffa2..." |
Medie | En URI-adressetekststreng til en video- eller lydoptagelse. | MyVideo tilføjet som en app-ressource "https://northwindtraders.com/intro.mp4" "appres://blobmanager/3ba411c..." |
Tal eller float | Et tal med standardpræcision, basis 2 handlinger og et bredt omfang. | 123 8,903e121 1.234e200 |
Valg | En valg fra et sæt af indstillinger, der er baseret på et tal. Denne datatype kombinerer en tekstetiket, der er lokaliseret, med en numerisk værdi. Etiketten vises i appen, og den numeriske værdi gemmes og bruges til sammenligninger. | ThisItem.OrderStatus |
Rekord | En post med dataværdier. Denne sammensatte datatype indeholder forekomster af andre datatyper, der er angivet i denne emne. Flere oplysninger: Arbejde med tabeller. | { Virksomhed: "Northwind Traders" Medarbejder: 35, NonProfit: false } |
Reference til post | En reference til en post i en tabel. Sådanne referencer bruges ofte sammen med polymorfe opslag. Flere oplysninger: Arbejde med referencer. | Først(Konti). Ejer |
Bord | En tabel med poster. Alle poster skal have de samme navne til deres felter med de samme datatyper, og de udeladte felter behandles som tomme. Denne sammensatte datatype indeholder forekomster af andre datatyper, der er angivet i denne emne. Flere oplysninger: Arbejde med tabeller. | Tabel( { Fornavn: "Sidney", Efternavn: "Higa" }, { Fornavn: "Nancy", Efternavn: "Anderson" } ) |
Tekst | En Unicode-tekststreng. | "Hej verden" |
Tidspunkt | Et klokkeslæt uden en dato i tidszonen for appens bruger. | Tid( 11, 23, 45 ) |
To muligheder | En valg ud fra to muligheder, der er baseret på en boolesk værdi. Denne datatype kombinerer en tekstetiket, der er lokaliseret, med en boolesk værdi. Etiketten vises i appen, og den booleske værdi gemmes og bruges til sammenligninger. | Denne vare.Afgiftspligtig |
objekt uden type | Et objekt af en ikke-erklæret type. Det underliggende objekt kan være enhver eksisterende type og kan konverteres til kompatible typer ved hjælp af funktioner som Boolean(), Value(), Table() osv. Du kan finde flere oplysninger under Objekt uden type og Arbejde med JSON. | ParseJSON("{ ""Field"" : 1234 }"). Mark |
Mange af disse datatyper ligner hinanden og har samme underliggende repræsentation, f.eks et Link-felt, der behandles som Tekst. De ekstra datatyper giver bedre standardfunktioner i formularer og andre kontrolelementer.
Blank
Alle datatyper kan have værdien tom (med andre ord, ingen værdi). Udtrykket "NULL" bruges ofte i databaser for dette begreb.
Brug funktionen Blank med funktionen Set eller Patch til at indstille en variabel eller et felt til tom. Set( x, Blank() ) fjerner f.eks. enhver værdi i den globale variabel x.
Test for en tom værdi vha. funktionen IsBlank. Erstat mulige tommeværdier med værdier, der ikke er tomme, vha. funktionen Coalesce.
Da alle datatyper understøtter tom, har datatyperne Booleske og To muligheder faktisk har tre mulige værdier.
Tekst, Link, Billede og Medie
Alle disse fire datatyper er baseret på en Unicode-tekststreng.
Integreret tekst
Integrerede tekststrenge i en formel er omgivet af dobbelte anførselstegn. Brug to dobbelte anførselstegn sammen for at repræsentere et enkelt dobbelt anførselstegn i tekststrengen. Hvis du f.eks. bruger følgende formel i egenskaben OnSelect til et Button-kontrolelement:
Notify( "Jane said ""Hello, World!""" )
giver det et banner, når der trykkes på knappen, hvor det første og sidste dobbelte anførselstegn udelades (da de afgrænser tekststrengen) og de gentagne dobbelte anførselstegn omkring Hello, World! placeres med dobbelt citationstegn:
Enkelte anførselstegn bruges til identifikatornavne, der indeholder specialtegn, og har ikke nogen særlig betydning i en tekststreng.
Indskudt streng
Brug indskudt streng til at integrere formler i en tekststreng. Det er ofte nemmere at arbejde med og visualiserer outputtet i stedet for at bruge funktionen Sammenkæd eller operatoren &.
Indled tekststrengen med et dollartegn $, og indsæt den formel, der skal integreres, i krøllede klammeparenteser { }. Hvis du vil medtage en klammeparentes i tekststrengen, skal du bruge gentagne krøllede klammeparenteser: {{ eller }}. Indskudt streng kan bruges alle de steder, hvor en standardtekststreng kan bruges.
Du kan f.eks. overveje denne formel, hvor globale variabler Apples er angivet til 3 og Bananas til 4:
$"We have {Apples} apples, {Bananas} bananas, yielding {Apples+Bananas} fruit total."
Denne formel returnerer tekststrengen Vi har 3 æbler, 4 bananer, hvilket giver en total på 7 frugter. Variablerne Æble og Bananer indsættes i den tekst, der erstatter de kurvede klammeparenteser sammen med resultatet af formelen Æbler+banaer. Mellemrum og andre tegn omkring de krøllede klammeparenteser bevares, som de er.
Integrerede formler kan indeholde alle funktioner eller operatorer. Det eneste, der kræves, er, at resultatet af formlen kan konverteres til en tekststreng. Denne formel indsætter f.eks. NickName, hvis det leveres, eller FirstName, hvis ikke, i en hilsen:
$"Welcome {Coalesce( NickName, FirstName )}, it's great to meet you!" )
Hvis NickName er angivet til "Joe", opretter denne formel tekststrengen Welcome Joe, it's great to meet you!. Men hvis NickName er tomt, og FirstName er "Joseph", så opretter denne formel Dear Joseph, great to meet you! i stedet.
Indskudt streng kan inkludere standardtekststrenge i den integrerede formel. Hvis der f.eks. hverken blev leveret NickName eller FirstName, kunne vi stadig angive "Friend" som en erstatning:
$"Welcome {Coalesce( NickName, FirstName, "Friend" )}!"
Indskudte strenge kan endda indlejres. Se på dette eksempel, hvor Fornavn, Mellemnavn og Efternavn er samlet i en hilsen. Selvom en eller to af disse værdier er tomme, vil det korrekte antal mellemrum være mellem navnedelene. Hvis ingen af delene er angivet, samles den indre indskudte streng til en tom streng, og den kan erstattes af Coalesce-funktionen med "Ven".
$"Welcome {Coalesce( Trim( $"{First} {Middle} {Last}"}), "Friend" )}!"
Fornavn | Mellemnavn | Efternavn | Resultat |
---|---|---|---|
John | Quincy | Doe | Welcome John Quincy Doe! |
John | hvid | Doe | Welcome John Doe! |
hvid | hvid | Doe | Welcome Doe! |
hvid | hvid | hvid | Welcome Friend! |
Linjeskift
Integrerede tekststrenge kan indeholde linjeskift. Du kan f.eks. angive egenskaben Text for et Label-kontrolelement til følgende:
"Line 1
Line 2
Line 3"
Ovenstående formel resulterer i tre linjer, der vises i label-kontrolelementet:
Linjeskift understøttes også med indskudt streng, som vist nedenfor:
$"Line {1}
Line {1+1}
Line {1+1+1}"
Ovenstående formel resulterer i samme output:
Billed- og medieressourcer
Via menuen Filer kan du tilføje billed-, video- og lydfiler som appressourcer. Navnet på den importerede fil bliver til ressourcenavnet i appen. I dette grafikelement er logoet Northwind Trades, som hedder nwindlogo, blevet føjet til en app:
Hvis du vil bruge denne ressource i en app, skal du angive den i egenskaben Image til et Image-kontrolelement:
URI-adresser for billeder og andre medier
Du kan over grave en smule dybere til dette sidste eksempel ved at angive egenskaben Text til et Label-kontrolelement til nwindlogo. Etiketten viser en tekststreng:
Lærredapps refererer til hvert billede eller en anden mediefil, uanset om de er i skyen eller tilføjet som en appressource af en URI-adressetekststreng.
Egenskaben Image for et image-kontrolelement accepterer f.eks. ikke kun appressourcer, men også links til billeder på internettet, f.eks. "https://northwindtraders.com/logo.jpg". Egenskaben accepterer også indbyggede billeder, der bruger dataenes URI-adresseskema som i dette eksempel:
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAFAQMAAACtnVQoAAAABlBMVEUAAAB0J3UMNU6VAAAAAXRSTlMAQObYZgAAABRJREFUCNdjUGJgCGVg6GgAkkA2AA8/AffqCEBsAAAAAElFTkSuQmCC"
Den pågældende URI-adresse viser en skaleret udgave af to lilla diamanter:
Du kan få vist det sidst optagede billede i et Camera-kontrolelement, hvis du har indstillet egenskaben Image af et image-kontrolelement til egenskaben Photoi kamerakontrolelementet. Appen beholder billedet i hukommelsen, og egenskaben Photo for kameraets kontrolelement returnerer en URI-adressereference til billedet. Du kan f.eks. tage et billede, og egenskaben Photo i kameraet kan returnere "appres://blobmanager/7b12ffa2ea4547e5b3812cb1c7b0a2a0/1".
Du bruger en URI-adresse til at referere til et billede eller en anden mediefil, der er gemt i en database. På den måde henter appen ikke de faktiske data, før de rent faktisk skal bruges. En vedhæftet fil i en Microsoft Dataverse-tabel kan f.eks. returnere "appres://datasources/Contacts/table/..." Som i kameraets eksempel kan du få vist dette billede ved at indstille egenskaben Image for et image-kontrolelement til denne reference, der henter de binære data.
Når du gemmer en mediedatatype, f.eks. et billede, i en database, sender appen de faktiske billed- eller mediedata, ikke URI-adressereferencen.
Størrelsesgrænser
Som tekststrenge og URI-adresser har disse datatyper ingen forudindstillet grænse for deres længde.
De binære data, som disse datatyper refererer til, har heller ikke nogen forudindstillet grænse for størrelse. Et billede, som f.eks. er oprettet via kameraets kontrolelement, der nu refereres til som "appres://...", kan være så stor og have så høj en opløsning, som enhedens kamera kan håndtere. Opløsningen, rammehastigheden og andre attributter for mediefiler er ikke begrænset af datatypen, men specifikke kontrolelementer til afspilning og optagelse af medier kan have deres egne begrænsninger.
Alle datastørrelser er dog underlagt mængden af tilgængelig hukommelse i appen. Browsere, der kører på en stationær computer, understøtter typisk mere end 100 MB data. Mængden af tilgængelig hukommelse på en enhed, f.eks. en telefon, kan imidlertid være langt mindre, typisk i intervallet 30-70 MB. Du kan finde ud af, om appen kører inden for disse grænser, ved at teste almindelige scenarier på alle enheder, den skal køre på.
Den bedste fremgangsmåde er kun at opbevare data i hukommelsen så længe, det er nødvendigt. Upload billeder til en database, så snart du kan. Download kun billeder, når appens brugere anmoder om dem.
Tal
Bemærk
Power Apps understøtter kun Flydende i dag, og det er typen af alle tal. Decimalunderstøttelse vil snart blive tilføjet.
Power Fx understøtter to typer tal: Decimal og Flydende (med synonymer Tal og Valuta).
Decimal er bedst til de fleste forretningsberegninger. Den kan nøjagtigt repræsentere tal i basis 10, hvilket betyder, at 0.1
kan repræsenteres nøjagtigt og ikke afrundes under beregninger. Den har et stort udvalg nok til alle forretningsmæssige behov, op til 1028 med op til 28 præcisionscifre. Decimal er den numeriske standarddatatype for de fleste Power Fx værter, der bruges, hvis man blot skriver 2*2
.
Flyder er bedst til videnskabelige beregninger. Den kan repræsentere tal i et meget større område, dvs. op til 10308. Præcision er begrænset til 15 decimaler, og beregninger er baseret på basis 2, så de kan ikke repræsentere almindelige decimalværdier. Float har også højere ydeevne og foretrækkes, hvis det er en faktor, og præcision ikke er kritisk.
Decimaltal
Decimaldatatypen bruger som oftest .NET-decimaldatatype. Nogle værter, f.eks. Dataverse-formelkolonner, der køres i SQL Serer, bruger decimaldatatypen SQL Server.
Decimal laver matematik på samme måde, som du lærte i skolen, ved hjælp af 10 basiscifre. Det er meget vigtigt for at undgå afrundingsfejl fra meget små forskelle, der kan akkumuleres, når du bruger basis 2-math (som bruges af Flydende).
Omfanget går fra positiv 79,228,162,514,264,337,593,543,950,335 til negativ 79,228,162,514,264,337,593,543,950,335. Decimalseparatoren kan placeres alle steder i disse tal med op til 28 præcisionstal og stadig være repræsenteret. F.eks. kan 79,228,162,514,264.337593543950335 repræsenteres nøjagtigt på samme måde som 7.9228162514264337593543950335.
Flydende pointtal
Datatyperne Flydende kendes også som Tal eller Valuta og bruger IEEE 754 flydende pointstandard med dobbeltpræcision. Denne standard indeholder en lang række tal, som du kan bruge til at arbejde fra -1,79769 x 10308 til 1,79769 x 10308. Den mindste værdi, der kan repræsenteres, er 5 x 10-324.
Float kan nøjagtigt repræsentere hele tal (eller heltal) mellem –9,007,199,254,740,991 (–(253 – 1)) og 9,007,199,254,740,991 (253 – 1), inklusive. Dette område er større end de 32 bit (eller 4 byte) heltalsdatatyper, som databaser normalt bruger. Lærredapps kan imidlertid ikke repræsentere 64 bit (eller 8 byte) heltalsdatatyper. Du kan gemme tallet i et tekstfelt eller bruge en beregnet kolonne til at oprette en kopi af tallet i et tekstfelt, så det er knyttet til en Tekst-datatype i lærredappen. På denne måde kan du beholde, vise og angive disse værdier samt sammenligne dem for at afgøre, om de er ens. men du kan ikke udføre numeriske beregninger af dem i denne formular.
Flydende tal-aritmetik er omtrentligt, så det kan nogen gange give uventede resultater med mange dokumenterede eksempler. Du vil måske forvente, at formlen 55/100 * 100 returnerer præcis 55, og (55/100 * 100)-55 returnerer præcis nul. Den sidstnævnte formel returnerer dog 7,1054 x 10-15, hvilket er meget lille, men ikke nul. Denne lille forskel medfører ikke normalt et problem, og appen runder den væk, når resultatet vises. Små forskelle kan dog sammensættes i efterfølgende beregninger og se ud til at give det forkerte svar.
Databasesystemer gemmer ofte valutaer og udfører beregninger ved hjælp af decimalmatematik, hvilket giver et mindre interval, men større kontrol over præcisionen. Som standard knytter lærredapps valutaer til og ud af flydende tal-værdier. Resultatet kan derfor være anderledes end beregninger, der udføres i oprindelige decimaltaldatatype. Hvis der opstår problemer med denne typeuoverensstemmelse, kan du f.eks. arbejde med disse værdier som Tekst på samme måde, som du kan med store heltal, der er beskrevet tidligere i dette afsnit.
Standarder og konverteringer
Bemærk
Power Apps understøtter kun Flydende i dag, og det er typen af alle tal. Decimalunderstøttelse vil snart blive tilføjet.
De fleste Power Fx-værter bruger Decimal som standard. Dette påvirker:
- Literalnumre i formler. Antallet
1.234
opfattes som en decimalværdi. Formlen1.234 * 2
fortolkes f.eks. som1.234
og2
som Decimal og returnerer et Decimalresultat. - Valutafunktion.
Value( "1.234" )
returnerer en decimalværdi . FormlenValue( "1.234" ) * 2
Værdi fortolker f.eks. indholdet af tekststrengen"1.234"
som en Decimal.
Til at arbejde med Flydende værdier bruges funktionen Flydende. Hvis eksemplet udvides ovenfor Float( 1.234 )
, konverteres Decimal1.234
til Flydende. Float kan også bruges som en erstatning for Value til at konvertere en streng, der indeholder et flydende tal, f.eks. Float( "1.234" )
. til en Float-værdi , hvilket er påkrævet, hvis tallet ikke kan repræsenteres som et decimaltal.
Kort sagt:
Brug | Decimal | Flyde |
---|---|---|
Literalnumre i formler | 1.234 |
Float( 1.234 ) Float( "1.234" ) |
Konvertering fra tekststreng | Value( "1.234" ) Decimal( "1.234" ) |
Float( "1.234" ) |
Konvertering mellem numeriske typer | Decimal( float ) |
Float( decimal ) |
Konvertering til tekststreng | Text( decimal ) |
Text( float ) |
Blanding af numeriske typer
Flydende og decimale værdier kan blandes frit. Når blandede Decimalværdier konverteres til Flydende værdier, fordi området er større. Da dette kan resultere i tab af præcision, er det vigtigt ikke at blandet de to unødvendigt. Da Decimal er den bogstavelige standarddatatype, og de fleste numeriske funktioner bevarer typen, er det relativt nemt at undgå at flytte til Flydende uden at ønsker den.
Overvej f.eks. følgende beregning ved hjælp af pac power-fx repl
, når du har installeret Power Platform CLI. Da begge tal er Decimal-tal, foretages beregningen med Decimal-tal, og resultatet bevarer fuld præcision:
>> 1.0000000000000000000000000001 * 2
2.0000000000000000000000000002
Hvis den anden operand i stedet blev ændret til Flydende, ville hele beregningen ske i Flydende, og den lille brøkdel af beholdningen ville gå tabt:
>> 1.0000000000000000000000000001 * Float(2)
2
Dato, Klokkeslæt og DateTime
Tidszoner
Dato- og klokkeslætsværdier falder i disse kategorier:
- Brugerlokal: Disse værdier gemmes i UTC (Coordinated Universal Time), men appbrugerens tidszone påvirker, hvordan appen viser disse værdier, og hvordan appbrugeren angiver dem. Som eksempel vises det samme tidspunkt forskelligt for en bruger i Canada, end det vises for er en bruger i Japan.
- Tidszoneuafhængig: Appen viser disse værdier på samme måde, og appbrugeren angiver dem på samme måde, uanset tidszone. Det samme tidspunkt vises på samme måde for en bruger i Canada, som det vises for er en bruger i Japan. App-forfattere, der ikke forventer, at deres apps køres i forskellige tidszoner, bruger disse værdier, da de er mere simple at bruge.
I denne tabel vises nogle eksempler:
Dato/klokkeslætstype | Værdi gemt i databasen | Værdi vist og indtastet 7 timer vest af UTC | Værdi vist og indtastet 4 timer øst af UTC |
---|---|---|---|
Bruger lokal | Søndag d.19maj2019 4:00 |
Lørdag d.18.maj2019 21:00 |
Søndag d.19maj2019 8:00 |
Uafhængig af tidszone | Søndag d.19maj2019 4:00 |
Søndag d.19maj2019 4:00 |
Søndag d.19maj2019 4:00 |
For dato/klokkeslæt i Brugers lokaltid bruger lærredappen webbrowserens eller enhedens tidszone, men modelstyrede apps bruger brugerens indstilling i Dataverse. Disse indstillinger matcher typisk, men resultatet vil være forskellige, hvis disse indstillinger er forskellige.
Brug funktionerne DateAdd og TimeZoneInformation til at konvertere den lokale tid til UTC og tilbage igen. Se eksemplerne i slutningen af dokumentationen for disse funktioner.
Numeriske ækvivalenter
Lærredapps indeholder og beregner alle dato/klokkeslætsværdier, uanset om der bruges Brugers lokaltid eller Tidszoneuafhængig i UTC. Appen oversætter værdierne på baggrund af app-brugerens tidszone, når de vises, og når app-brugeren angiver dem.
Når en lærredapp læser en Tidszoneuafhængig værdi fra en datakilde eller skriver en sådan værdi til en datakilde, tilpasser appen automatisk værdien for at kompensere for app-brugerens tidszone. Derefter behandler appen værdien som en UTC-værdi, som er konsistent med alle andre dato/klokkeslætsværdier i appen. På grund af denne kompensation vises den oprindelige Tidszoneuafhængige værdi, når appen justerer UTC-værdien for app-brugerens tidszone.
Du kan se denne funktionsmåde mere tydeligt ved at bruge funktionen Value til at få adgang til den underliggende numeriske værdi for en dato/klokkeslætsværdi. Denne funktion returnerer dato/klokkeslætsværdien som antallet af millisekunder siden 1. januar 1970 00:00:00.000 UTC.
Da alle dato/klokkeslætsværdier er i UTC-tid, returnerer formlen Value( Date( 1970, 1, 1 ) ) ikke nul i de fleste dele af verden, fordi Date-funktionen returnerer en dato i UTC-tid. Formlen returnerer f.eks. 28.800.000 i en tidszone, der er forskudt fra UTC med otte timer. Dette tal afspejler antallet af millisekunder i otte timer.
Vend tilbage til eksemplet fra ovenfor:
Dato/klokkeslætstype | Værdi gemt i databasen | Værdi vist og indtastet 7 timer vest af UTC | Funktionen Value returnerer |
---|---|---|---|
Bruger lokal | Søndag d.19maj2019 4:00 |
Lørdag d.18.maj2019 21:00 |
1,558,238,400,000 (Søndag d.19maj2019 4:00 AM UTC) |
Uafhængig af tidszone | Søndag d.19maj2019 4:00 |
Søndag d.19maj2019 4:00 |
1,558,263,600,000 (Søndag d.19maj2019 11:00 AM UTC) |
Konvertering af UNIX-klokkeslæt
UNIX-klokkeslæt afspejler antallet af sekunder siden 1. januar 1970 00:00:00 UTC. Da lærredapps bruger millisekunder i stedet for sekunder, kan du konvertere mellem de to ved at multiplicere eller dividere med 1.000.
UNIX-klokkeslæt viser f.eks. 9. september 2001 kl. 01:46:40 UTC som 1.000.000.000. Hvis du vil have vist denne dato/klokkeslætsværdi på en lærredapp, skal du multiplicere det pågældende tal med 1.000 for at konvertere det til millisekunder og derefter bruge den i en Text-funktion. Formlen Text( 1000000000 * 1000, DateTimeFormat.UTC ) returnerer strengen 2001-09-09T 01:46:40.000Z.
Denne funktion returnerer dog lørdag 8. september 2001 18:46:40, hvis du bruger DateTimeFormat. LongDateTime24 -formatet i en tidszone, hvor der er 7 timers forskydning fra UTC (7 timer vest i forhold til UTC). Resultatet viser værdien DateTimekorrekt baseret på den lokale tidszone.
Hvis du vil konvertere til et UNIX-klokkeslæt, skal du dividere resultatet fra Værdi med 1.000:
RoundDown( Værdi( UnixTime ) / 1000, 0 )
Hvis du har brug for UNIX-klokkeslættet i en Dato-værdi for yderligere beregninger eller til at blive vist i Power Apps, skal du bruge denne formel:
DateAdd( Dato( 1970,1,1 ), UnixTime, Sekunder )
SQL Server
SQL Server har Datetime, Datetime2 og andre dato/klokkeslætsdatatyper, der ikke inkluderer en tidszone, og som ikke angiver, hvilken tidszone de er i. Lærredapps antager, at disse værdier gemmes i UTC og behandles som Brugers lokaltid. Hvis værdierne skal være tidszoneuafhængige, der er korrekte til UTC-konvertering, skal du bruge funktionen TimeZoneOffset.
Lærredpps bruger de inkluderede tidszoneoplysninger i felter Datetimeoffset, når en værdi konverteres til appens interne UTC-repræsentation. Apps bruger altid UTC som tidszone (nul tidszoneforskydning), når de skriver data.
Lærredapps læser og skriver værdier af datatypen Time i SQL Server som tekststrenge i ISO 8601-varighedsformatet . Du skal f.eks. fortolke strengformatet og bruge funktionen Time til at konvertere tekststrengen "PT2H1M39S" til en Time-værdi:
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)
Blande dato- og klokkeslætsoplysninger
Dato, klokkeslæt og klokkeslæt har forskellige navne, men de indeholder alle de samme oplysninger om datoer og klokkeslæt.
En Dato-værdi kan indeholde oplysninger om klokkeslæt, som normalt er midnat. En Klokkeslæt-værdi kan indeholde datooplysninger, som normalt er 1. januar 1970. Dataverse gemmer også tidsoplysninger i et Kun dato-felt, men viser kun datooplysningerne som standard. På samme måde skelner lærredapps sommetider mellem disse datatyper for at bestemme standardformater og kontrolelementer.
Det anbefales ikke at tilføje og fratrække dato- og klokkeslætsværdier direkte, da tidszoner og andre konverteringer kan medføre forvirrende resultater. Du kan bruge funktionen Value til at konvertere dato/klokkeslætsværdier til millisekunder først og tage højde for app-brugerens tidszone, eller du kan bruge funktionerne DateAdd og DateDiff til at addere til eller subtrahere fra en af disse værdier.
Valgmuligheder og Ja/Nej
Valgmuligheder og datatyper med to indstillinger giver en appbruger to eller flere valgmuligheder. Et valg af Ordrestatus kan f.eks. tilbyde valgmulighederne Ny, Leveret, Faktureret og Lukket. Datatypen med to indstillinger giver kun to valgmuligheder.
I begge disse datatyper vises deres etiketter i en tekststrengkontekst. Et etiketkontrolelement viser f.eks. en af indstillingerne for ordrestatus, hvis objektets egenskab Text er angivet til en formel, der refererer til det pågældende valg. Indstillingsetiketter kan være lokaliserede til app-brugere forskellige steder.
Når en appbruger vælger en indstilling og gemmer ændringen, overfører appen dataene til databasen, som lagrer de pågældende data i en repræsentation, der er uafhængig af sproget. En indstilling i et valg overføres og gemmes som et tal, og en indstilling i en datatype med to indstillinger overføres og gemmes som en boolesk værdi.
Etiketterne er kun til visningsformål. Du kan ikke udføre direkte sammenligning med etiketterne, fordi de er specifikke for et bestemt sprog. De enkelte valg indeholder i stedet en fasttekst, der fungerer sammen med det underliggende tal eller den booleske værdi. Du kan f.eks. ikke bruge denne formel:
If( ThisItem.OrderStatus = "Active", ...
Men du kan bruge denne formel:
If( ThisItem.OrderStatus = OrderStatus.Active, ...
I forbindelse med globale valg (som tabeller deler) svarer navnet på fastteksten i den grupperede indstilling til navnet på det globale valg. Hvis det er lokale valg (som er overført til en tabel), kan navnet indeholde navnet på tabellen. Denne funktionsmåde forhindrer konflikter, hvis flere tabeller har valgmuligheder med samme navn. Tabellen Konti kan f.eks. have valget Ordrestatus, og dens navn kan være Ordrestatus (Konti). Navnet indeholder et eller flere mellemrum og parenteser, så du skal omslutte det med enkelte anførselstegn, hvis du refererer til det i en formel.
Derudover kan værdier med to indstillinger også opføre sig som booleske værdier. En værdi for to indstillinger med navnet TaxStatus kan f.eks. have etiketter Afgiftspligtig og Ikke afgiftspligtig, som svarer til hhv. sand og falsk. Du kan f.eks. bruge denne formel:
If( ThisItem.Taxable = TaxStatus.Taxable, ...
Du kan også bruge denne tilsvarende formel:
If( ThisItem.Taxable, ...