Datové typy

Poznámka:

Microsoft Power Fx je nový název jazyka vzorců pro aplikace plátna. Práce na těchto článcích stále probíhá, jak extrahujeme jazyk z aplikací plátna, integrujeme jej s ostatními produkty Microsoft Power Platform a zpřístupňujeme jako open source. Začněte v části Přehled jazyka Microsoft Power Fx obsahující úvod do jazyka.

Informace proudí aplikací v malých, diskrétních hodnotách, velmi podobně jako v buňkách tabulky. Například data v poli Narozeniny a poli Výročí by protékala jako hodnota Datum, která zahrnuje rok, měsíc a den. Aplikace ví, jak tyto hodnoty formátovat, omezit vstup na to, co je pro každého vhodné, a sdílet hodnoty s databází. Narozeniny se liší od výročí pro lidi, ale systém je zpracovává přesně stejným způsobem. V tomto případě je Datum příklad datového typu.

Tento článek obsahuje podrobnosti o datových typech, které aplikace plátna podporují. Když se aplikace připojí k externímu zdroj dat, je každý datový typ v tomto zdroji mapován na datový typ pro aplikace plátna.

Datový typ Popis Příklady
Logická hodnota Hodnota pravda nebo nepravda. Lze použít přímo ve funkcích If, Filter a dalších bez porovnání. true
Color (Barva) Specifikace barev, včetně alfa kanálu. Color.Red
ColorValue( "#102030" )
RGBA( 255, 128, 0, 0.5 )
Měna Hodnota měny uložená v plovoucí desetinné čárce. Hodnoty měn jsou stejné jako číselné hodnoty s možností formátování měny. 123
4.56
Datum Datum bez času v časovém pásmu uživatele aplikace. Date( 2019, 5, 16 )
Datum a čas Datum s časem v časovém pásmu uživatele aplikace. DateTimeValue („16. května, 2019 13:23:09“)
Decimal Číslo s vysokou přesností, operacemi se základem 10 a omezeným rozsahem. 123
Decimal( "1.2345" )
GUID Globálně jedinečný identifikátor. GUID()
GUID( "123e4567-e89b-12d3-a456-426655440000" )
Hypertextový odkaz Textový řetězec, který obsahuje hypertextový odkaz. "https://powerapps.microsoft.com"
Image Textový řetězec univerzálního identifikátoru zdroje (URI) k obrázku ve formátu .jpeg, .png, .svg, .gif nebo v jiném běžném formátu webového obrázku. MyImage přidáno jako zdroj aplikace
"https://northwindtraders.com/logo.jpg"
"appres://blobmanager/7b12ffa2..."
Médium Textový řetězec URI pro video nebo zvukový záznam. MyVideo přidáno jako zdroj aplikace
"https://northwindtraders.com/intro.mp4"
"appres://blobmanager/3ba411c..."
Číslo nebo Číslo s plovoucí desetinnou čárkou Číslo se standardní přesností, operacemi se základem 2 a širokým rozsahem. 123
8.903e121
1.234e200
Volba Výběr ze sady možností opírající se o číslo. Tento datový typ kombinuje lokalizovatelný textový štítek s číselnou hodnotou. Štítek se objeví v aplikaci a číselná hodnota je uložena a použita pro srovnání. ThisItem.OrderStatus
Záznam Záznam hodnot dat. Tento složený datový typ obsahuje instance jiných datových typů, které jsou uvedeny v tomto tématu. Další informace: Práce s tabulkami. { Company: "Northwind Traders",
Staff: 35,
NonProfit: false }
Odkaz na záznam Odkaz na záznam v tabulce. Tyto odkazy se často používají s polymorfními vyhledáváními. Další informace: Práce s odkazy. First(Accounts).Owner
Table Tabulka záznamů. Všechny záznamy musí mít stejný název svých polí se stejnými datovými typy a vynechaná pole jsou považována za prázdná. Tento složený datový typ obsahuje instance jiných datových typů, které jsou uvedeny v tomto tématu. Další informace: Práce s tabulkami. Table( { FirstName: "Sidney",
LastName: "Higa" },
{ FirstName: "Nancy",
LastName: "Anderson" } )
Text Textový řetězec Unicode. "Ahoj světe"
Time Čas bez data v časovém pásmu uživatele aplikace. Time( 11, 23, 45 )
Dvě možnosti Výběr ze sady dvou možností opírající se o logickou hodnotu. Tento datový typ kombinuje lokalizovatelný textový štítek s logickou hodnotou. Štítek se objeví v aplikaci a logická hodnota je uložena a použita pro srovnání. ThisItem.Taxable
Netypovaný objekt Objekt nedeklarovaného typu. Základní objekt může být jakýkoli existující typ a lze jej převést na kompatibilní typy pomocí funkcí, jako je např Boolean(), Value(), Table() atd. Více informací viz Netypovaný objekt a Práce s JSON. ParseJSON("{ ""Field"" : 1234 }").Field

Mnohé z těchto datových typů je podobných a mají stejnou základní reprezentaci, například s polem Hyperlink se pracuje jako s datovým typem Text. Další datové typy poskytují lepší výchozí nastavení ve formulářích a dalších ovládacích prvcích.

Blank

Všechny datové typy mohou mít hodnotu prázdné (jinými slovy, žádná hodnota). Termín "null" je často používán v databázích pro tento koncept.

Použijte funkci Blank s funkcí Set nebo Patch pro nastavení proměnné nebo pole na prázdné. Například, Set(x, Blank() ) odebere jakoukoli hodnotu z globální proměnné x.

Prázdnou hodnotu otestujete pomocí funkce IsBlank. Výměnu možných prázdných hodnot za hodnoty, které nejsou prázdné, provedete pomocí funkce Coalesce.

Protože všechny datové typy podporují prázdnou hodnotu, logický datový typ a datový typ Dvě možnosti mají ve skutečnosti tři možné hodnoty.

Všechny tyto čtyři datové typy jsou založeny na textovém řetězci Unicode.

Vložený text

Vložené textové řetězce ve vzorci jsou uzavřeny v uvozovkách. Dvě dvojité uvozovky představují jednu dvojitou uvozovku v textovém řetězci. Například použití následujícího vzorce ve vlastnosti OnSelect ovládacího prvku Button:

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

Při stisknutí tlačítka vyústí v banner, kde jsou vynechány první a poslední dvojité uvozovky (protože vymezují textový řetězec) a opakované dvojité uvozovky kolem Ahoj světe! jsou nahrazeny jednoduchou uvozovkou:

Automaticky otevírané oznámení se zprávou „Ahoj světe“, kterou řekla Jane.

Jednoduché uvozovky se používají v názvech identifikátorů obsahujících speciální znaky a nemají žádný zvláštní význam v rámci textového řetězce.

Interpolace řetězců

Interpolaci řetězců použijte k vložení vzorců do textového řetězce. Často to usnadňuje práci s kódem a vizualizaci výstupu oproti funkci Concatenate nebo operátoru &.

Před textový řetězec zapište znak dolaru $ a vkládaný vzorec uzavřete do složených závorek {}. Chcete-li do textového řetězce vložit složenou závorku, použijte opakované složené závorky: {{ nebo }}. Interpolaci řetězců lze použít všude, kde lze použít standardní textový řetězec.

Ukažme si například tento vzorec s globálními proměnnými Apples (nastavenou na 3) a Bananas (nastavenou na 4):

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

Tento vzorec vrátí textový řetězec Máme 3 jablka, 4 banány, celkem 7 kusů ovoce. Proměnné Apples a Bananas jsou vloženy do textu nahrazující složené závorky spolu s výsledkem matematického vzorce Apples+Bananas. Mezery a další znaky kolem složených závorek jsou zachovány tak, jak jsou.

Vložené vzorce mohou obsahovat libovolné funkce nebo operátory. Nutné je pouze to, aby výsledek vzorce mohl být převeden na textový řetězec. Například tento vzorec vloží do pozdravu hodnotu NickName (pokud je zadána), nebo místo ní FirstName:

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

Je-li hodnota NickName nastavena na "Joe", pak tento vzorec vytvoří textový řetězec Welcome Joe, it's great to meet you!. Ale pokud je hodnota NickNameprázdná a FirstName je "Joseph", pak tento vzorec místo toho vrátí text Dear Joseph, great to meet you!

Interpolace řetězců může do vloženého vzorce zahrnout standardní textové řetězce. Pokud nebyl zadán NickName ani FirstName, stále jsme mohli jako náhradu předat údaj Friend":

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

Řetězcové interpolace lze dokonce vnořovat. Zvažte tento příklad, kde jsou části jména First, Middle a Last spojena do pozdravu. I když jedna nebo dvě z těchto hodnot jsou prázdné, mezi částmi názvu bude správný počet mezer. Pokud není zadána žádná z částí jména, interpolace vnitřního řetězce se zhroutí na prázdný řetězec a bude nahrazena funkcí Coalesce, která vloží text "Friend".

$"Welcome {Coalesce( Trim( $"{First} {Middle} {Last}"}), "Friend" )}!"
First Middle Last Výsledek
John Qunicy Doe Welcome John Quincy Doe!
John prázdný Doe Welcome John Doe!
prázdný prázdný Doe Welcome Doe!
prázdný prázdný prázdný Welcome Friend!

Nové řádky

Vložené textové řetězce mohou obsahovat nové řádky. Jako příklad nastavíme vlastnost Text ovládacího prvku Label na následující:

"Line 1
Line 2
Line 3"

Výsledkem výše uvedeného vzorce jsou tři řádky zobrazené v ovládacím prvku Label:

Vložený textový řetězec a ovládací prvek Label zobrazující tři řádky s řádkem 1, řádkem 2 a řádkem 3.

Nové řádky jsou také podporovány v řetězcové interpolaci, jak je znázorněno níže:

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

Výše uvedený vzorec má za následek stejný výstup:

Vzorec s interpolací řetězce a ovládací prvek Label zobrazující tři řádky s řádkem 1, řádkem 2 a řádkem 3.

Prostředky obrázků a médií

V nabídce Soubor můžete jako prostředky aplikace přidat obrazové, video a zvukové soubory. Název importovaného souboru se stane názvem prostředku v aplikaci. Na tomto obrázku je do aplikace přidáno logo Northwind Traders, které je pojmenováno nwindlogo:

Zdroj Northwind.

Chcete-li tento prostředek použít v aplikaci, zadejte jej do vlastnosti Image ovládacího prvku Image:

Obrázek Northwind.

URI pro obrázky a jiná média

Do posledního příkladu se můžete trochu více zahloubat nastavením vlastnosti Text ovládacího prvku Label na nwindlogo. Popisek zobrazuje textový řetězec:

Text Northwind.

Aplikace plátna odkazují na každý obrázek nebo jiný mediální soubor, ať už je v cloudu nebo přidán jako prostředek aplikace, pomocí textového řetězce URI.

Například vlastnost Image ovládacího prvku obrázku přijímá nejen prostředky aplikace, ale také odkazy na obrázky na webu, například "https://northwindtraders.com/logo.jpg"". Vlastnost také přijímá vložené obrázky, které používají schéma URI dat, jako v tomto příkladu:

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

Tento URI zobrazuje zvětšenou verzi dvou fialových diamantů:

Dvojité diamanty.

Můžete zobrazit nejnovější snímek pořízený v ovládacím prvku Camera, pokud nastavíte vlastnost Image ovládacího prvku na vlastnost Photo ovládacího prvku kamery. Aplikace podrží obrázek v paměti a vlastnost Photo ovládacího prvku kamery vrátí odkaz URI na obrázek. Můžete například pořídit snímek a vlastnost Photo kamery může vrátit "appres://blobmanager/7b12ffa2ea4547e5b3812cb1c7b0a2a0/1".

Pomocí URI se odkazuje na obrázek nebo jiný mediální soubor uložený v databázi. Tímto způsobem aplikace nenačte skutečná data, dokud to není skutečně potřeba. Například příloha v tabulce Microsoft Dataverse může vrátit adresu URL "appres://datasources/Contacts/table/..." Stejně jako v příkladu s fotoaparátem můžete tento obrázek zobrazit nastavením vlastnosti Image ovládacího prvku obrázku na tento odkaz, který načte binární data.

Když uložíte datový typ médií, například obrázek, do databáze, aplikace odešle skutečný obrázek nebo data médií, nikoli odkaz na URI.

Omezení velikosti

Jako textové řetězce a identifikátory URI nemají tyto datové typy předvolené omezení na jejich délku.

Binární data, na která tyto datové typy odkazují, také nemají přednastavené omezení velikosti. Například obrázek pořízený pomocí ovládacího prvku kamery, na který se nyní odkazuje jako na "appres://...", může být stejně velký a ve stejně vysokém rozlišení, jaké dokáže zachytit kamera zařízení. Rozlišení, obnovovací kmitočet a další atributy mediálních souborů nejsou omezeny datovým typem, ale konkrétní ovládací prvky pro přehrávání a zachycení médií mohou mít svá vlastní omezení.

Všechny velikosti dat však závisí na množství dostupné paměti v aplikaci. Prohlížeče spuštěné ve stolním počítači obvykle podporují více než 100 megabajtů dat. Množství dostupné paměti na zařízení, jako je telefon, však může být mnohem nižší, obvykle v rozmezí 30–70 megabajtů. Chcete-li zjistit, zda vaše aplikace bude běžet v rámci těchto limitů, otestujte běžné scénáře na všech zařízeních, na kterých by měla být spuštěna.

Doporučujeme uchovávat data v paměti pouze tak dlouho, jak je to nutné. Nahrajte obrázky do databáze co nejdříve; stahujte obrázky pouze tehdy, když o ně uživatel aplikace požádá.

Čísla

Poznámka:

Power Apps dnes podporuje pouze číslo s plovoucí desetinnou čárkou a je typem pro všechna čísla. Podpora desetinných čísel bude brzy přidána.

Power Fx podporuje dva druhy čísel: desetinná čísla a čísla s plovoucí desetinnou čárkou (se synonymy číslo a měna).

Desetinné číslo je nejlepší pro většinu obchodních výpočtů. Může přesně reprezentovat čísla v základu 10, což znamená, že 0.1 může být přesně reprezentováno a nebude náchylné k zaokrouhlovacím chybám během výpočtů. Má dostatečně velký rozsah pro jakoukoli obchodní potřebu, až 1028 s přesností až 28 číslic. Desetinné číslo je pro většinu hostitelů Power Fx výchozí číselný datový typ, používá se, pokud se jednoduše píše 2*2.

Číslo s plovoucí desetinnou čárkou je nejlepší pro vědecké výpočty. Může představovat čísla v mnohem větším rozsahu, až do 10308. Přesnost je omezena na 15 desetinných míst a matematika je založena na základu 2, takže nemůže přesně reprezentovat některé běžné desetinné hodnoty. Číslo s plovoucí desetinnou čárkou má také vyšší výkon a je upřednostňováno, pokud je to faktor a přesnost není kritická.

Desetinná čísla

Datový typ Desetinné číslo nejčastěji používá datový typ desetinného čísla .NET. Někteří hostitelé, jako např. sloupce vzorce Dataverse, které jsou spuštěny v SQL Server, používají desetinný datový typ serveru SQL Server.

Desetinné číslo dělá matematiku tak, jak jste se učili ve škole, používá číslice o základu 10. To je velmi důležité, abyste se vyhnuli zaokrouhlovacím chybám z velmi malých rozdílů, které se mohou nahromadit při použití matematiky se základem 2 (jak ji používá Číslo s plovoucí desetinnou čárkou).

Rozsah je od kladného 79 228 162 514 264 337 593 543 950 335 do záporného 79 228 162 514 264 337 593 543 950 335. Oddělovač desetinných míst může být umístěn kdekoli v rámci těchto čísel, poskytuje přesnost až 28 číslic, a přesto bude přesně znázorněn. Například 79 228 162 514 264,337593543950335 může být přesně reprezentováno, stejně jako 7,9228162514264337593543950335.

Číslo s plovoucí desetinnou čárkou

Datový typ Číslo s plovoucí desetinnou čárkou neboli Číslo nebo Měna používá standard IEEE 754 s dvojitou přesností s plovoucí desetinnou čárkou. Tento standard poskytuje velmi široký rozsah čísel, ve kterých se pracuje, od –1,79769 x 10308 po 1,79769 x 10308. Nejmenší hodnota, kterou lze reprezentovat, je 5 x 10–324.

Číslo s plovoucí desetinnou čárkou může přesně reprezentovat celá čísla mezi –9 007 199 254 740 991 (–(253 – 1)) a 9 007 199 254 740 991 (253 – 1) včetně. Tento rozsah je větší než 32bitové (nebo 4bajtové) celočíselné datové typy, které databáze běžně používají. Aplikace plátna však nemohou představovat 64bitové (nebo 8bajtové) celočíselné datové typy. Možná budete chtít uložit číslo do textového pole nebo pomocí vypočítaného sloupce vytvořit kopii čísla v textovém poli, aby bylo mapováno na datový typ Text aplikace plátna. Tímto způsobem můžete tyto hodnoty podržet, zobrazit a zadat a také je porovnat a určit, zda jsou stejné; v této podobě však na nich nemůžete provádět číselné výpočty.

Aritmetika s pohyblivou řádovou čárkou je přibližná, takže dle mnoha dokumentovaných příkladů může někdy poskytnout neočekávané výsledky. Můžete očekávat, že vzorec 55 / 100 * 100 vrátí přesně 55 a (55 / 100 * 100) – 55 vrátí přesně nulu. Druhý vzorec však vrátí 7,1054 x 10–15, což je velmi malé číslo, ale ne nula. Tento nepatrný rozdíl obvykle nezpůsobuje problém a aplikace jej při zobrazení výsledku zaokrouhlí. Malé rozdíly se však mohou v následných výpočtech nakumulovat a může to vypadat, že je špatný výsledek.

Databázové systémy často ukládají měny a provádějí výpočty pomocí desetinné matematiky, která nabízí menší rozsah, ale větší kontrolu přesnosti. Aplikace plátna standardně mapují měny na hodnoty s pohyblivou desetinnou čárkou i mimo ně; výsledek se proto může lišit od výpočtů, které se provádějí v nativním desetinném datovém typu. Pokud tento typ nesrovnalostí způsobí problémy, možná budete chtít pracovat s těmito hodnotami jako Text, stejně jako u velkých celých čísel popsaných výše v této části.

Výchozí hodnoty a převody

Poznámka:

Power Apps dnes podporuje pouze číslo s plovoucí desetinnou čárkou a je typem pro všechna čísla. Podpora desetinných čísel bude brzy přidána.

Ve výchozím nastavení používá většina hostitelů Power Fx desetinné číslo. To ovlivňuje:

  • Doslovná čísla ve vzorcích. Číslo 1.234 bude interpretováno jako desetinná hodnota. Například vzorec 1.234 * 2 bude interpretovat 1.234 a 2 jako desetinná čísla a vrátí a desetinný výsledek.
  • Funkce Value. Value( "1.234" ) vrátí desetinnou hodnotu. Například vzorec Value( "1.234" ) * 2 funkce Value bude interpretovat obsah textového řetězce "1.234" jako desetinné číslo.

Pro práci s hodnotami Číslo s plovoucí desetinnou čárkou se používá funkce Float. Když rozšíříme výše uvedený příklad, Float( 1.234 ) převedete desetinné číslo1.234 na číslo s plovoucí desetinnou čárkou. Float lze také použít jako náhradu za Value pro převod řetězce obsahujícího číslo s plovoucí desetinnou čárkou, jako je Float( "1.234" ) na hodnotu čísla s plovoucí desetinnou čárkou, která je vyžadována, pokud číslo nelze reprezentovat jako desetinné.

Souhrnně:

Využití Desetinné číslo Číslo s plovoucí desetinnou čárkou
Doslovná čísla ve vzorcích 1.234 Float( 1.234 )
Float( "1.234" )
Převod z textového řetězce Value( "1.234" )
Decimal( "1.234" )
Float( "1.234" )
Převod mezi číselnými typy Decimal( float ) Float( decimal )
Převod na textový řetězec Text( decimal ) Text( float )

Míchání číselných typů

Hodnoty čísla s plovoucí desetinnou čárkou a desetinného čísla lze libovolně míchat. Při smíchání jsou desetinné hodnoty převedeny na čísla s plovoucí desetinnou čárkou kvůli většímu rozsahu. Vzhledem k tomu, že to může vést ke ztrátě přesnosti, je důležité tyto dvě věci zbytečně nemíchat. Protože desetinné číslo je výchozí doslovný datový typ a většina numerických funkcí zachová typ, je relativně snadné vyhnout se přechodu na číslo s plovoucí desetinnou čárkou, aniž byste si to přáli.

Zvažte například následující výpočet pomocí pac power-fx repl po instalaci rozhraní příkazového řádku Power Platform. Protože jsou obě čísla desetinná, výpočet se provádí v desetinných číslech a výsledek si zachovává plnou přesnost:

>> 1.0000000000000000000000000001 * 2
2.0000000000000000000000000002

Pokud by se místo toho druhý operand změnil na číslo s plovoucí desetinnou čárkou , pak by se celý výpočet provedl v číslech s plovoucí desetinnou čárkou a malá zlomková část by byla ztracena:

>> 1.0000000000000000000000000001 * Float(2)
2

Datum, čas a DateTime

Časová pásma

Hodnoty data a času spadají do těchto kategorií:

  • Místní čas uživatele: Tyto hodnoty jsou uloženy ve standardu UTC (Coordinated Universal Time), ale časové pásmo uživatele aplikace ovlivňuje způsob, jakým aplikace tyto hodnoty zobrazuje a jak je zadává uživatel aplikace. Například stejný okamžik se uživateli v Kanadě zobrazí jinak než uživateli v Japonsku.
  • Nezávislý na časovém pásmu: Aplikace zobrazuje tyto hodnoty stejným způsobem a uživatel aplikace je zadává stejným způsobem bez ohledu na časové pásmo. Stejný okamžik se uživateli v Kanadě zobrazí stejně jako uživateli v Japonsku. Autoři aplikací, kteří neočekávají spuštění svých aplikací v různých časových pásmech, používají tyto hodnoty, protože jsou celkově jednodušší.

V této tabulce jsou uvedeny některé příklady:

Typ data a času Hodnota uložená v databázi Hodnota zobrazená a zadaná 7 hodin západně od UTC Hodnota zobrazená a zadaná 4 hodin východně od UTC
Místní čas uživatele Neděle,19.května,2019
4:00
Sobota,18.května,2019
21:00
Neděle,19.května,2019
8:00
Nezávislý na časovém pásmu Neděle,19.května,2019
4:00
Neděle,19.května,2019
4:00
Neděle,19.května,2019
4:00

Pro datum/čas Místního času uživatele aplikace plátna používají časové pásmo prohlížeče nebo zařízení, ale modelem řízené aplikace používají nastavení uživatele v Dataverse. Tato nastavení se obvykle shodují, ale výsledky se budou lišit, pokud se tato nastavení liší.

Použijte funkce DateAdd a TimeZoneInformation pro převod místního času na UTC a zpět. Podívejte se na příklady na konci dokumentace pro tyto funkce.

Číselné ekvivalenty

Aplikace plátna uchovávají a vypočítávají všechny hodnoty data a času, ať už se jedná o Místní čas uživatele nebo Nezávislý na časovém pásmu v UTC. Aplikace převádí hodnoty na základě časového pásma uživatele aplikace, když je zobrazuje a když je uživatel aplikace zadá.

Když aplikace plátna přečte hodnotu Nezávislý na časovém pásmu ze zdroje dat nebo zapíše takovou hodnotu do zdroje dat, aplikace automaticky upraví hodnotu tak, aby kompenzovala časové pásmo uživatele aplikace. Aplikace potom považuje tuto hodnotu za hodnotu UTC v souladu se všemi ostatními hodnotami data a času v aplikaci. Kvůli této kompenzaci se původní hodnota Nezávislý na časovém pásmu zobrazí, když aplikace upraví hodnotu UTC pro časové pásmo uživatele aplikace.

Toto chování můžete pozorněji sledovat pomocí funkce Value pro přístup k základní číselné hodnotě data / času. Tato funkce vrací hodnotu data/času jako počet milisekund od 1. ledna, 1970 00:00:00.000 UTC.

Protože každá hodnota data a času je uchovávána v UTC, vzorec Value( Date( 1970, 1, 1 ) ) ve většině částí světa nevrátí nulu, protože funkce Date funkce vrátí datum v UTC. Vzorec by například vrátil 28 800 000 v časové zóně, která je od UTC posunuta o osm hodin. Toto číslo odráží počet milisekund za osm hodin.

Návrat k našemu příkladu shora:

Typ data a času Hodnota uložená v databázi Hodnota zobrazená a zadaná 7 hodin západně od UTC Funkce Value vrací
Místní čas uživatele Neděle,19.května,2019
4:00
Sobota,18.května,2019
21:00
1,558,238,400,000
(Neděle,19.května,2019
4:00 UTC)
Nezávislý na časovém pásmu Neděle,19.května,2019
4:00
Neděle,19.května,2019
4:00
1,558,263,600,000
(Neděle,19.května,2019
11:00 AM UTC)

Převod unixových časů

Unixové časy vyjadřují počet sekund od 1. ledna, 1970 00:00:00 UTC. Protože aplikace plátna používají milisekundy místo vteřin, můžete mezi nimi převést vynásobením nebo vydělením číslem 1000.

Například unixový čas ukazuje 9. září 2001 v 01:46:40 UTC jako 1 000 000 000. Chcete-li zobrazit hodnotu data a času v aplikaci plátna, vynásobte toto číslo číslem 1 000, čímž jej převedete na milisekundy a poté jej použijte ve funkci Text. Vzorec Text (1000000000 * 1000, DateTimeFormat.UTC) vrátí řetězec 2001-09-09T01:46:40.000Z.

Tato funkce však vrátí Sobota, 8. září 2001 18:46:40 pokud používáte formát DateTimeFormat.LongDateTime24 v časové zóně, která je o –7 hodin posunuta od UTC (7 hodin západně od UTC). Tento výsledek ukazuje hodnotu DateTime správně založenou na místním časovém pásmu.

Chcete-li ji převést na unixový čas, vydělte výsledek Hodnota číslem 1 000:
RoundDown( Hodnota( UnixTime ) / 1000, 0 )

Pokud potřebujete unixový čas pro hodnotu Datum pro další výpočty nebo zobrazení v Power Apps, použijte tento vzorec:
DateAdd( Datum( 1970,1,1 ), UnixTime, Seconds )

SQL Server

SQL Server má datové typy Datetime, Datetime2 a další typy data a času, které neobsahují posun časového pásma a neuvádějí, ve kterém časovém pásmu jsou. Aplikace plátna předpokládají, že tyto hodnoty jsou uloženy v UTC a zachází s nimi jako s místním časem uživatele. Pokud mají být hodnoty nezávislé na časovém pásmu, opravte překlady UTC pomocí funkce TimeZoneOffset.

Aplikace plátna používají přiložené informace o časovém pásmu v polích Datetimeoffset při převodu hodnoty na interní reprezentaci UTC aplikace. Aplikace vždy používají UTC jako časové pásmo (nulové posunutí časového pásma), když zapisují data.

Aplikace plátna čtou a zapisují hodnoty datového typu Čas do platformy SQL Server jako textové řetězce ve formátu doby trvání ISO 8601. Například musíte analyzovat tento formát řetězce a použít funkci Time pro převod textového řetězce "PT2H1M39S" na hodnotu Čas:

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)

Míchání informací o datu a čase

Datové typy Datum, Čas a DateTime mají různé názvy, ale všechny mají stejné informace o datech a časech.

Hodnota Datum může zahrnovat také časovou informaci, která je obvykle půlnoc. Hodnota Čas může nést informace o datu, což je obvykle 1. ledna 1970. Dataverse také ukládá časové informace pomocí pole Pouze datum, ale ve výchozím nastavení zobrazuje pouze informace o datu. Podobně aplikace plátna někdy rozlišují mezi těmito datovými typy a určují výchozí formáty a ovládací prvky.

Přímé přidávání a odečítání hodnot data a času se nedoporučuje, protože časové pásmo a jiné převody mohou způsobit matoucí výsledky. Buď použijte funkci Value pro převod hodnoty data/času nejprve na milisekundy a vezměte v úvahu časové pásmo uživatele aplikace nebo použije funkce DateAdd a DateDiff pro přidání nebo odečtení jedné z těchto hodnot.

Volby a Ano/Ne

Volby a datové typy se dvěma možnostmi nabízejí uživateli aplikace dvě nebo více možností k výběru. Například volba Stav objednávky může nabídnout hodnoty Nová, Odesláno, Fakturováno, a Zavřeno. Datový typ s dvěma možnostmi nabízí pouze dvě možnosti.

Oba tyto datové typy zobrazují své popisky v kontextu textového řetězce. Například ovládací prvek popisku zobrazuje jednu z možností stavu objednávky, pokud je vlastnost Text ovládacího prvku nastavena na vzorec, který odkazuje na tuto volbu. Popisky možností mohou být lokalizovány pro uživatele aplikace na různých místech.

Když uživatel aplikace vybere některou možnost a uloží tuto změnu, aplikace odešle data do databáze, která uchovává tato data ve formě, která je nezávislá na jazyce. Možnost ve volbě se přenáší a ukládá jako číslo a volba v datovém typu se dvěma možnostmi se vysílá a ukládá jako logická hodnota.

Popisky jsou pouze pro účely zobrazení. Nemůžete provádět přímé srovnání mezi popisky, protože jsou specifické pro určitý jazyk. Místo toho má každá volba výčet, který pracuje s podkladovým číslem nebo logickou hodnotou. Nemůžete například použít tento vzorec:

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

Ale můžete tento ekvivalentní vzorec:

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

U globálních voleb (které tabulky sdílejí) se název výčtu sady voleb shoduje s názvem globální volby. U místních voleb (které jsou omezeny na tabulku) může název obsahovat název tabulky. Toto chování zabrání konfliktům, pokud má více tabulek volby se stejným názvem. Například tabulka Účty může mít volbu Stav objednávky, jejíž název může být StavObjednávky (účty). Tento název obsahuje jednu nebo více mezer a závorky, takže pokud je ve vzorci odkazujete, musíte jej uzavřít do jednoduchých uvozovek.

Kromě toho se dvě hodnoty mohou chovat také jako logické hodnoty. Například hodnota s dvěma možnostmi s názvem Stav daně může mít popisky Zdanitelné a Nezdanitelné, které odpovídají hodnotám pravda, respektive nepravda. K předvedení můžete například použít tento vzorec:

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

Můžete také použít tento ekvivalentní vzorec:

If( ThisItem.Taxable, ...