Datatyper
Merk
Microsoft Power Fx er det nye navnet på formelspråket for lerretsapper. Disse artiklene er arbeid som pågår når vi trekker ut språket fra lerretsapper, integrerer det med andre Microsoft Power Platform-produkter og gjør det tilgjengelig som åpen kildekode. Begynn med Microsoft Power Fx-oversikt for å få en innføring i språket.
Informasjon flyter gjennom en app i små, diskrete verdier, mye på samme måte som cellene i et regneark. Data i et Fødselsdag-felt og et Merkedag-felt ville for eksempel flyten flyte gjennom som en Dato-verdi som inkluderer årstallet, måneden og dagen. Appen vet hvordan den skal formatere disse verdiene, begrense inndata til hva som passer for hver av dem, og dele verdiene med en database. Fødselsdager er forskjellig fra merkedager for personer, men systemet håndterer dem på nøyaktig samme måte. I dette tilfellet er Dato et eksempel på en datatype.
Denne artikkelen inneholder detaljer for datatypene som støttes av lerretsappene. Når en app kobles til en ekstern datakilde, tilordnes hver datatype i denne kilden til en datatype for lerretsapper.
Datatype | Beskrivelse | Eksempler |
---|---|---|
boolsk | En sann eller usann verdi. Kan brukes direkte i If, Filter og andre funksjoner uten en sammenligning. | sann |
Farge | En fargespesifikasjon, inkludert en alfakanal. | Farge.Rød ColorValue( "#102030" ) RGBA( 255, 128, 0, 0,5 ) |
Valuta | En valutaverdi som lagres i et flyttall. Valutaverdier er de samme som tallverdier med valutaformateringsalternativer. | 123 4.56 |
Daddel | En dato uten klokkeslett i tidssonen til appens bruker. | Dato( 2019, 5, 16 ) |
Dato/klokkeslett | En dato med klokkeslett i tidssonen til appens bruker. | DateTimeValue( "16. mai 2019 1:23:09 PM" ) |
Desimal | Et tall med høy presisjon, base 10-operasjoner og begrenset område. | 123 Desimal( "1.2345" ) |
GUID | En globalt unik identifikator. | GUID() GUID( "123e4567-e89b-12d3-a456-426655440000" ) |
Hyperkobling | En tekststreng som inneholder en hyperkobling. | «https://powerapps.microsoft.com" |
Bilde | En URI (Uniform Resource Identifier)-tekststreng til et bilde i JPEG-, PNG-, SVG-, GIF- eller annet felles webbilde-format. | MyImage lagt til som en appressurs «https://northwindtraders.com/logo.jpg" «appres://blobmanager/7b12ffa2...» |
Media | En URI-tekststreng til et video- eller lydopptak. | MyVideo lagt til som en appressurs «https://northwindtraders.com/intro.mp4" «appres://blobmanager/3ba411c...» |
Tall eller flyt | Et tall med standard presisjon, base 2-operasjoner og et bredt område. | 123 8.903e121 1.234e200 |
Valg | Et valg fra et sett med alternativer, som er støttet av et nummer. Denne datatypen kombinerer en tekstetikett som kan lokaliseres, med en numerisk verdi. Etiketten vises i appen, og den numeriske verdien lagres og brukes ved sammenligninger. | ThisItem.OrderStatus |
Rekord | En oppføring med dataverdier. Denne sammensatte datatypen inneholder forekomster av andre datatyper som er oppført i dette emnet. Mer informasjon: Arbeide med tabeller. | { Selskap: "Northwind Traders", Ansatte: 35, Ideelle organisasjoner: usann } |
Referanse til oppføring | En referanse til en oppføring i en tabell. Slike referanser brukes ofte med polymorfiske oppslag. Mer informasjon: Arbeide med referanser. | Først(Kontoer). Eier |
Bord | En tabell med oppføringer. Alle oppføringene må ha samme navn for feltene med de samme datatypene, og utelatte felt behandles som tomme. Denne sammensatte datatypen inneholder forekomster av andre datatyper som er oppført i dette emnet. Mer informasjon: Arbeide med tabeller. | Tabell( { Fornavn: "Sidney", LastName: "Higa" }, { FirstName: "Nancy", LastName: "Anderson" } ) |
Tekst | En Unicode-tekststreng. | «Hei, verden» |
Tid | Et klokkeslett uten data i tidssonen til appens bruker. | Tid( 11, 23, 45 ) |
To alternativer | Et valg fra et sett med to alternativer, som er støttet av en boolsk verdi. Denne datatypen kombinerer en tekstetikett som kan lokaliseres, med en boolsk verdi. Etiketten vises i appen, og den boolske verdien lagres og brukes ved sammenligninger. | ThisItem.Skattepliktig |
typeløst objekt | Et objekt av en ikkedeklarert type. Det underliggende objektet kan være en eksisterende type, og kan konverteres til kompatible typer ved hjelp av funksjoner som Boolsk(), Verdi(), Tabell() osv. Hvis du vil ha mer informasjon, kan du se Objekt uten type og Arbeide med JSON. | ParseJSON("{ ""Felt"" : 1234 }"). Felt |
Mange av disse datatypene er de samme, og har samme underliggende representasjon, for eksempel et Hyperkobling-felt som behandles som Tekst. Tilleggsdatatypene gir bedre standardopplevelser i skjemaer og andre kontroller.
Blank
Alle data typer kan ha verdien tom (med andre ord ingen verdi). Begrepet "null" brukes ofte i databaser for dette konseptet.
Bruk Blank-funksjonen med funksjonen Set eller Patch til å angi at en variabel eller et felt skal tom. Set( x, Blank() ) fjerner for eksempel alle verdier i den globale variabelen x.
Test for en blank-verdi ved hjelp av IsBlank-funksjonen. Erstatt mulige tomme verdier med ikke-tomme verdier ved hjelp av Coalesce-funksjonen.
Ettersom alle datatyper støtter blank, har datatypen Boolsk og To alternativer effektivt tre mulige verdier.
Tekst, hyperkobling, bilde og media
Alle disse fire datatypene er basert på en Unicode-tekststreng.
Innebygd tekst
Innebygde tekststrenger i en formel er omsluttet av doble anførselstegn. Bruk to doble anførselstegn sammen til å representere et enkelt dobbelt anførselstegn i tekststrengen. Bruk for eksempel følgende formel i OnSelect-egenskapen for en Button-kontroll:
Notify( "Jane said ""Hello, World!""" )
resulterer i et banner når knappen trykkes, der første og siste doble anførselstegn utelates (siden de avgrenser tekststrengen) og de gjenta doble anførselstegnene rundt Hello, World! erstattes av ett enkelt dobbelt anførselstegn:
Enkle anførselstegn brukes for identifikatornavn som inneholder spesialtegn og ikke har noen spesiell betydning i en tekststreng.
strenginterpolasjon
Bruk strenginterpolasjon til å bygge inn formler i en tekststreng. Dette er ofte enklere å arbeide med og visualisere utdataene enn å bruke Concatenate-funksjonen eller &-operatoren.
Bruk et dollartegn $ som prefiks for tekststrengen, og sett formelen i klammeparenteser { }. Hvis du vil ta med en klammeparentes i tekststrengen, gjentar du klammeparentesene: {{ eller }}. Strenginterpolasjon kan brukes hvor som helst der en standard tekststreng kan brukes.
Du kan for eksempel vurdere denne formelen med de globale variablene Apples satt til 3 og Bananas satt til 4:
$"We have {Apples} apples, {Bananas} bananas, yielding {Apples+Bananas} fruit total."
Denne formelen returnerer tekststrengen Vi har 3 epler, 4 kasser, og det gir totalt 7. Variablene Apples og Bananas settes inn i teksten som erstatter klammeparenteser, sammen med resultatet av den formelforklaringsformelen Apples+Bananas+. Mellomrom og andre tegn rundt klammeparentesene beholdes slik de er.
Innebygde formler kan inneholde alle funksjoner eller operatorer. Alt som kreves, er at resultatet av formelen kan tvinges til en tekststreng. Denne formelen setter for eksempel inn NickName hvis det angis, eller FirstName hvis ikke, i en hilsen:
$"Welcome {Coalesce( NickName, FirstName )}, it's great to meet you!" )
Hvis «Joe» angis for NickName, gir denne formelen tekststrengen Welcome Joe, it's great to meet you!. Hvis NickName imidlertid er tomt og FirstName er "Joseph", blir resultatet av denne formelen Dear Joseph, great to meet you! i stedet.
Strenginterpolasjon kan omfatte standard tekststrenger i den innebygde formelen. Hvis for eksempel verken NickName eller FirstName hadde blitt angitt, kunne vi likevel ha angitt "Venn" som en erstatning:
$"Welcome {Coalesce( NickName, FirstName, "Friend" )}!"
Strenginterpolasjoner kan til og med nestes. Se dette eksemplet, der First, Middle og Last kombineres til en hilsning. Selv om én eller to av disse verdiene er tomme, blir det riktig antall mellomrom mellom navnedelene. Hvis ingen av delene angis, skjules den indre strenginterpolasjonen og erstattes av Coalesce-funksjonen av "Friend".
$"Welcome {Coalesce( Trim( $"{First} {Middle} {Last}"}), "Friend" )}!"
First | Middle | Last | Resultat |
---|---|---|---|
John | Qunicy | Doe | Welcome John Quincy Doe! |
John | blank | Doe | Welcome John Doe! |
blank | blank | Doe | Welcome Doe! |
blank | blank | blank | Welcome Friend! |
Linjeskift
Innebygde tekststrenger kan inneholde linjeskift. Du kan for eksempel vurdere å sette Text-egenskapen til en Label-kontroll til følgende:
"Line 1
Line 2
Line 3"
Formelen ovenfor gir tre linjer som vises i etikettkontrollen:
Linjeskift støttes også med strenginterpolasjon, som vist nedenfor:
$"Line {1}
Line {1+1}
Line {1+1+1}"
Formelen ovenfor gir samme utdata:
Bilde- og medieressurser
På Fil-menyen kan du legge til bilde-, video- og lydfiler som appressurser. Navnet på den importerte filen blir ressursnavnet i appen. I denne grafikken er Gastronor Delikatesser-logoen, som kalles nwindlogo, blitt lagt til i en app:
Hvis du vil bruke denne ressursen i en app, angir du den i Image-egenskapen for en Image-kontroll:
URIer for bilder og andre medier
Du kan se nærmere på det siste eksemplet ved å sette Text-egenskapen for en Label-kontroll til nwindlogo. Etiketten viser en tekststreng:
Lerretsapper refererer til hvert bilde eller en annen mediefil, enten det er i skyen eller lagt til som en appressurs, av en URI-tekststreng.
Image-egenskapen til en bildekontroll godtar for eksempel ikke bare appressurser, men også koblinger til bilder på World Wide Web, for eksempel https://northwindtraders.com/logo.jpg". Egenskapen godtar også innebygde bilder som bruker data-URI-skjemaet, for eksempel følgende:
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAFAQMAAACtnVQoAAAABlBMVEUAAAB0J3UMNU6VAAAAAXRSTlMAQObYZgAAABRJREFUCNdjUGJgCGVg6GgAkkA2AA8/AffqCEBsAAAAAElFTkSuQmCC"
Denne URIen viser en skalert versjon av to lilla diamanter:
Du kan vise det nyeste bildet som er registrert i en Camera-kontroll, hvis du angir Image-egenskapen for en bildekontroll til Photo-egenskapen til kamerakontrollen. Appen beholder bildet i minnet, og Photo-egenskapen til kamerakontrollen returnerer en URI-referanse til bildet. Du kan for eksempel ta et bilde, og kameraets Photo-egenskap kan returnere "appres://blobmanager/7b12ffa2ea4547e5b3812cb1c7b0a2a0/1".
Du bruker en URI til å referere til et bilde eller en annen mediefil som er lagret i en database. På denne måten henter ikke appen de faktiske dataene før det faktisk er nødvendig. Et vedlegg i en Microsoft Dataverse-tabell kan for eksempel returnere "appres://datasources/Contacts/table/..." Som i kameraeksemplet kan du vise dette bildet ved å sette egenskapen Image for en bildekontroll til denne referansen, slik at de binære dataene hentes.
Når du lagrer en mediedatatype, for eksempel et bilde, i en database, sender appen selve bilde- eller mediedataene, ikke URI-referansen.
Størrelsesbegrensninger
Som tekststrenger og URIer har ikke disse datatypene noen forhåndsdefinert grense på lengden.
De binære dataene som disse datatypene refererer til, har heller ingen forhåndsdefinert grense på størrelse. Et bilde som for eksempel er tatt via kamerakontrollen som nå refereres til som "appres://...", kan ha så stor og høy oppløsning som kameraet til enheten kan håndtere. Oppløsningen, bildefrekvensen og andre attributter for mediefiler er ikke begrenset av datatypen, men spesifikke kontroller for avspilling og registrering av medier kan ha sine egne begrensninger.
Alle datastørrelser kan imidlertid være underlagt mengden tilgjengelig minne i appen. Weblesere som kjører på en stasjonær datamaskin, støtter vanligvis mer enn 100 MB data. Mengden tilgjengelig minne på en enhet, for eksempel en telefon, kan imidlertid være langt lavere, vanligvis i området 30-70 MB. Hvis du vil finne ut om appen skal kjøre innenfor disse grensene, tester du vanlige scenarier på alle enheter den skal kjøres på.
Som en god fremgangsmåte bør du bare beholde data i minnet så lenge som nødvendig. Last opp bilder til en database så snart du kan; last bare ned bilder når appens bruker ber om det.
Tall
Merk
Power Apps støtter bare Float i dag, og det er typen av alle tall. Desimalstøtte vil bli lagt til snart.
Power Fx støtter to typer tall: Decimal og Float (med synonymer Number og Valuta).
Desimal er best for de fleste forretningsberegninger. Den kan representere tall i base 10 noe som betyr at 0.1
kan representeres nøyaktig og ikke vil være utsatt for avrundingsfeil under beregninger. Den har et stort nok område for alle forretningskrav, opptil 1028 med presisjon på opptil 28 sifre. Desimal er standard numerisk datatype for de fleste Power Fx verter, brukt hvis man bare skriver 2*2
.
Float er best for vitenskapelige beregninger. Den kan representere tall i et mye større område, opptil 10308. Presisjonen er begrenset til 15 desimalplasser, og presisjonen er basert på base 2, så den kan ikke representere noen vanlige desimalverdier nøyaktig. Float har også høyere ytelse og foretrekkes hvis det er en faktor og presisjon ikke er kritisk.
Desimaltall
Decimal-datatypen bruker oftest .NET-desimaldatatypen. Enkelte verter, for eksempel Dataverse-formelkolonner som kjøres i SQL Server, bruker desimaldatatypen for SQL Server.
Desimal gjør matematikk slik du lærte på skolen, ved å bruke grunnleggende 10 sifre. Det er svært viktig for å unngå avrundingsfeil fra svært små forskjeller som kan akkumuleres ved bruk av base 2-matte (som brukt av Float).
Området er fra positivt 79,228,162,514,264,337,593,543,950,335 til negativt 79,228,162,514,264,337,593,543,950,335. Desimalskilletegnet kan plasseres hvor som helst innenfor disse tallene og gi presisjon på opptil 28 sifre, og er likevel nøyaktig representert. 79,228,162,514,264.337593543950335 kan for eksempel være nøyaktig representert, og det samme kan 7.9228162514264337593543950335.
Flyttall
Float-datatypen, også kjent som Number eller Currency bruker IEEE 754-standarden flytpunktverdi med dobbel presisjon. Denne standarden gir et stort utvalg av tall å jobbe i, fra –1,79769 x 10308 til 1,79769 x 10308. Den minste verdien som kan representeres, er 5 x 10–324.
Float kan nøyaktig representere hele tall (eller heltall) mellom –9,007,199,254,740,991 (–(253 – 1)) og 9,007,199,254,740,991 (253 – 1), inkludert. Dette området er større enn 32-biters (eller 4-biters) heltallsdatatypene som databaser bruker ofte. Lerretsapper kan imidlertid ikke representere heltallsdatatypene 64-biters (eller 8-biters). Det kan hende du vil lagre tallet i et tekstfelt eller bruke en beregnet kolonne til å lage en kopi av tallet i et tekstfelt, slik at det blir tilordnet til en Tekst-datatype i lerretsappen. På denne måten kan du beholde, vise og angi disse verdiene samt sammenligne dem for å finne ut om de er like. Du kan imidlertid ikke utføre numeriske beregninger i dette skjemaet.
Flyttallsaritmetikk er omtrentlig, så den kan noen ganger gi uventede resultater med mange dokumenterte eksempler. Det kan hende du forventer at formelen 55 / 100 * 100 returnerer nøyaktig 55 og (55 / 100 * 100) - 55 til å returnere nøyaktig null. Den siste formelen returnerer imidlertid 7,1054 x 10–15, som er svært liten, men ikke null. Denne lille forskjellen fører vanligvis ikke til et problem, og appen runder den vekk ved visning av resultatet. Små forskjeller kan imidlertid være sammensatt i etterfølgende beregninger og synes å gi feil svar.
Databasesystemer lagrer ofte valutaer og utfører beregninger ved hjelp av desimal matematikk, som gir et mindre område, men større kontroll over presisjonen. Som standard tilordner lerretsapper valutaer i og utenfor flyttallsverdier. Resultatet kan derfor avvike fra beregninger som er gjort i en opprinnelig desimaldatatype. Hvis denne typen uoverensstemmelser fører til problemer, kan det hende du vil arbeide med disse verdiene som Tekst, på samme måte som med store heltall som er beskrevet tidligere i denne delen.
Standarder og konverteringer
Merk
Power Apps støtter bare Float i dag, og det er typen av alle tall. Desimalstøtte vil bli lagt til snart.
De fleste Power Fx-verter bruker Decimal som standard. Dette har innvirkning på følgende:
- Litterale tall i formler. Tallet
1.234
tolkes som en desimalverdi. Formelen1.234 * 2
tolker for eksempel1.234
og2
som desimal og returnerer et desimalresultat. - Value-funksjon.
Value( "1.234" )
returnerer en desimalverdi . FormelenValue( "1.234" ) * 2
Value-funksjonen tolker for eksempel innholdet i tekststrengen"1.234"
som desimal.
Float-funksjonen brukes til å arbeide med Float-verdier. Hvis du utvider eksemplet over, konverterer Float( 1.234 )
desimalen 1.234
til Float. Flyttall kan også brukes som erstatning for verdi for å konvertere en streng som inneholder et flyttall, for eksempel Float( "1.234" )
til en flyttallverdi , noe som kreves hvis tallet ikke kan representeres som en desimal.
Sammendrag:
Bruk | Desimal | Flyte |
---|---|---|
Litterale tall i formler | 1.234 |
Float( 1.234 ) Float( "1.234" ) |
Konvertering fra tekststreng | Value( "1.234" ) Decimal( "1.234" ) |
Float( "1.234" ) |
Konvertering mellom numeriske typer | Decimal( float ) |
Float( decimal ) |
Konvertering til tekststreng | Text( decimal ) |
Text( float ) |
Blanding av numeriske typer
Flyttall - og desimalverdier kan blandes fritt. Ved blandet konverteres desimalverdier til flyttallsverdier på grunn av det større området. Siden dette kan føre til tap av presisjon, er det viktig å ikke bland de to unødvendig. Siden desimal er datatypen som er standard, og de fleste numeriske funksjoner beholder typen, er det relativt enkelt å unngå å flytte til flyttall uten å ville det.
Vurder for eksempel følgende beregning ved hjelp av pac power-fx repl
etter installasjon av Power Platform CLI. I og med at begge tallene er desimaler, utføres beregningen i desimal, og resultatet beholder full presisjon:
>> 1.0000000000000000000000000001 * 2
2.0000000000000000000000000002
Hvis den andre operanden i stedet ble endret til Float, ville hele beregningen blitt utført i Float, og den brøkdelen ville gått tapt:
>> 1.0000000000000000000000000001 * Float(2)
2
Dato og klokkeslett og Dato/klokkeslett
Tidssoner
Dato/klokkeslett-verdier er i disse kategoriene:
- Brukerlokal: Disse verdiene lagres i UTC (Coordinated Universal Time), men appbrukerens tidssone påvirker hvordan appen viser disse verdiene og hvordan appbrukeren spesifiserer dem. Som et eksempel vises samme øyeblikk annereledes for en bruker i Canada enn for en bruker i Japan.
- Tidssoneuavhengig: Appen viser disse verdiene på samme måte, og appbrukeren angir dem på samme måte, uavhengig av tidssone. Det samme øyeblikket vises likt for en bruker i Canada og en bruker i Japan. Appforfattere som ikke forventer at apper skal kjøres i forskjellige tidssoner, bruker disse verdiene fordi de generelt er enklere.
Denne tabellen viser noen eksempler:
Dato/klokkeslett-type | Verdi lagret i databasen | Verdi vist og angitt 7 timer vest for (UTC) | Verdi vist og angitt 4 timer øst for (UTC) |
---|---|---|---|
Bruker lokal | Søndag,19.mai2019 4:00 |
Lørdag,18.mai2019 00:00 |
Søndag,19.mai2019 8:00 |
Tidssoneuavhengig | Søndag,19.mai2019 4:00 |
Søndag,19.mai2019 4:00 |
Søndag,19.mai2019 4:00 |
For Brukerlokal dato/klokkeslett bruker lerretsapper tidssonen til nettleseren eller enheten, men modelldrevne apper bruker brukerens innstillinger i Dataverse. Disse innstillingene samsvarer vanligvis, men resultatene vil være forskjellige hvis disse innstillingene er forskjellige.
Bruk funksjonene DateAdd og TimeZoneInformation til å konvertere lokal tid til UTC og tilbake igjen. Se eksemplene på slutten av dokumentasjonen for disse funksjonene.
Numeriske ekvivalenter
Lerretsapper inneholder og beregner alle verdier for dato/klokkeslett, både Brukerlokal eller Tidssoneuavhengig i UTC. Appen oversetter verdiene basert på appbrukerens tidssone når de vises, og når appbrukeren angir dem.
Når en lerretsapp leser en Tidssoneuavhengig-verdi fra en datakilde eller skriver en slik verdi til en datakilde, justerer appen automatisk verdien for å kompensere for tidssonen til appens bruker. Deretter behandler appen verdien som en UTC-verdi, og samsvarer med alle andre dato/klokkeslett-verdier i appen. På grunn av denne kompensasjonen, vises den opprinnelige Tidssoneuavhengig-verdien når appen justerer UTC-verdien for tidssonen til appbrukeren.
Du kan se nærmere på denne virkemåten ved å bruke Value-funksjonen til å få tilgang til den underliggende numeriske verdien for en dato/klokkeslett-verdi. Denne funksjonen returnerer dato/klokkeslett-verdien som antallet millisekunder siden 1. januar 1970 00:00:00.000 UTC.
Fordi hver dato/klokkeslett-verdi holdes i UTC, vil ikke formelen Value( Date( 1970, 1, 1 ) ) returnere null i de fleste deler av verden fordi Date-funksjonen returnerer en dato i UTC. Formelen ville for eksempel returnere 28,800,000 i en tidssone som forskyves fra UTC med åtte timer. Dette antallet gjenspeiler antall millisekunder i åtte timer.
Vi går tilbake til eksemplene våre over:
Dato/klokkeslett-type | Verdi lagret i databasen | Verdi vist og angitt 7 timer vest for (UTC) | Verdifunksjon returnerer |
---|---|---|---|
Bruker lokal | Søndag,19.mai2019 4:00 |
Lørdag,18.mai2019 00:00 |
1,558,238,400,000 (Søndag,19.mai2019 4:00 UTC) |
Tidssoneuavhengig | Søndag,19.mai2019 4:00 |
Søndag,19.mai2019 4:00 |
1,558,263,600,000 (Søndag,19.mai2019 11:00 UTC) |
Konvertere Unix-tider
Unix-tider gjenspeiler antall sekunder siden 1. januar 1970 00:00:00 UTC. Siden lerretsapper bruker millisekunder i stedet for sekunder, kan du konvertere mellom de to ved å multiplisere eller dele med 1 000.
Unix-tid viser for eksempel 9. september 2001, 01:46:40 UTC som 1,000,000,000. Hvis du vil vise denne dato/klokkeslett-verdien i en lerretsapp, multipliserer du dette tallet med 1 000 for å konvertere den til millisekunder, og deretter bruker du den i en Text-funksjon. Formelen Text( 1000000000 * 1000, DateTimeFormat.UTC ) returnerer strengen 2001-09-09T01:46:40.000Z.
Denne funksjonen returnerer imidlertid Lørdag, 8. september 2001 18:46:40 hvis du bruker DateTimeFormat.LongDateTime24-formatet i en tidssone som er -7 timer forskjøvet fra UTC (7 timer vest for UTC). Dette resultatet viser DateTime-verdien riktig basert på den lokale tidssonen.
Hvis du vil konvertere til en Unix-tid, deler du resultatet fra Verdi med 1 000:
RoundDown( Verdi( UnixTime ) / 1000, 0 )
Hvis du vil ha Unix-tid i en Dato-verdi for videre beregning eller visning i Power Apps, kan du bruke denne formelen:
DateAdd( Dato( 1970,1,1 ), UnixTime, Sekunder )
SQL Server
SQL Server har Datetime, Datetime2 og andre datatyper for dato/klokkeslett som ikke inneholder en tidssoneforskyvning, og som ikke angir hvilken tidssone de er i. Lerretsapper forutsetter at disse verdiene er lagret i UTC og behandler dem som Brukerlokal. Hvis verdiene er ment som tidssoneuavhengige, retter du dem mot UTC-oversettelsene ved hjelp av TimeZoneOffset-funksjonen.
På lerretsapper brukes den inkluderte tidssoneinformasjonen i Datetimeoffset-felt når en verdi konverteres til appens interne UTC-representasjon. Appene bruker alltid UTC som tidssonen (null tidssoneforskyvning) når de skriver data.
Lerretsapper leser og skriver verdier av Klokkeslett-datatypen i SQL Server som tekststrenger i varighetsformatet ISO 8601. Du må for eksempel analysere dette strengformatet og bruke Time-funksjonen til å konvertere tekststrengen "PT2H1M39S" til en klokkeslett-verdi:
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 informasjon om dato og klokkeslett
Date, Time og DateTime har forskjellige navn, men de har alle den samme informasjonen om datoer og klokkeslett.
En dato-verdi kan inneholde informasjon om tid, som vanligvis er midnatt. En klokkeslett-verdi kan inneholde datoinformasjon, som vanligvis er 1. januar 1970. Dataverse lagrer også informasjon om klokkeslett med et Bare dato-felt, men viser bare datoinformasjonen som standard. På samme måte skiller lerretsapper noen ganger mellom disse datatypene for å fastsette standard formater og kontroller.
Det anbefales ikke å legge til og trekke fra verdier for dato og klokkeslett direkte, fordi tidssoner og andre konverteringer kan forårsake forvirrende resultater. Du kan enten bruke Value-funksjonen til å konvertere dato/klokkeslett-verdier til millisekunder først, og ta hensyn til appbrukerens tidssone, eller du kan bruke funksjonene DateAdd og DateDiff til å legge til eller trekke fra en av disse verdiene.
Valg og Ja/Nei
Valg og datatyper med to alternativer gir to eller flere valg som en appbruker kan velge. Et valg for Ordrestatus kan for eksempel by på valgene Ny, Levert, Fakturert og Lukket. Datatypen for to alternativer har bare to valg.
Begge disse datatypene viser etikettene i en tekststrengkontekst. En etikettkontroll viser for eksempel ett av alternativene for ordrestatus hvis Text-egenskapen for kontrollen er satt til en formel som refererer til dette valget. Alternativetiketter kan være lokalisert for appbrukere på ulike steder.
Når en appbruker velger et alternativ og lagrer denne endringen, overfører appen dataene til databasen, som lagrer dataene i en representasjon som er uavhengig av språket. Et alternativ i et valg overføres og lagres som et tall, og et alternativ i en datatype med to alternativer overføres og lagres som en boolsk verdi.
Etikettene er bare til visningsformål. Du kan ikke utføre direkte sammenligninger med etikettene fordi de er spesifikke for et språk. I stedet har hvert valg en opplisting som fungerer med det underliggende tallet eller den boolske verdien. Du kan for eksempel ikke bruke denne formelen:
If( ThisItem.OrderStatus = "Active", ...
Du kan imidlertid bruke følgende formel:
If( ThisItem.OrderStatus = OrderStatus.Active, ...
Når det gjelder globale valg (som tabeller deler), samsvarer navnet på opplistingen for alternativsett med navnet på det globale valget. Når det gjelder lokale valg (som er begrenset til en tabell), kan navnet inneholde navnet på tabellen. Denne virkemåten gjør at konflikter unngås hvis flere tabeller har valg med like navn. Tabellen Forretningsforbindelser kan for eksempel ha et valg for Ordrestatus, og navnet kan være Ordrestatus (forretningsforbindelser). Det navnet inneholder ett eller flere mellomrom og parenteser, så du må omslutte det med enkle anførselstegn hvis du refererer til det i en formel.
I tillegg kan to alternativer-verdier også oppføre seg som boolske verdier. En verdi med to alternativer kalt TaxStatus, kan for eksempel ha etikettene Avgiftspliktig og Ikke avgiftspliktig, som samsvarer med henholdsvis sann og usann. Du kan for eksempel bruke denne formelen:
If( ThisItem.Taxable = TaxStatus.Taxable, ...
Du kan også bruke denne tilsvarende formelen:
If( ThisItem.Taxable, ...