Referenčné informácie o šablóne obrazovky kalendára pre aplikácie plátna

Pre aplikácie plátna v Power Apps pochopte, ako každý významný ovládací prvok v šablóne obrazovky kalendára prispieva k celkovej predvolenej funkcii obrazovky. Tento podrobný rozbor predstavuje vzorce správania a hodnoty ďalších vlastností, ktoré určujú, ako ovládacie prvky reagujú na vstup používateľa. Podrobnú diskusiu o predvolených funkciách tejto obrazovky nájdete v časti prehľad obrazovky kalendára.

Táto téma prezentuje niektoré významné ovládacie prvky a vysvetľuje výrazy alebo vzorce, ku ktorým rôzne vlastnosti (napr. Položky a OnSelect) z týchto ovládacích prvkov sú nastavené:

Predpoklady

Oboznámenie sa s tým, ako pridávať a konfigurovať obrazovky a ďalšie ovládacie prvky pri vytváraní aplikácie v Power Apps.

Rozbaľovací zoznam kalendára

Ovládací prvok dropdownCalendarSelection.

  • Vlastnosť: Items
    Hodnota: Office365.CalendarGetTables().value

    Táto hodnota je operácia konektora, ktorá načíta kalendáre Outlook používateľa aplikácie. Môžete zobraziť hodnotu, ktorú táto operácia získa.

  • Vlastnosť: OnChange
    Hodnota: Select(dropdownCalendarSelection)

    Keď používateľ vyberie možnosť v zozname, spustí sa funkcia vo vlastnosti onSelect ovládacieho prvku.

  • Vlastnosť: OnSelect
    Hodnota: Funkcia Ak, ktorá sa objaví v nasledujúcom bloku kódu, a niekoľko ďalších funkcií, ktoré sa objavia v bloku kódu, ktorý bude nasledovať potom.

    Táto časť vzorca sa spustí iba pri prvom výbere možnosti používateľa v rozbaľovacom zozname po otvorení aplikácie:

    If( IsBlank( _userDomain ),
        UpdateContext( {_showLoading: true} );
        Set( _userDomain, Right( User().Email, Len( User().Email ) - Find( "@", User().Email ) ) );
        Set( _dateSelected, Today() );
        Set( _firstDayOfMonth, DateAdd( Today(), 1 - Day( Today() ), Days ) );  
        Set( _firstDayInView, DateAdd( _firstDayOfMonth, -(Weekday(_firstDayOfMonth) - 1), Days ) );
        Set( _lastDayOfMonth, DateAdd( DateAdd( _firstDayOfMonth, 1, Months ), -1, Days ) )  
    );
    

    Predchádzajúci kód definuje nasledujúce premenné:

    • _UserDomain: Firemná doména používateľa aplikácie, použitá v e-mailovej adrese používateľa.
    • _dateSelected: Dnešný dátum (predvolené nastavenie). Galéria kalendára zvýrazňuje tento dátum a galéria udalostí zobrazuje udalosti, ktoré sú naplánované na daný dátum.
    • _firstDayOfMonth: Prvý deň aktuálneho mesiaca. Pretože (Today + (1 - Today)) = Today - Today + 1 = 1, táto funkcia DateAdd vždy vracia prvý deň v mesiaci.
    • _firstDayInView: Prvý deň, ktorý sa môže zobraziť v galérii kalendára. Táto hodnota nie je rovnaká ako prvý deň v mesiaci, pokiaľ mesiac nezačína v nedeľu. Ak chcete zabrániť zobrazeniu celého týždňa predchádzajúceho mesiaca, hodnota _firstDayInView je _firstDayOfMonth - Weekday(_firstDayOfMonth) + 1.
    • _lastDayOfMonth: Posledný deň aktuálneho mesiaca, ktorý je rovnaký ako prvý deň nasledujúceho mesiaca, mínus jeden deň.

    Funkcie po spustení funkcie Ak vždy, keď používateľ vyberie možnosť v rozbaľovacom zozname kalendára (nielen pri prvom otvorení aplikácie):

    Set( _calendarVisible, false );
    UpdateContext( {_showLoading: true} );
    Set( _myCalendar, dropdownCalendarSelection2.Selected );
    Set( _minDate, 
        DateAdd( _firstDayOfMonth, -(Weekday( _firstDayOfMonth ) - 2 + 1), Days )
    );
    Set(_maxDate, 
        DateAdd(
            DateAdd( _firstDayOfMonth, -(Weekday( _firstDayOfMonth ) - 2 + 1), Days ), 
            40, 
            Days
        )
    );
    ClearCollect( MyCalendarEvents, 
        Office365Outlook.GetEventsCalendarViewV2( _myCalendar.Name, 
            Text( _minDate, UTC ), 
            Text( _maxDate, UTC )
        ).value
    );
    UpdateContext( {_showLoading: false} );
    Set( _calendarVisible, true )
    

    Predchádzajúci kód definuje tieto premenné a jednu kolekciu:

    • _calendarVisible: Nastavte na nepravda, aby sa kalendár nezobrazil pri načítaní nového výberu.
    • _showLoading: Nastavte na nepravda, aby sa počas načítavania nového výberu zobrazovali indikátory načítania.
    • _myCalendar: Nastavte na aktuálnu hodnotu rozbaľovacia ponuka kalendára, aby sa získavali udalosti zo správneho kalendára.
    • _minDate: Nastavte na rovnakú hodnotu ako _firstDayInView. Táto premenná určuje, ktoré udalosti už boli stiahnuté z programu Outlook a uložené do vyrovnávacej pamäte v aplikácii.
    • _maxDate: Nastavte na posledný zobraziteľný deň v kalendári. Vzorec je _firstDayInView + 40. Kalendár zobrazuje maximálne 41 dní, takže premenná _maxDate vždy odráža posledný zobraziteľný deň a určuje, ktoré udalosti už boli stiahnuté z programu Outlook a uložené do vyrovnávacej pamäte v aplikácii.
    • MyCalendarEvents: Nastavte na zbierku udalostí používateľa z vybraného kalendára, s rozsahom od _MinDate do _maxDate.
    • _showLoading: Nastavte na nepravda ; _calendarVisible sa nastaví na pravda po načítaní všetkého ostatného.

Vlastnosti farieb

Všeobecné vlastnosti farieb nájdete v časti Vlastnosti farieb a orámovania v Power Apps.

Jedinečné vlastnosti farieb pre ovládanie rozbaľovacej ponuky kalendára:

  • ChevronBackground – Farba pozadia rozbaľovacej ponuky kalendára.
  • ChevronDisabledBackground – Farba pozadia rozbaľovacej ponuky kalendára je zakázaná.
  • ChevronFill – Farba výplne pre rozbaľovaciu ponuku kalendára.
  • ChevronDisabledFill – Farba výplne pre deaktivovanú rozbaľovaciu ponuku kalendára.
  • ChevronHoverBackground – Farba pozadia rozbaľovacej ponuky kalendára, keď na nej používateľ drží ukazovateľ myši.
  • ChevronHoverFill – Farba výplne rozbaľovacej ponuky kalendára, keď na nej používateľ drží ukazovateľ myši.

Ikona kalendára

Ovládací prvok iconCalendar.

  • Vlastnosť: OnSelect
    Hodnota: Štyri funkcie Nastaviť, ktoré resetujú galériu kalendára na dnešný dátum:

    Set( _dateSelected, Today() );
    Set( _firstDayOfMonth, DateAdd( Today(), 1 - Day( Today() ), Days) );
    Set( _firstDayInView, DateAdd(_firstDayOfMonth, -(Weekday( _firstDayOfMonth ) - 2 + 1), Days));
    Set( _lastDayOfMonth, DateAdd( DateAdd( _firstDayOfMonth, 1, Months ), -1, Days ) )
    

    Predchádzajúci kód vynuluje všetky premenné dátumu, ktoré sú potrebné na zobrazenie správneho zobrazenia kalendára:

    • _dateSelected sa zresetuje na dnešok.
    • _firstDayOfMonth sa zresetuje na prvý deň dnešného mesiaca.
    • _firstDayInView sa zresetuje na prvý deň, ktorý je viditeľný pri výbere dnešného mesiaca.
    • _lastDayOfMonth sa zresetuje na posledný deň dnešného mesiaca.

    Sekcia Rozbaľovacia ponuka kalendára tejto časti podrobnejšie vysvetľuje tieto premenné.

Šípka predchádzajúceho mesiaca

Ovládací prvok iconPredMonth.

  • Vlastnosť: OnSelect
    Hodnota: Štyri funkcie Nastaviť a funkcia Ak, ktoré zobrazujú predchádzajúci mesiac v galérii kalendára:

    Set( _firstDayOfMonth, DateAdd( _firstDayOfMonth, -1, Months ) );
    Set( _firstDayInView, 
        DateAdd( _firstDayOfMonth, -(Weekday( _firstDayOfMonth ) - 2 + 1), Days )
    );
    Set( _lastDayOfMonth, DateAdd(DateAdd( _firstDayOfMonth, 1, Months ), -1, Days ) );
    If( _minDate > _firstDayOfMonth,
        Collect( MyCalendarEvents,
            Office365Outlook.GetEventsCalendarViewV2( _myCalendar.Name,
                Text( _firstDayInView, UTC ), 
                Text( DateAdd( _minDate, -1, Days ), UTC )
            ).value
        );
        Set( _minDate, _firstDayInView )
    )
    

    Poznámka

    Definície pre _firstDayOfMonth, _firstDayInView a _lastDayOfMonth sú takmer totožné s tými v sekcii Rozbaľovacia ponuka kalendára tejto témy.

    Prvé tri riadky predchádzajúceho kódu sa spustia vždy, keď používateľ vyberie šípku predchádzajúceho mesiaca. Kód nastavuje premenné, ktoré sú potrebné na zobrazenie správneho zobrazenia kalendára. Zostávajúci kód sa spustí iba vtedy, ak používateľ predtým tento mesiac pre vybraný kalendár nevybral.

    Ak je to tak, _MinDate je prvý deň, ktorý sa objaví, keď sa zobrazí predchádzajúci mesiac. Než používateľ vyberie ikonu, _MinDate má minimálnu možnú hodnotu 23. dňa aktuálneho mesiaca. (Keď 1. marca pripadne na sobotu, _firstDayInView pre marec je 23. február.) To znamená, že ak si používateľ tento mesiac ešte nevybral, _MinDate je väčší ako nový _firstDayOfMonth a funkcia Ak vracia hodnotu pravda. Spustí sa kód a aktualizujú sa kolekcia a premenná:

    • MyCalendarEvents načítava udalosti z vybratého kalendára pomocou operácie Office365Outlook.GetEventsCalendarViewV2. Rozsah dátumov je medzi _firstDayInView a _MinDate – 1. Pretože MyCalendarEvents už obsahuje udalosti pre dátum _MinDate, 1 sa od tohto dátumu odpočíta pre maximálnu hodnotu v tomto novom rozsahu dátumov.

    • _MinDate je nastavený na aktuálny _firstDayInView, pretože toto je prvý dátum, pre ktorý boli udalosti načítané. Ak sa používateľ vráti k tomuto dátumu výberom šípky predchádzajúceho mesiaca, funkcia Ak vráti hodnotu nepravda; kód sa nespustí, pretože udalosti pre toto zobrazenie sú už uložené vo vyrovnávacej pamäti MyCalendarEvents.

Šípka nasledujúceho mesiaca

Ovládací prvok iconNextMonth.

  • Vlastnosť: OnSelect
    Hodnota: Štyri funkcie Nastaviť a funkcia Ak, ktoré zobrazujú nasledujúci mesiac v galérii kalendára:

    Set( _firstDayOfMonth, DateAdd( _firstDayOfMonth, 1, Months ) );
    Set( _firstDayInView, 
        DateAdd( _firstDayOfMonth, -(Weekday( _firstDayOfMonth ) - 2 + 1), Days ) );
    Set( _lastDayOfMonth, DateAdd( DateAdd( _firstDayOfMonth, 1, Months ), -1, Days ) );
    If(_maxDate < _lastDayOfMonth, 
    Collect(MyCalendarEvents,
            Office365Outlook.GetEventsCalendarViewV2(_myCalendar.Name,
                Text(DateAdd(_maxDate, 1, Days), UTC),
                Text(DateAdd(_firstDayInView, 40, Days))
            ).value
    );
    Set(_maxDate, DateAdd(_firstDayInView, 40, Days))
    )
    

    Poznámka

    Definície pre _firstDayOfMonth, _firstDayInView a _lastDayOfMonth sú takmer totožné s tými v sekcii Rozbaľovacia ponuka kalendára tejto témy.

    Prvé tri riadky predchádzajúceho kódu, ktoré sa spustia, keď používateľ vyberie šípku nasledujúceho mesiaca, nastavujú premenné, ktoré sú potrebné na zobrazenie správneho zobrazenia kalendára. Zostávajúci kód sa spustí iba vtedy, ak používateľ predtým tento mesiac pre vybraný kalendár nevybral.

    V tomto prípade je _maxDate je posledný deň, ktorý sa objaví, keď sa zobrazí predchádzajúci mesiac. Skôr ako používateľ vyberie šípku nasledujúceho mesiaca _maxDate má maximálnu možnú hodnotu 13. dňa nasledujúceho mesiaca. (Keď 1. februára pripadne na nedeľu nepriestupného roka, _maxDate je 13. marca, čo je _firstDayInView + 40 dní.) To znamená, že ak si používateľ tento mesiac ešte nevybral, _maxDate je väčší ako nový _lastDayOfMonth a funkcia Ak vracia hodnotu pravda. Spustí sa kód a aktualizujú sa kolekcia a premenná:

    • MyCalendarEvents načítava udalosti z vybratého kalendára pomocou operácie Office365Outlook.GetEventsCalendarViewV2. Rozsah dátumov je medzi _maxDate +1 dewň a _firstDayInView + 40 dní. Pretože MyCalendarEvents už obsahuje udalosti pre dátum _MinDate, 1 sa k tomuto dátumu pripočíta pre minimálnu hodnotu v tomto novom rozsahu dátumov. _firstDayInView + 40 je vzorec pre _maxDate, takže druhý dátum v rozsahu je iba nový _maxDate.

    • _maxDate je nastavený na _firstDayInView + 40 dní, pretože toto je posledný dátum, pre ktorý boli udalosti načítané. Ak sa používateľ vráti k tomuto dátumu výberom šípky nasledujúceho mesiaca, funkcia Ak vráti hodnotu nepravda; kód sa nespustí, pretože udalosti pre toto zobrazenie sú už uložené vo vyrovnávacej pamäti MyCalendarEvents.

Galéria kalendára

Ovládací prvok MonthDayGallery.

  • Vlastnosť: Items
    Hodnota: [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19, 20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41]

    Zostava 0 až 41 sa používa pre položky v galérii kalendára, pretože v najhoršom prípade sa v zobrazení kalendára musí zobraziť 42 celých dní. Toto nastane, keď prvý deň mesiaca pripadne na sobotu a posledný deň mesiaca mesiac na nedeľu. V tomto prípade kalendár zobrazuje šesť dní z predchádzajúceho mesiaca v riadku obsahujúcom prvý deň mesiaca a šesť dní z nasledujúceho mesiaca v riadku obsahujúcom posledný deň mesiaca. Toto je 42 jedinečných hodnôt, z ktorých 30 je za vybraný mesiac.

  • Vlastnosť: WrapCount
    Hodnota: 7

    Táto hodnota odráža sedemdňový týždeň.

Ovládací prvok názvu v galérii kalendára

Ovládací prvok názvu MonthDayGallery.

  • Vlastnosť: Text
    Hodnota: Day( DateAdd( _firstDayInView, ThisItem.Value, Days ) )

    Pripomeňme, že _firstDayInView je definovaný ako (_firstDayOfMonth – jeho hodnota dňa v pracovnom týždni) + 1. Toto vám hovorí, že _firstDayInView je vždy nedeľa a _firstDayOfMonth je vždy v prvom riadku MonthDayGallery. Z týchto dvoch dôvodov je _firstDayInView vždy v prvej bunke MonthDayGallery. ThisItem.Value je číslo tejto bunky vo vlastnosti položky MonthDayGallery. Takže, ak zoberieme _firstDayInView ako počiatočný bod, v každej bunke sa zobrazuje prírastok _firstDayInView + príslušná hodnota bunky.

  • Vlastnosť: Výplň
    Hodnota: Jedna funkcia Ak:

    If( DateAdd( _firstDayInView, ThisItem.Value ) = Today() && 
                DateAdd( _firstDayInView, ThisItem.Value ) = _dateSelected, 
            RGBA( 0, 0, 0, 0 ),
        DateAdd( _firstDayInView, ThisItem.Value) = Today(), 
            ColorFade( Subcircle.Fill, 0.67 ),
        Abs( Title.Text - ThisItem.Value) > 10,
            RGBA( 200, 200, 200, 0.3 ),
        RGBA( 0, 0, 0, 0 )
    )
    

    Ako je uvedené v opise vlastnosti Text, DateAdd(_firstDayInView, ThisItem.Value) predstavuje deň vo viditeľnej bunke. Berúc do úvahy túto skutočnosť, predchádzajúci kód vykoná tieto porovnania:

    1. Ak je hodnota bunky dnešný dátum A táto bunka je ekvivalentná _dateSelected, nezadávajte hodnotu výplne.

    2. Ak je hodnota bunky dnešný dátum, ale nie je ekvivalentná _dateSelected, zadajte výplň ColorFade.

    3. Posledné porovnanie nie je také jasné. Je to porovnanie skutočnej hodnoty textu v bunke a hodnoty položky bunky (číslo na displeji a číslo položky).

      Aby ste to lepšie pochopili, zvážte september 2018, mesiac, ktorý sa začína v sobotu a končí v nedeľu. V tomto prípade sa v kalendári v prvom riadku zobrazí 26. až 31. augusta a 1. septembra, a Abs(Title.Text - ThisItem.Value) = 26 až do 1. septembra. Potom Abs(Title.Text - ThisItem.Value) = 5. Zostane na 5. až po posledný riadok v kalendári, ktorý zobrazuje 30. september a 1. až 6. október. V tomto Abs(Title.Text - ThisItem.Value) bude stále 5 pre 30. september, ale 35 pre októbrové dátumy.

      Toto je vzorec: Pre dni zobrazené z predchádzajúceho mesiaca, Abs(Title.Text - ThisItem.Value) bude vždy rovné hodnote Title.Text hodnota prvého zobrazovaného dňa. Pre dni zobrazené v nasledujúcom mesiaci, Abs(Title.Text - ThisItem.Value) bude vždy rovné hodnote položky MonthDayGallery prvej bunky v danom mesiaci (v tomto prípade 1. októbra) mínus 1. A čo je najdôležitejšie, pre dni zobrazené v aktuálne zvolenom mesiaci, Abs(Title.Text - ThisItem.Value) sa rovnako bude vždy rovnať hodnote prvej položky daného mesiaca mínus 1 a nikdy nepresiahne 5, ako ukazuje predchádzajúci príklad. Takže je úplne platné napísať vzorec ako Abs(Title.Text - ThisItem.Value) > 5.

      Toto vyhlásenie skontroluje, či je hodnota dátumu mimo aktuálne vybraného mesiaca. Keď je, Výplň je čiastočne nepriehľadná šedá.

    Poznámka

    Platnosť tohto posledného porovnania si môžete skontrolovať zadaním ovládacieho prvku Štítok do galérie a nastavenie jeho vlastnosti Text na túto hodnotu:
    Abs(Title.Text - ThisItem.Value).

  • Vlastnosť: Viditeľné
    Hodnota:

    !(
        DateAdd( _firstDayInView, ThisItem.Value, Days ) - 
            Weekday( DateAdd( _firstDayInView, ThisItem.Value,Days ) ) + 1 
        > _lastDayOfMonth
    )
    

    Predchádzajúce vyhlásenie skontroluje, či je bunka v riadku, kde sa nevyskytujú žiadne dni v aktuálnom vybranom mesiaci. Pripomeňme, že odčítaním hodnoty dňa v týždni od jeho hodnoty dátumu a pridaním hodnoty 1 sa vždy vráti prvá položka v riadku, v ktorom sa deň nachádza. Toto vyhlásenie teda skontroluje, či sa prvý deň v riadku nachádza po poslednom dni sledovaného mesiaca. Ak áno, nezobrazí sa, pretože celý riadok obsahuje dni nasledujúceho mesiaca.

  • Vlastnosť: OnSelect
    Hodnota: Funkcia Nastaviť, ktorá nastaví premennú _dateSelected na dátum vybratej bunky:

    Set( _dateSelected, DateAdd( _firstDayInView, ThisItem.Value, Days ) )
    

Ovládací prvok kruhu v galérii kalendára

Ovládací prvok kruhu MonthDayGallery.

  • Vlastnosť: Viditeľné
    Hodnota: Vzorec, ktorý určuje, či sú naplánované nejaké udalosti pre vybraný dátum a či sú viditeľné ovládacie prvky Podradený kruh a Nadpis:

    CountRows(
        Filter( MyCalendarEvents, 
            DateValue( Text( Start ) ) = DateAdd( _firstDayInView, ThisItem.Value, Days )
        )
    ) > 0 && !Subcircle.Visible && Title.Visible
    

    Ovládací prvok Kruh je viditeľný, ak pole Štart pre každú udalosť je rovnocenné s dátumom tejto bunky, ak je ovládací prvok Nadpis viditeľný, a ak ovládací prvok Podradený kruh nie je viditeľný. Inými slovami, tento ovládací prvok je viditeľná, keď sa v tento deň vyskytne aspoň jedna udalosť a tento deň nie je vybratý. Ak je vybratý, udalosti pre daný deň sa zobrazia v ovládacom prvku CalendarEventsGallery.

Ovládací prvok podradeného kruhu v galérii kalendára

Ovládací prvok podradeného kruhu MonthDayGallery.

  • Vlastnosť: Viditeľné
    Hodnota:

    DateAdd( _firstDayInView, ThisItem.Value ) = _dateSelected && Title.Visible
    

    Ovládací prvok Subcircle je viditeľný, keď _dateSelected je ekvivalentný dátumu bunky a ovládací prvok Nadpis je viditeľný. Inými slovami, tento ovládací prvok sa objaví, keď je bunka aktuálne vybraný dátum.

Galéria udalostí

Ovládací prvok CalendarEventsGallery.

  • Vlastnosť: Items
    Hodnota: Vzorec, ktorý triedi a filtruje galériu udalostí:

    SortByColumns(
        Filter( MyCalendarEvents,
            Text( Start, DateTimeFormat.ShortDate ) = Text( _dateSelected, DateTimeFormat.ShortDate )
        ),
        "Start"
    )
    

    Kolekcia MyCalendarEvents obsahuje všetky udalosti medzi _MinDate a _maxDate. Na zobrazenie udalostí iba pre vybraný dátum sa použije filter na MyCalendarEvents na zobrazenie udalostí, ktorých počiatočný dátum je ekvivalentný k \ _dateSelected. Položky sú potom zoradené podľa dátumu začiatku, aby boli usporiadané v poradí.

Ďalšie kroky

Poznámka

Môžete nás informovať o svojich voľbách jazyka pre dokumentáciu? Absolvujte krátky prieskum. (upozorňujeme, že tento prieskum je v angličtine)

Prieskum bude trvať približne sedem minút. Nezhromažďujú sa žiadne osobné údaje (vyhlásenie o používaní osobných údajov).