Tipo di dati

Nota

Microsoft Power Fx è il nuovo nome per il linguaggio delle formule per le app canvas. Questi articoli sono in fase di elaborazione poiché estraiamo il linguaggio dalle app canvas, lo integriamo con altri prodotti di Microsoft Power Platform e lo rendiamo disponibile come open source. Inizia con la panoramica di Microsoft Power Fx per un'introduzione al linguaggio.

Le informazioni circolano in un'app in valori piccoli e discreti, in modo molto simile alle celle di un foglio di calcolo. Ad esempio, i dati in un campo Compleanno e in un campo Anniversario circolano come vaore Data che include l'anno, il mese e il giorno. L'app sa come formattare questi valori, limitare l'input a ciò che è appropriato per ciascuno e condividere i valori con un database. Per le persone, i compleanni differiscono dagli anniversari, ma il sistema li gestisce esattamente allo stesso modo. In questo caso, Date è un esempio di tipo di dati.

Questo articolo fornisce dettagli per i tipi di dati supportati dalle app canvas. Quando un'app si connette a un origine dati esterna, ogni tipo di dati in tale origine viene mappato a un tipo di dati per le app canvas.

Tipo di dati Descrizione Esempi
Boolean Un valore true o false. Può essere utilizzato direttamente in If, Filter e in altre funzioni senza confronto. vero
Color Una specifica di colore, incluso un canale alfa. Color.Red
ColorValue( "#102030" )
RGBA( 255, 128, 0, 0.5 )
Currency Un valore di valuta memorizzato in un numero a virgola mobile. I valori di valuta sono identici ai valori numerici con opzioni di formattazione di valute. 123
4.56
Date Una data senza ora, nel fuso orario dell'utente dell'app. Date( 2019, 5, 16 )
DateTime Una data con ora, nel fuso orario dell'utente dell'app. DateTimeValue( "May 16, 2019 1:23:09 PM" )
Decimale Un numero con alta precisione, operazioni a base 10 e intervallo limitato. 123
Decimali ("1,2345")
GUID Un identificatore univoco globale. GUID()
GUID( "123e4567-e89b-12d3-a456-426655440000" )
Hyperlink Una stringa di testo che contiene un collegamento ipertestuale. "https://powerapps.microsoft.com"
Image Una stringa di testo URI (Universal Resource Identifier) per un'immagine in formato .jpeg, .png, .svg, .gif o altro formato comune di immagini web. MyImage aggiunto come risorsa app
"https://northwindtraders.com/logo.jpg"
"appres://blobmanager/7b12ffa2..."
Media Una stringa di testo URI per una registrazione video o audio. MyVideo aggiunto come risorsa app
"https://northwindtraders.com/intro.mp4"
"appres://blobmanager/3ba411c..."
Numbero o Float Un numero con precisione standard, operazioni a base 2 e intervallo ampio. 123
8,903e121
1.234e200
Choice Una scelta tra una serie di opzioni, supportata da un numero. Questo tipo di dati combina un'etichetta di testo localizzabile con un valore numerico. L'etichetta viene visualizzata nell'app e il valore numerico viene archiviato e utilizzato per i confronti. ThisItem.OrderStatus
Record Un record di valori di dati. Questo tipo di dati composto contiene istanze di altri tipi di dati elencati in questo argomento. Altre informazioni: Utilizzo di tabelle. { Company: "Northwind Traders",
Staff: 35,
NonProfit: false }
Record reference Un riferimento a un record in una tabella. Tali riferimenti sono spesso usati con ricerche polimorfiche. Altre informazioni: Utilizzo di riferimenti. First(Accounts).Owner
Table Una tabella di record. Tutti i record devono avere gli stessi nomi per i relativi campi con gli stessi tipi di dati e i campi omessi vengono trattati come blank. Questo tipo di dati composto contiene istanze di altri tipi di dati elencati in questo argomento. Altre informazioni: Utilizzo di tabelle. Table( { FirstName: "Sidney",
LastName: "Higa" },
{ FirstName: "Nancy",
LastName: "Anderson" } )
Text Una stringa di testo Unicode. "Hello, World"
Time Un'ora senza data, nel fuso orario dell'utente dell'app. Time( 11, 23, 45 )
Two option Una scelta tra due opzioni, supportata da un valore booleano. Questo tipo di dati combina un'etichetta di testo localizzabile con un valore booleano. L'etichetta viene visualizzata nell'app e il valore booleano viene archiviato e utilizzato per i confronti. ThisItem.Taxable
Oggetto non tipizzato Un oggetto di tipo non dichiarato. L'oggetto sottostante potrebbe essere qualsiasi tipo esistente e può essere convertito in tipi compatibili utilizzando funzioni come Boolean(), Value(), Table() ecc. Per ulteriori informazioni vedi Oggetto non tipizzato e Utilizzo di JSON. ParseJSON("{ ""Field"" : 1234 }").Field

Molti di questi tipi di dati sono simili e hanno la stessa rappresentazione sottostante, come un campo Collegamento ipertestuale gestito come Testo. I tipi di dati aggiuntivi offrono esperienze predefinite migliori in moduli e altri controlli.

Blank

Tutti i tipi di dati possono avere un valore blank (in altre parole, nessun valore). Il termine "null" viene spesso utilizzato nei database per questo concetto.

Utilizzare la funzione Blank con la funzione Set o Patch per impostare una variabile o un campo su vuoto. Ad esempio, Set( x, Blank() ) rimuove qualsiasi valore nella variabile globale x.

Verificare la presenza di un valore blank utilizzando la funzione IsBlank. Sostituire i possibili valori blank con valori non blank usando la funzione Coalesce.

Poiché tutti i tipi di dati supportano blank, i tipi di dati Boolean e Two option hanno effettivamente tre possibili valori.

Tutti e quattro questi tipi di dati si basano su una stringa di testo Unicode.

Testo incorporato

Le stringhe di testo incorporate in una formula sono racchiuse tra virgolette doppie. Utilizzare due virgolette doppie per rappresentare una virgoletta doppia nella stringa di testo. Ad esempio, utilizzando la seguente formula nella proprietà OnSelect di un controllo Button:

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

Genera un banner quando viene premuto il pulsante, dove la prima e l'ultima virgoletta doppia vengono omesse (poiché delimitano la stringa di testo) e le virgolette doppie ripetute intorno a Hello, World! vengono sostituite con singole virgolette doppie:

Notifica pop-up con il messaggio di Jane

Le virgolette singole vengono utilizzate per i nomi identificatori che contengono caratteri speciali e non hanno un significato speciale all'interno di una stringa di testo.

Interpolazione di stringa

Usa l'interpolazione di stringa per incorporare le formule all'interno di una stringa di testo. Questa è spesso più facile da usare e visualizzare l'output rispetto all'utilizzo della funzione Concatenate o dell'operatore &.

Applicare alla stringa di testo il prefisso con il simbolo del dollaro $ e racchiudere la formula da incorporare tra parentesi graffe { }. Per includere una parentesi graffa nella stringa di testo, usa le parentesi graffe ripetute: {{ o }}. L'interpolazione di stringa può essere utilizzata ovunque sia possibile utilizzare una stringa di testo standard.

Ad esempio, considera questa formula con variabili globali Mele impostato su 3 e Banane impostato a 4:

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

Questa formula restituisce la stringa di testo Abbiamo 3 mele, 4 banane, per un totale di 7 frutti. Le variabili Mele e Banane vengono inserite nel testo sostituendo le parentesi graffe, insieme al risultato della formula matematica Mele+Banane. Gli spazi e gli altri caratteri attorno alle parentesi graffe vengono mantenuti così come sono.

Le formule incorporate possono includere qualsiasi funzione o operatore. Tutto ciò che serve è che il risultato della formula possa essere forzato a una stringa di testo. Ad esempio, questa formula inserisce NickName se è fornito, o FirstName in caso contrario, in un saluto:

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

Se NickName è impostato su "Joe", quindi questa formula produce la stringa di testo Benvenuto Joe, è un piacere conoscerti!. Ma se NickName è vuoto e FirstName è "Joseph", questa formula genera invece Caro Joseph, piacere di conoscerti!.

L'interpolazione di stringa può includere stringhe di testo standard nella formula incorporata. Ad esempio, se né NickNameFirstName sono forniti, potremmo ancora fornire "Friend" in sostituzione:

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

Le interpolazioni di stringa possono anche essere nidificate. Considera questo esempio dove i nomi First, Middle, e Last vengono combinati in un saluto. Anche se uno o due di questi valori sono vuoti, il numero corretto di spazi sarà tra le parti del nome. Se nessuna delle parti viene fornita, l'interpolazione della stringa interna si ridurrà in una stringa vuota e verrà sostituita dalla funzione Coalesce da "Friend".

$"Welcome {Coalesce( Trim( $"{First} {Middle} {Last}"}), "Friend" )}!"
First Middle Last Risultato
John Qunicy Doe Welcome John Quincy Doe!
John blank Doe Welcome John Doe!
blank blank Doe Welcome Doe!
blank blank blank Welcome Friend!

Newlines

Le stringhe di testo incorporate possono contenere nuove righe. Ad esempio, considera l'impostazione della proprietà Text di un controllo Label su quanto segue:

"Line 1
Line 2
Line 3"

La formula precedente risulta in tre righe mostrate nel controllo label:

Stringa di testo incorporata e controllo label che mostra tre righe con Line 1, Line 2, e Line 3.

Le nuove righe sono supportate anche con l'interpolazione di stringa, come mostrato di seguito:

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

La formula precedente produce lo stesso risultato:

Formula di interpolazione di stringa e controllo label che mostra tre righe con Line 1, Line 2, e Line 3.

Risorse di Image e Media

Tramite il menu File, è possibile aggiungere file di immagini, video e audio come risorse dell'app. Il nome del file importato diventa il nome della risorsa nell'app. In questa illustrazione, il logo Northwind Traders, denominato nwindlogo, è stato aggiunto a un'app:

Risorsa Northwind.

Per utilizzare questa risorsa in un'app, specificarla nella proprietà Image di un controllo Image:

Immagine Northwind.

URI per immagini e altri file multimediali

È possibile esplorare ulteriormente l'ultimo esempio impostando la proprietà Text di un controlloLabel su nwindlogo. L'etichetta mostra una stringa di testo:

Testo Northwind.

Le app canvas fanno riferimento a ogni immagine o altro file multimediale, sia nel cloud che aggiunto come risorsa dell'app, mediante una stringa di testo URI.

Ad esempio, la proprietà Image di un controllo image accetta non solo le risorse dell'app ma anche collegamenti a immagini sul Web, come "https://northwindtraders.com/logo.jpg". La proprietà accetta anche immagini in linea che utilizzano lo schema URI di dati, come in questo esempio:

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

Quell'URI mostra una versione ingrandita di due diamanti viola:

Doppi diamanti.

È possibile visualizzare l'immagine più recente acquisita in un controllo Camera se si imposta la proprietà Image di un controllo image sulla proprietà Photo del controllo camera. L'app conserva l'immagine in memoria e la proprietà Photo del controllo camera restituisce un riferimento URI all'immagine. Ad esempio, si potrebbe scattare una foto e la proprietà Photo della fotocamera potrebbe restituire "appres://blobmanager/7b12ffa2ea4547e5b3812cb1c7b0a2a0/1".

Si utilizza un URI per fare riferimento a un'immagine o ad un altro file multimediale archiviato in un database. In questo modo, l'app non recupera i dati effettivi fino a quando non sono effettivamente necessari. Ad esempio, un allegato in una tabella Microsoft Dataverse potrebbe restituire "appres://datasources/Contacts/table/..." Come nell'esempio della fotocamera, è possibile visualizzare questa immagine impostando la proprietà Image di un controllo image su questo riferimento, che recupera i dati binari.

Quando si salva un tipo di dati multimediali, ad esempio un'immagine, in un database, l'app invia l'immagine o i dati multimediali effettivi, non il riferimento URI.

Limiti di dimensione

Come stringhe di testo e URI, questi tipi di dati non hanno limiti preimpostati in relazione alla lunghezza.

I dati binari a cui fanno riferimento questi tipi di dati non hanno limiti di dimensione preimpostati. Ad esempio, un'immagine acquisita tramite il controllo camera a cui ora si fa riferimento come "appres://..." può avere le stesse dimensioni e risoluzione della fotocamera del dispositivo. La risoluzione, la frequenza dei fotogrammi e altri attributi di file multimediali non sono limitati dal tipo di dati, ma i controlli specifici per la riproduzione e l'acquisizione di file multimediali potrebbero avere dei limiti.

Tuttavia, tutte le dimensioni di dati sono soggette alla quantità di memoria disponibile nell'app. I browser in esecuzione su un computer desktop in genere supportano più di 100 megabyte di dati. Tuttavia, la quantità di memoria disponibile in un dispositivo come un telefono potrebbe essere molto più bassa, in genere tra 30 e 70 megabyte. Per determinare se l'app verrà eseguita entro questi limiti, provare scenari comuni su tutti i dispositivi su cui deve essere eseguita.

È consigliabile conservare i dati in memoria solo per il tempo necessario. Caricare le immagini in un database il prima possibile; scaricare le immagini solo quando l'utente dell'app le richiede.

Numeri

Nota

Power Apps oggi supporta solo Float ed è il tipo di tutti i numeri. Il supporto per i decimali verrà aggiunto presto.

Power Fx supporta due tipi di numeri: Decimale e Float (con sinonimi Numero e Valuta).

Decimale è la soluzione migliore per la maggior parte dei calcoli aziendali. Può rappresentare accuratamente i numeri in base 10, il che significa che 0.1 può essere rappresentato esattamente e non sarà soggetto a errori di arrotondamento durante i calcoli. Ha una gamma sufficientemente ampia per qualsiasi esigenza aziendale, fino a 1028 con un massimo di 28 cifre di precisione. Decimale è il tipo di dati numerico predefinito per la maggior parte degli host Power Fx, utilizzato se si scrive semplicemente 2*2.

Float è la soluzione migliore per i calcoli scientifici. Può rappresentare numeri in un intervallo molto più ampio, fino a 10308. La precisione è limitata a 15 cifre decimali e la matematica è basata su base 2, quindi non può rappresentare con precisione alcuni valori decimali comuni. Float ha anche prestazioni più elevate ed è preferito se questo è un fattore e la precisione non è critica.

Numeri decimali

Il tipo di dati Decimale utilizza molto spesso il tipo di dati decimale .NET. Alcuni host, come le colonne delle formule Dataverse eseguite in SQL Serer, utilizzano il tipo di dati decimale di SQL Server.

Decimale esegue i calcoli nel modo che hai imparato a scuola, utilizzando le cifre in base 10. Ciò è molto importante per evitare errori di arrotondamento dovuti a differenze molto piccole che possono accumularsi quando si utilizza la matematica in base 2 (come utilizzata da Float).

L'intervallo varia da positivo 79,228,162,514,264,337,593,543,950,335 a negativo a 79,228,162,514,264,337,593,543,950,335. Il separatore decimale può essere posizionato ovunque all'interno di questi numeri, fornendo fino a 28 cifre di precisione, ed essere comunque rappresentato con precisione. Ad esempio, 79,228,162,514,264.337593543950335 può essere rappresentato esattamente, così come 7.9228162514264337593543950335.

Numeri a virgola mobile

Il tipo di dati Float, è detto anche Numbero o Valuta, usa lo standard a virgola mobile a doppia precisione IEEE 754. Questo standard fornisce una vasta gamma di numeri, da –1,79769 x 10308 a 1,79769 x 10308. Il valore più piccolo che può essere rappresentato è 5 x 10-324.

Float può rappresentare esattamente numeri interi (o numeri interi) compresi tra –9.007.199.254.740.991 (–(253 – 1)) e 9.007.199.254.740.991 (253 – 1), inclusi. Questo intervallo è maggiore dei tipi di dati interi a 32 bit (o 4 byte) comunemente utilizzati dai database. Tuttavia, le app canvas non possono rappresentare tipi di dati interi a 64 bit (o 8 byte). Potresti voler memorizzare il numero in un campo di testo o utilizzare una colonna calcolata per creare una copia del numero in un campo di testo, in modo che sia mappato in un tipo di dati Text nell'app canvas. In questo modo, è possibile conservare, visualizzare e immettere questi valori, nonché confrontarli per determinare se sono uguali; tuttavia, non è possibile eseguire calcoli numerici in questo modulo.

L'aritmetica in virgola mobile è approssimativa, quindi a volte può dare risultati inaspettati con molti esempi documentati. Ci si potrebbe aspettare che la formula 55 / 100 * 100 restituisca esattamente 55 e che (55 / 100 * 100) - 55 restituisca esattamente zero. Tuttavia, quest'ultima formula restituisce 7,1054 x 10–15, che è un valore molto piccolo ma non zero. Questa piccola differenza normalmente non provoca un problema e l'app lo arrotonda quando mostra il risultato. Tuttavia, le piccole differenze possono diventare più importanti nei calcoli successivi e fornire una risposta sbagliata.

I sistemi di database spesso memorizzano valute ed eseguono calcoli utilizzando la matematica decimale, che fornisce un intervallo più piccolo ma un maggiore controllo della precisione. Per impostazione predefinita, le app di tela mappano le valute dento e fuori i valori in virgola mobile; pertanto, il risultato potrebbe differire dai calcoli eseguiti in un tipo di dati decimale nativo. Se questo tipo di discrepanza causerà problemi, si potrebbero utilizzare questi valori come Testo, proprio come si potrebbero utilizzare i numeri interi più grandi descritti in precedenza in questa sezione.

Valori predefiniti e conversioni

Nota

Power Apps oggi supporta solo Float ed è il tipo di tutti i numeri. Il supporto per i decimali verrà aggiunto presto.

La maggior parte degli host Power Fx utilizza Decimale per impostazione predefinita. Ciò influisce:

  • Numeri letterali nelle formule. Il numero 1.234 verrà interpretato come un valore decimale. Ad esempio, la formula 1.234 * 2 interpreterà 1.234 e 2 come decimale e restituirà a Risultato decimale.
  • Funzione Value. Value( "1.234" ) restituirà un valore decimale. Ad esempio, la formula Value( "1.234" ) * 2 la funzione Valore interpreterà il contenuto della stringa di testo "1.234" come Decimale.

Per lavorare con i valori Float, viene utilizzata la funzione Float. Estendendo l'esempio precedente, Float( 1.234 ) convertirà il valore decimale1.234 in valore Float. Float può anche essere utilizzato come sostituto di Valore per convertire una stringa contenente un numero in virgola mobile come Float( "1.234" ) in un valore Float, obbligatorio se il numero non può essere rappresentato come Decimale.

Riepilogo:

Utilizzo Decimale Float
Numeri letterali nelle formule 1.234 Float( 1.234 )
Float( "1.234" )
Conversione da stringa di testo Value( "1.234" )
Decimal( "1.234" )
Float( "1.234" )
Conversione tra tipi numerici Decimal( float ) Float( decimal )
Conversione in stringa di testo Text( decimal ) Text( float )

Miscelazione di tipi numerici

I valori Float e Decimali possono essere liberamente mescolati. Se mescolati, i valori decimali vengono convertiti in valori float a causa dell'intervallo più ampio. Poiché ciò può comportare una perdita di precisione, è importante non mescolare i due inutilmente. Poiché Decimale è il tipo di dati letterale predefinito e la maggior parte delle funzioni numeriche manterrà il tipo, è relativamente facile evitare di passare a Float senza desiderarlo.

Ad esempio, considera il seguente calcolo utilizzando pac power-fx repl dopo aver installato l'interfaccia della riga di comando Power Platform. Poiché entrambi i numeri sono Decimale, il calcolo viene eseguito in Decimale e il risultato mantiene la massima precisione:

>> 1.0000000000000000000000000001 * 2
2.0000000000000000000000000002

Se invece il secondo operando veniva cambiato in Float l'intero calcolo verrebbe fatto Float e la minuscola parte frazionaria andrebbe persa:

>> 1.0000000000000000000000000001 * Float(2)
2

Date, Time e DateTime

Fusi orari

I valori di data/ora rientrano in queste categorie:

  • Utente locale: questi valori sono memorizzati in UTC (Coordinated Universal Time), ma il fuso orario dell'utente dell'app influenza il modo in cui l'app visualizza questi valori e il modo in cui l'utente dell'app li specifica. Ad esempio, lo stesso momento appare in modo diverso a un utente in Canada rispetto a un utente in Giappone.
  • Indipendente da fuso orario: l'app visualizza questi valori allo stesso modo e l'utente dell'app li specifica allo stesso modo, indipendentemente dal fuso orario. Lo stesso momento appare nello stesso modo a un utente in Canada e a un utente in Giappone. Gli autori di app che non prevedono l'esecuzione delle proprie app in fusi orari diversi utilizzano questi valori perché sono complessivamente più semplici.

Questa tabella mostra alcuni esempi:

Tipo Data/ora Valore memorizzato nel database Valore visualizzato e immesso 7 ore a ovest di UTC Valore visualizzato e immesso 4 ore a est di UTC
Locale utente Domenica,19maggio,2019
4:00
Sabato,18maggio,2019
21:00
Domenica,19maggio,2019
8:00
Indipendente da fuso orario Domenica,19maggio,2019
4:00
Domenica,19maggio,2019
4:00
Domenica,19maggio,2019
4:00

Per le date/ore di Locale utente, le app canvas utilizzano il fuso orario del browser o del dispositivo, ma le app basate su modello utilizzano l'impostazione dell'utente in Dataverse. Queste impostazioni in genere corrispondono, ma i risultati differiranno se queste impostazioni differiscono.

Utilizzare le funzioni DateAdd e TimeZoneInformation per convertire l'ora locale in UTC e viceversa. Vedere gli esempi alla fine della documentazione per queste funzioni.

Equivalenti numerici

Le app canvas mantengono e calcolano tutti i valori di data/ora, che siano Locale utente o Indipendente da Fuso orario in UTC. L'app converte i valori in base al fuso orario dell'utente dell'app quando visualizzati e quando l'utente li specifica.

Quando un'app canvas legge un valore Indipendente da fuso orario da un'origine dati o scrive tale valore in origine dati, l'app regola automaticamente il valore per compensare il fuso orario dell'utente dell'app. L'app considera quindi il valore come valore UTC, in linea con tutti gli altri valori di data/ora nell'app. In seguito a questa compensazione, il valore Indipendente da fuso roario originale viene visualizzato quando l'app regola il valore UTC per il fuso orario dell'utente dell'app.

È possibile osservare questo comportamento più da vicino utilizzando la funzione Value per accedere al valore numerico sottostante per un valore data/ora. Questa funzione restituisce il valore data/ora come numero di millisecondi dal 1 gennaio, 1970 00:00:00.000 UTC.

Poiché ogni valore data/ora è in UTC, la formula Value( Date( 1970, 1, 1 ) ) non restituirà zero nella maggior parte del mondo perché la funzione Date restituisce una data in UTC. Ad esempio, la formula restituirebbe 28.800.000 in un fuso orario con offset di otto ore rispetto a UTC. Quel numero riflette il numero di millisecondi in otto ore.

Rirorniamo al nostro esempio qui sopra:

Tipo Data/ora Valore memorizzato nel database Valore visualizzato e immesso 7 ore a ovest di UTC La funzione Value restituisce
Locale utente Domenica,19maggio,2019
4:00
Sabato,18maggio,2019
21:00
1,558,238,400,000
(Domenica,19maggio,2019
4:00 AM UTC)
Indipendente da fuso orario Domenica,19maggio,2019
4:00
Domenica,19maggio,2019
4:00
1,558,263,600,000
(Domenica,19maggio,2019
11:00 AM UTC)

Conversione delle ore Unix

Le ore Unix riflettono il numero di secondi dal 1° gennaio, 1970 00:00:00 UTC. Poiché le app canvas utilizzano millisecondi anziché secondi, è possibile convertire tra i due moltiplicando o dividendo per 1.000.

Ad esempio, l'ora Unix visualizza 9 settembre 2001, 01:46:40 UTC come 1.000.000.000. Per visualizzare quel valore data/ora in un'app canvas, moltiplicare quel numero per 1.000 per convertirlo in millisecondi, quindi usarlo in una funzione Text. La formula Text( 1000000000 * 1000, DateTimeFormat.UTC ) restituisce la stringa 2001-09-09T01:46:40.000Z.

Tuttavia, tale funzione restituice Sabato 8 settembre 2001 18:46:40 se si utilizza il formato DateTimeFormat.LongDateTime24 in un fuso orario con offset di -7 ore rispetto a UTC (7 ore a ovest di UTC). Questo risultato mostra il valore DateTime basato correttamente sul fuso orario locale.

Per convertire in un'ora Unix, dividere il risultato di Value per 1.000:
RoundDown( Value( UnixTime ) / 1000, 0 )

Se si necessita dell'ora Unix in un valore Data per ulteriori calcoli o la visualizzazione in Power Apps, utilizzare questa formula:
DateAdd( Date( 1970,1,1 ), UnixTime, Seconds )

SQL Server

SQL Server ha Datetime, Datetime2 e altri tipi di dati di data/ora che non includono un offset di fuso orario e non indicano in quale fuso orario si trovano. Le app canvas presuppongono che questi valori siano archiviati in UTC e li trattano come Locale utente. Se i valori devono essere indipendenti dal fuso orario, correggere le conversioni UTC utilizzando la funzione TimeZoneOffset.

Le app canvas utilizzano le informazioni sul fuso orario incluse nei campi Datetimeoffset durante la conversione di un valore nella rappresentazione UTC interna dell'app. Le app usano sempre UTC come fuso orario (offset del fuso orario pari a zero) quando scrivono i dati.

Le app canvas leggono e scrivono valori del tipo di dati Time in SQL Server come stringhe di testo nel formato di durata ISO 8601. Ad esempio, è necessario analizzare questo formato di stringa e utilizzare la funzione Time per convertire la stringa di testo "PT2H1M39S" in un valore Time:

With(
    Match( "PT2H1M39S", "PT(?:(?<hours>\d+)H)?(?:(?<minutes>\d+)M)?(?:(?<seconds>\d+)S)?" ),
    Time( Value( hours ), Value( minutes ), Value( seconds ) )
)
// Result: 2:01 AM (as shown in a label control, use the Text function to see the seconds)

Combinare informazioni su data e ora

Date, Time e DateTime hanno nomi diversi, ma contengono tutti le stesse informazioni su date e ore.

Un valore Date può includere informazioni sull'ora, che di solito è mezzanotte. Un valore Time può contenere informazioni sulla data, che di solito è 1° gennaio 1970. Anche Dataverse memorizza informazioni sull'ora con un campo Solo data ma per impostazione predefinita mostra solo le informazioni sulla data. Allo stesso modo, le app canvas a volte distinguono questi tipi di dati per determinare formati e controlli predefiniti.

L'aggiunta e la sottrazione diretta di valori di data e ora non è consigliata poiché il fuso orario e altre conversioni potrebbero causare risultati confusi. Utilizzare la funzione Value per dapprima convertire i valori di data/ora in millisecondi e prendere in conto il fuso orario dell'utente dell'app, oppure utilizzare le funzioni DateAdd e DateDiff per aggiungere o sottrarre da uno di questi valori.

Scelte e Sì/No

Scelte e tipi di dati a due opzioni forniscono due o più scelte che un utente dell'app può selezionare. Ad esempio, una scelta Stato ordine potrebbe offrire le scelte Nuovo, Spedito, Fatturato e Chiuso. Il tipo di dati Two option offre solo due scelte.

Entrambi questi tipi di dati mostrano le relative etichette in un contesto di stringhe di testo. Ad esempio, un controllo label mostra una delle opzioni di stato dell'ordine se la proprietà Text del controllo è impostata su una formula che fa riferimento a tale scelta. Le etichette delle opzioni potrebbero essere localizzate per gli utenti dell'app in posizioni diverse.

Quando un utente dell'app seleziona un'opzione e salva la modifica, l'app trasmette i dati al database, che li archivia in una rappresentazione indipendente dalla lingua. Un'opzione in una scelta viene trasmessa e memorizzata come numero e un'opzione in un tipo di dati a due opzioni viene trasmessa e memorizzata come valore booleano.

Le etichette sono fornite solo a scopo di visualizzazione. Non è possibile eseguire confronti diretti con le etichette in quanto sono specifiche di una lingua. Ogni scelta ha invece un'enumerazione che funziona con il numero sottostante o il valore booleano. Ad esempio, non è possibile utilizzare questa formula:

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

Ma è possibile utilizzare questa formula:

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

Per le scelte globali (che le tabelle condividono), il nome dell'enumerazione del set di opzioni corrisponde al nome della scelta globale. Per le scelte locali (che hanno come ambito una tabella), il nome può contenere il nome della tabella. Questo comportamento evita i conflitti se più tabelle dispongono di scelte con lo stesso nome. Ad esempio, la tabella Account potrebbe avere una scelta OrderStatus con il nome OrderStatus (Account). Tale nome contiene uno o più spazi e parentesi, quindi è necessario racchiuderlo tra virgolette singole se vi si fa riferimento in una formula.

Inoltre, i valori a due opzioni possono anche comportarsi come valori booleani. Ad esempio, un valore a due opzioni denominato TaxStatuspotrebbe avere le etichette Tassabile e Non tassabile, che corrispondono rispettivamente a true e false. Per illustrare ciò, è possibile utilizzare questa formula:

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

È anche possibile utilizzare questa formula equivalente:

If( ThisItem.Taxable, ...