Datatyper

Kommentar

Microsoft Power Fx är det nya namnet på formelspråket för arbetsyteappar. Dessa artiklar är ett arbete som pågår när vi extraherar språket från program, integrerar det med andra Microsoft Power Platform produkter och gör det tillgängligt som öppen källkod. Börja med Microsoft Power Fx översikten för en introduktion till språket.

Informationen flödar via ett program i små, diskreta värden, ungefär som cellerna i ett kalkylblad. Till exempel data i fältet Födelsedag och fältet Årsdag skulle till exempel kunna passera som värdet Datum som omfattar året, månaden och dagen. programmet vet hur de här värdena ska formateras, begränsar indata till vad som passar för varje och delar värden med en databas. Födelsedagar skiljer sig från årsdagarna till människor, men systemet hanteras på exakt samma sätt. I det här fallet är Datum är ett exempel på en datatyp.

Den här artikeln innehåller information för de datatyper som stöds av arbetsyteappar. När ett program ansluter till en extern datakälla mappas varje datatyp i den källan till en datatyp för arbetsyteappar.

Datatyp Beskrivning Exempel
Boolesk Ett värde för true eller false. Kan användas direkt i If, filter och andra funktioner utan jämförelse. true
Färg En färgspecifikation, inklusive en alfakanal. Color.Red
ColorValue( "#102030" )
RGBA( 255, 128, 0, 0.5 )
Valuta Ett valutavärde som lagras i ett flyttal. Valutavärden är samma som numeriska värden med alternativ för valutaformat. 123
4,56
Datum Ett datum utan tid, i tidszonen för programmets användare. Date( 2019, 5, 16 )
DatumTid Ett datum med en tid, i tidszonen för programmets användare. DateTimeValue( "May 16, 2019 1:23:09 PM" )
Decimal Ett tal med hög precision, bas 10-åtgärder och ett begränsat intervall. 123
Decimal( "1.2345" )
GUID En globalt unik identifierare. GUID()
GUID( "123e4567-e89b-12d3-a456-426655440000" )
Hyperlänk En textsträng som innehåller en hyperlänk. "https://powerapps.microsoft.com"
Image En Universal Resource Identifier (URI) textsträng till en bild i .jpeg, .png, .svg, .gif eller or något annat vanligt webbbildformat. Mina bilder har lagts till som en programresurs
"https://northwindtraders.com/logo.jpg"
"appres://blobmanager/7b12ffa2..."
Medium En URI-textsträng till en inspelning med video eller ljud. MyVideo har lagts till som en programresurs
"https://northwindtraders.com/intro.mp4"
"appres://blobmanager/3ba411c..."
Number eller Flyttal Ett tal med standardprecision, bas 2-åtgärder och ett brett intervall. 123
8.903e121
1.234e200
Val Ett alternativ från en uppsättning alternativ, med ett nummer. Den här datatypen kombinerar en lokaliserad textetikett med ett numeriskt värde. Etiketten visas i programmet och det numeriska värdet lagras och används för jämförelser. ThisItem.OrderStatus
Post En post med datavärden. Den här sammansatta datatypen innehåller instanser av andra datatyper som visas i det här ämnet. Mer information: Arbeta med tabeller. { Company: "Northwind Traders",
Personal: 35,
NonProfit: false }
Postreferens En referens till en post i en tabell. Sådana referenser används ofta med polymorfa uppslag. Mer information: Arbeta med referenser. First(Accounts).Owner
Table En tabell med poster. Alla poster måste ha samma namn för sina fält som har samma datatyper och utelämnade fält behandlas som tomma. Den här sammansatta datatypen innehåller instanser av andra datatyper som visas i det här ämnet. Mer information: Arbeta med tabeller. Table( { FirstName: "Sidney",
LastName: "Higa" },
{ FirstName: "Nancy",
LastName: "Anderson" } )
Text En Unicode-textsträng. "Hello, World"
Time En tid utan ett datum, i tidszonen för programmets användare. Time( 11, 23, 45 )
Två alternativ Ett alternativ från en uppsättning med två alternativ, med ett booleskt värde. Den här datatypen kombinerar en lokaliserad textetikett med ett boolesk värde. Etiketten visas i programmet och det booleska värdet lagras och används för jämförelser. ThisItem.Taxable
Objekt utan angiven typ Ett objekt av en odeklarerad typ. Underliggande objekt kan vara av valfri befintlig typ och kan konverteras till kompatibla typer med hjälp av funktioner som Boolean(), Value(), Table() etc. För mer information se Objekt utan angiven typ och Arbeta med JSON. ParseJSON("{ ""Field"" : 1234 }").Field

Många av dessa data typer är likartade och har samma underliggande representation, t.ex. Hyperlänk som behandlas som Text. De ytterligare datatyperna ger bättre standardupplevelser i formulär och andra kontroller.

Blank

Alla datatyper kan ha ett tomt värde tom (d.v.s. inget värde). Termen "null" används ofta i databaser för det här konceptet.

Använd funktionen Blank med Set eller Patch för att ange en variabel eller ett fält som tomt. Om du till exempel Set( x, Blank() ) tas alla värden i den globala variabeln x.

Testa ett tomt värde genom att använda funktionen IsBlank . Ersätt möjliga tomma värden med icke-tomma värden med hjälp av funktionen Coalesce.

Eftersom alla datatyper är tomma, kommer datatyperna Boolesk och Två alternativ i praktiken tre möjliga värden.

Alla fyra datatyperna bygger på en Unicode textsträng.

Inbäddad text

Inbäddade textsträngar i en formel omges av dubbla citattecken. Använd två dubbla citattecken tillsammans för att representera samma dubbla citattecken i textsträngen. Du kan till exempel använda följande formel i egenskapen OnSelect för kontrollen Button:

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

resulterar i en banderoll när knappen trycks ned, där det första och sista dubbla citattecknen utelämnas (när de begränsar textsträngen) och de upprepade dubbla citattecknen runt Hej världen! ersätts med enkelt dubbelt citattecken:

popup-meddelanden med meddelandet som Jane sa

Enkla citattecken används för identifierarnamn som innehåller specialtecken och som inte har några särskilda egenskaper inom en textsträng.

Stränginterpolering

Använd strängfiltring för att infoga formeln i en textsträng. Det är ofta lättare att arbeta med och visualisera utdata än att använda Concatenate funktion eller & operator.

Prefix textsträngen med ett dollartecken $ och omge formeln som ska inbäddades med klammerparenteser {}. Om du vill ta med en klammerparentes i textsträngen använder du upprepade, klammerparenteser: {{ eller }}. Stränginterpolering kan användas var som helst där en standardtextsträng kan användas.

Du kan till exempel använda den här formeln med globala variabler som Äpplen anges till 3 och Bananer anges till 4:

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

Formeln returnerar textsträngen Vi har 3 äpplen, 4 bananer, vilket ger totalt 7 frukter. Variablerna Apples och Bananas infogas i texten och ersätter klammerparenteser, tillsammans med resultatet av den matematiska formeln Apples+Bananas. Blanksteg och andra tecken runt klammerparenteserna bevaras som de är.

Inbäddade formeln kan innehålla alla funktioner eller operatorer. Allt som krävs är att resultatet av formeln kan tvingas till en textsträng. Den här formeln infogas till exempel NickName om det anges, eller om inte, FirstName:

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

Om NickName anges till "Joe", ger den här formeln ut textsträngen Välkommen Joe, det är kul att träffa dig!. Men om NickName är tom och FirstName är "Joseph", då producerar denna formel Hej Josef, kul att träffa dig!

Stränginterpolering kan innehålla standardtextsträngar i den inbäddade formeln. Om varken NickName eller FirstName angavs kunde vi ändå ange "Vän" som ersättning:

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

Stränginterpoleringar kan till och med kapslas. Tänk på det här exemplet För, Mellan och Efter namn kombineras till en hälsning. Även om ett eller två av dessa värden är tomma kommer rätt antal blanksteg att finnas mellan namndelarna. Om inga delar tillhandahålls döljs den innersta strängen med en tom sträng och funktionen Coalesce av "Vän".

$"Welcome {Coalesce( Trim( $"{First} {Middle} {Last}"}), "Friend" )}!"
Första Mitten Sista Result
John Qunicy Doe Welcome John Quincy Doe!
John blank Doe Welcome John Doe!
blank blank Doe Welcome Doe!
blank blank blank Welcome Friend!

Nya rader

Inbäddade textsträngar kan innehålla nya rader. Du kan till exempel ange följande som egenskapen Text för en Label-kontroll:

"Line 1
Line 2
Line 3"

Formeln ovan resulterar i tre rader som visas i label-kontrollen:

Inbäddad textsträng och label-kontroll med tre rader med rad 1, rad 2 och rad 3.

Nya rader stöds också med stränginterpolering, enligt beskrivningen nedan:

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

Formeln ovan resulterar i samma utdata:

Formeln stränginterpolering och label-kontroll med tre rader med rad 1, rad 2 och rad 3.

Bild- och medieresurser

Via Arkiv-menyn kan du lägga till bild-, video- och ljudfiler som appresurser. Namnet på den importerade filen blir resursnamnet i programmet. I det här grafikobjektet har Northwind Traders-logotypen med namnet nwindlogo, har lagts till i en app:

Northwind-resurs.

Om du vill använda den här resursen i en app anger du den i egenskapen Bild i kontroll Image:

Northwind-bild.

URI för bilder och andra media

Du kan göra en del av det senaste exemplet lite djupare genom att ange egenskapen Text för en Etikett kontroll till nwindlogo. Etiketten visar en textsträng:

Northwind-text.

Arbetsyteappar refererar till varje bild eller annan mediefil, oavsett om den är i molnet eller lagts till som en programresurs, med en URI-textsträng.

Till exempel egenskapen Image för en bildkontroll accepterar till exempel inte bara appresurser utan även länkar till bilder på webben, t.ex. "https://northwindtraders.com/logo.jpg"". Egenskapen accepterar även inbyggda bilder som använder data-URI-schemat, som i det här exemplet:

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

Denna URI visar en uppskalad version av två lila diamanter:

Dubbla diamanter.

Du kan visa den senaste bilden som fångades in i en Camera-kontroll om du anger egenskapen Image för en bildkontroll till egenskapen Photo för Camera-kontrollen. programmet lagrar bilden i minnet och egenskapen Photo för kamerakontrollen returnerar en URI-referens till bilden. Du kan till exempel ta en bild och kamerans egenskap Photo kan returnera "appres://blobmanager/7b12ffa2ea4547e5b3812cb1c7b0a2a0/1".

Du använder en URI för att referera till en bild eller en annan mediefil som lagras i en databas. På så sätt hämtar programmet inte verkliga data förrän de faktiskt behövs. En bifogad fil i Microsoft Dataverse en tabell kan till exempel returnera "appres://datasources/Contacts/table/..." Som i exemplet med kamera kan du visa bilden genom att ange egenskapen Image för en bildkontroll som hämtar binärdata.

När du sparar en mediedatatyp, t.ex. en bild, i en databas skickar programmet själva bilden eller medieinformationen, inte URI-referensen.

Storleksbegränsningar

Som textsträngar och URI:er har de här datatyperna ingen förinställd begränsning av längden.

De binära data som datatyperna refererar till har inte heller någon förinställd gräns för storlek. En bild som du har hämtat via kamerakontrollen som nu har refererats som "appres://..." kan vara lika stor och hög upplösning eftersom enhetens kamera kan finnas. Upplösning, bildrutehastighet och andra attribut för mediefiler är inte begränsade av datatypen, men specifika kontroller för uppspelning och hämtning av media kan ha egna begränsningar.

Mängden tillgängligt minne i programmet påverkas emellertid av alla datastorlekar. Webbläsare som körs på en stationär dator har vanligtvis stöd för mer än 100 MB data. Mängden tillgängligt minne på en enhet, t.ex. en telefon, kan emellertid vara mycket lägre, vanligtvis inom intervallet 30-70 megabyte. Om du vill avgöra om programmet kommer att köras inom dessa gränser testar du vanliga scenarier på alla enheter som det ska köras på.

Du bör endast lagra data i minnet om det behövs. Överför bilder till en databas så fort du kan. Hämta endast bilder när programmets användare begär dem.

Nummer

Kommentar

Power Apps har endast stöd för Flyttal i dag och det är typen av alla tal. Decimal-stöd läggs snart till.

Power Fx har stöd för två olika tal: Decimal och Flyttal (med synonymer Nummer och Valuta).

Decimal är bäst för de flesta affärsberäkningar. Den kan återge tal i bas 10 på ett korrekt sätt, vilket betyder att 0.1 kan representeras exakt och inte användas för att avrundningsfel vid beräkningar. Den har ett tillräckligt stort utbud för alla affärs behov, upp till 1028 med upp till 28 siffror med precision. Decimal är standarddatatypen för de flesta Power Fx-värdar som används om man bara skriver 2*2.

Flyttal passar bäst för vetenskapliga beräkningar. Det kan representera tal i mycket större intervall, upp till 10308. Precisionen begränsas till 15 decimaler och baseras på grund 2 så att den inte kan representera några vanliga decimalvärden exakt. Flyttal har också högre prestanda och används inte om det är en faktor och precisionen inte är kritisk.

Decimaltal

I datatypen Decimal används oftast decimaldatatypen .NET. På vissa värddatorer, t.ex. Dataverse-formelkolumner som körs i SQL Serer, används decimaldatatypen SQL Server.

Decimal är inte samma sätt som du lärde dig i skolan med bas 10 siffror. Det är mycket viktigt för att undvika avrundningsfel från mycket små skillnader som kan ansamlas vid användning av bas 2 matte (som används av Flyttal).

Intervallet är från positiv 79,228,162,514,264,337,593,543,950,335 till negativt 79,228,162,514,264,337,593,543,950,335. Decimalavgränsaren kan placeras var som helst i talen med upp till 28 precisionssiffror och är fortfarande exakt representerad. Till exempel 79,228,162,514,264.337593543950335 kan representeras exakt, även 7.9228162514264337593543950335.

Flyttalsnummer

Datatyperna Flyttal, även kallad Tal eller Valuta, använder IEEE 754 flyttalsstandard med dubbel precision. Denna standard tillhandahåller ett mycket stort antal som arbetas i, från –1,79769 x 10308 till 1,79769 x 10308. Det minsta värdet som kan representeras är 5 x 10– 324.

Flyttal kan exakt representera heltal (eller heltal) mellan –9,007,199,254,740,991 (–(253 – 1)) och 9,007,199,254,740,991 (253 – 1), inklusive. Det här intervallet är större än de 32-bitars (eller 4 byte) heltals datatyperna som databaser använder ofta. Arbetsyteappar kan emellertid inte representera 64-bitars (eller 8 byte) heltals datatyper. Du kanske vill lagra numret i ett textfält eller använda en beräknad kolumn för att göra en kopia av siffran i ett textfält, så att den är mappad till datatypen Text i arbetsyteappen. På det här sättet kan du hålla, visa och ange de här värdena samt jämföra dem för att avgöra om de är lika. Det går emellertid inte att utföra numeriska beräkningar i det här formuläret.

Aritmetiskt flyttal är ungefärliga, så det kan ibland ge oväntade resultat med många dokumenterade exempel. Du kan förvänta dig att formeln 55 / 100 * 100 för att returnera exakt 55 och (55 / 100 * 100) – 55 för att returnera exakt noll. Den sistnämnda formeln returnerar emellertid 7,1054 x 10– 15, vilket är mycket liten men inte noll. Att den här små skillnaden vanligen orsakar ett problem och att programmet avrundar den bort när resultatet visades. Små skillnader kan emellertid vara desamma i framtida beräkningar och visas för att ge fel svar.

I databassystem lagras ofta valutor och beräkningar med decimal matematik, vilket ger ett mindre intervall men bättre kontroll över precisionen. Som standard mappar arbetsyteappar valutor för ingående och utgående flyttalsvärden. Därför kan resultatet skilja sig från beräkningar som görs i en ursprunglig decimal datatyp. Om den här typen av skillnader orsakar problem kanske du vill arbeta med dessa värden som Text, på samma sätt som du kan med stora heltal som beskrivs ovan i det här avsnittet.

Standardvärden och konverteringar

Kommentar

Power Apps har endast stöd för Flyttal i dag och det är typen av alla tal. Decimal-stöd läggs snart till.

De flesta Power Fx-värdar använder Decimal. Detta påverkar:

  • Literalnummer i formeln. Talet används 1.234 som värde Decimal. Formeln 1.234 * 2 tolkar till exempel 1.234 och 2 som Decimal och returnerar resultatet Decimal.
  • Funktionen Value. Value( "1.234" ) returnerar värdet Decimal. Formeln som används för Value( "1.234" ) * 2 funktionen Value tolkar till exempel innehållet i textsträngen "1.234" som Decimal.

För att fungera med värden för Flyttal används funktionen Float. Om exemplet ovan utökas Float( 1.234 ) konverteras Decimal1.234 till Flyttal. Flyttal kan också användas som ersättning för Värde för att konvertera en sträng som innehåller ett flyttalsnummer, t.ex. Float( "1.234" ) till ett Flyttal vilket krävs om antalet inte kan representeras som Decimal.

Sammanfattningsvis:

Användning Decimal Flyttal
Literalnummer i formeln 1.234 Float( 1.234 )
Float( "1.234" )
Konvertering från textsträng Value( "1.234" )
Decimal( "1.234" )
Float( "1.234" )
Konvertering mellan numeriska typer Decimal( float ) Float( decimal )
Konvertering till textsträng Text( decimal ) Text( float )

Blanda numeriska typer

Flyttal och Decimal-värden kan blandats fritt. När de blandas kan Decimal-värden konverteras till Flyttal-värden på grund av det större intervallet. Eftersom det kan leda till att precisionen förloras är det viktigt att inte blanda de två. Eftersom Decimal är den förinställda literala datatypen och de flesta numeriska funktioner kommer att bevara typen, är det relativt lätt att undvika att flytta till Flyttal om det inte önskas.

Tänk till exempel på följande beräkning med pac power-fx repl efter installationen av Power Platform CLI. Eftersom båda talen är Decimal görs beräkningen med Decimal och resultatet behåller full precision:

>> 1.0000000000000000000000000001 * 2
2.0000000000000000000000000002

Om den andra operanden ändrades till Flyttal skulle hela beräkningen göras i Flyttal och fraktionen förloras:

>> 1.0000000000000000000000000001 * Float(2)
2

Datum, tid och DateTime

Tidszoner

Datum/tid-värden faller i följande kategorier:

  • Användarlokalt: dessa värden lagras i UTC (Coordinated Universal Time), men tidszonen för programmets användare påverkar hur programmet visar dessa värden och hur programmets användare anger dem. Som ett exempel ser samma sak annorlunda ut för en användare i Kanada än den gör till en användare i Japan.
  • Oberoende av tidszon: programmet visar dessa värden på samma sätt och programanvändaren anger samma ordning, oavsett tidszon. Samma ögonblick verkar på samma sätt för en användare i Kanada som för en användare i Japan. Appförfattare som inte förväntar sig att program ska köras i olika tidszoner använder dessa värden eftersom de är enklare att göra.

I den här tabellen visas några exempel:

Datum/tidstyp Värde som lagras i databasen Värdet visas och anges 7 timmars väster om UTC Värdet visas och anges 4 timmars öster om UTC
Användarlokalt Sunday,May19,2019
04:00
Saturday,May18,2019
21:00
Sunday,May19,2019
08:00
Tidszonsoberoende Sunday,May19,2019
04:00
Sunday,May19,2019
04:00
Sunday,May19,2019
04:00

För Användarlokala datum/tider använder arbetsyteappen tidszonen för webbläsaren eller enheten, men med modelldrivna program används användarens inställning i Dataverse. Inställningarna överensstämmer oftast med varandra, men resultatet blir annorlunda om inställningarna skiljer sig.

Använd funktionerna DateAdd och TimeZoneInformation för att konvertera lokal tid till UTC och tillbaka igen. Se exemplen i slutet av dokumentationen för de här funktionerna.

Numeriska motsvarigheter

Arbetsyteappar rymmer och beräknar alla datum/tid-värden, oavsett om de är användarlokala eller tidszonoberoende i UTC. programmet översätter värdena utifrån programanvändarens tidszon när de visar dem och när programmet användare anger dem.

När en arbetsyteapp läser ett värde för tidszonoberoende från en datakälla eller skriver ett sådant värde till en datakälla, justerar programmet automatiskt värdet för att kompensera programmets användares tidszon. programmet behandlar sedan värdet som ett UTC-värde, konsekvent med alla andra datum/tid-värden i programmet. På grund av denna kompensation visas det ursprungliga tidszonoberoende värdet när programmet justerar UTC-värdet för programanvändarens tidszon.

Du kan observera detta beteende närmare med hjälp av funktionen Value för att få tillgång till underliggande numeriska värdet för ett datum/tid-värde. Funktionen returnerar datum/tid-värdet som antalet millisekunder sedan 1 januari 1970 00:00:00.000 UTC.

Eftersom alla datum/tid-värden lagras i UTC returnerar formeln Value( Date( 1970, 1, 1 ) ) inte noll i de flesta delar av världen eftersom funktionen Date returnerar ett datum i UTC. Formeln skulle till exempel returnera 28,800,000 i en tidszon som förskjuts från UTC med åtta timmar. Detta tal visar antalet millisekunder på åtta timmar.

Gå tillbaka till vårt exempel ovan:

Datum/tidstyp Värde som lagras i databasen Värdet visas och anges 7 timmars väster om UTC Funktionen Value returnerar
Användarlokalt Sunday,May19,2019
04:00
Saturday,May18,2019
21:00
1,558,238,400,000
(Sunday,May19,2019
4:00 AM UTC)
Tidszonsoberoende Sunday,May19,2019
04:00
Sunday,May19,2019
04:00
1,558,263,600,000
(Sunday,May19,2019
11:00 AM UTC)

Konvertera UNIX-tider

UNIX-tider motsvarar antalet sekunder sedan 1 januari 1970 00:00:00 UTC. Eftersom arbetsyteappar använder millisekunder i stället för sekunder kan du konvertera mellan de två genom att multiplicera eller dividera med 1 000.

UNIX-tid visar till exempel 9 september 2001, klockan 01:46:40 UTC som 1000000,000. Om du vill visa det datum/tid-värdet i en arbetsyteapp multiplicerar du talet med 1 000 för att konvertera det till millisekunder och använder det sedan i en funktion för Text. Formeln Text( 1000000000 * 1000, DateTimeFormat.UTC ) returneras strängen 2001-09-09T01:46:40.000Z.

Funktionen returnerar emellertid Saturday, September 8, 2001 18:46:40 om du använder formatet DateTimeFormat.LongDateTime24 i en tidszon som har 7 timmars förskjutning från UTC (7 timmar väster om UTC). Det här resultatet visar att DateTime-värdet är korrekt baserat på den lokala tidszonen.

Om du vill konvertera till en Unix-tid delar du resultatet från värde med 1 000:
RoundDown( Value( UnixTime ) / 1000, 0 )

Om du behöver Unix-tid i ett datum-värde för ytterligare beräkningar eller visning i Power Apps använder du följande formel:
DateAdd( Date( 1970,1,1 ), UnixTime, Seconds )

SQL Server

SQL Server har Datetime, Datetime2 och andra data typer för datum och tid som inte innehåller någon tidszonsförskjutning och som inte anger vilken tidszon de befinner sig i. Arbetsyteappar antar att dessa värden lagras i UTC-typen och behandlar dem som Användarlokalt. Om värdena är tänkta att vara tidszonsoberoende ska du korrigera för UTC-översättningarna med hjälp av funktionen TimeZoneOffset.

I arbetsyteappar används den inkluderade tidszonsinformationen i fält DateTimeOffset när ett värde konverteras till programmets interna UTC-representation. Program använder alltid UTC-tid som tidszon (nolltid för zonförskjutning) när de skriver data.

Arbetsyteappar läser och skriver värden på Tid datatyp i SQL Server som textsträngar i ISO 8601 format för varaktighet. Du måste t.ex. tolka det här strängformatet och använda funktionen Time för att konvertera textsträngen "PT2H1M39S" till ett värde Tid:

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)

Mixa information om datum och tid

Datum, Tid och DateTime har olika namn, men alla innehåller samma information om datum och tid.

Ett Datum värde kan innehålla tidsinformation med det, vanligtvis midnatt. Ett Tid värde kan bära datuminformation, som vanligtvis är 1 januari 1970. Dataverse lagrar även tidsinformation med ett fält Endast datum endast datuminformation visas som standard. På samma sätt kan du ibland arbetsyteapp skilja mellan de här datatyperna för att fastställa standardformat och kontroller.

Det är inte viktigt att du lägger till och subtraherar värden för datum och tid direkt, eftersom tids zoner och andra konverteringar kan orsaka förvirrande resultat. Använd antingen funktionen Value för att först konvertera datum/tidsvärden till millisekunder och ta hänsyn till programanvändarens tidszon eller använda DateAdd och DateDiff för att lägga till eller ta bort från ett av dessa värden.

Val och Ja/Nej

Alternativ och datatyper med två alternativ ger en programanvändare två eller flera val att välja. T.ex. alternativet Orderstatus kan till exempel erbjuda alternativen Ny, Levererad, Fakturerad och Stängd. Med den här datatypen kan du bara välja mellan två alternativ.

Båda dessa datatyper visar sina etiketter i en textsträngkontext. En label-kontroll visar till exempel ett av alternativen för orderstatus om kontrollens Text-egenskap har angetts till en formel som refererar till det valet. Alternativetiketter kan vara lokaliserade för AppData på olika platser.

När en programanvändare väljer ett alternativ och sparar den ändringen skickar programmet data till databasen, där informationen lagras i en representation som är oberoende av språket. Ett alternativ i ett val överförs och lagras som en siffra, och ett alternativ i en datatyp med två alternativ överförs och lagras som ett booleskt värde.

Etiketterna är endast avsedda som visningssyften. Det går inte att utföra direkta jämförelser med etiketterna eftersom de är specifika för ett språk. Varje val har i stället en uppräkning som fungerar med det underliggande antalet eller booleska värdet. Du kan till exempel inte använda den här formeln:

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

Men du kan använda den här formeln:

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

För globala val (som tabeller delar) överensstämmer namnet på alternativuppsättningsuppräkningen med namnet på det globala valet. För lokala alternativ (som är begränsade till en tabell) kan namnet innehålla namnet på tabellen. På så sätt uppstår konflikter om flera tabeller har alternativ med samma namn. Tabellen Konton kan till exempel ha valet OrderStatus och namnet kan vara OrderStatus (Konton). Namnet innehåller ett eller flera blanksteg och parenteser, så du måste omge det med enkla citattecken om du refererar till det i en formel.

Dessutom kan värden med två alternativ också fungera som booleska värden. Ett tvåsiffrigt värde med namnet TaxStatus kan ha etiketter Taxable och Non-Taxable vilka motsvarar true och false. För att visa kan du använda den här formeln:

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

Du kan också använda den motsvarande formeln:

If( ThisItem.Taxable, ...