Referentne informacije o predlošku zaslona kalendara za aplikacije radnog područja

Za aplikacije radnog područja u Power Apps shvatite kako svaka značajna kontrola u predlošku zaslona kalendara doprinosi ukupnoj zadanoj funkcionalnosti zaslona. Ovaj duboki uvid predstavlja formule ponašanja i vrijednosti drugih svojstava koja određuju kako kontrole reagiraju na unos korisnika. Sveobuhvatnu raspravu o zadanoj funkcionalnosti ovog zaslona pogledajte u odjeljku Pregled zaslona kalendara.

Ova tema naglašava neke značajne kontrole i objašnjava izraze ili formule kojima odgovaraju različita svojstva (kao što je Stavke i OnSelect) na koje su postavljene ove kontrole:

Preduvjet

Poznavanje načina dodavanja i konfiguriranja zaslona i drugih kontrola prilikom stvaranja aplikacije u Power Apps.

Padajući popis kalendara

Kontrola dropdownCalendarSelection.

  • Svojstvo: Stavke
    Vrijednost: Office365.CalendarGetTables().value

    Ta je vrijednost postupak poveznika koji dohvaća kalendare programa Outlook korisnika aplikacije. Možete pregledati vrijednost koju postupak dohvaća.

  • Svojstvo: OnChange
    Vrijednost: Select(dropdownCalendarSelection)

    Ako korisnik na popisu odabere mogućnost, izvodi se funkcija u svojstvu OnSelect kontrole.

  • Svojstvo: OnSelect
    Vrijednost: funkcija If koja se prikazuje u sljedećem bloku koda i nekoliko dodatnih funkcija koje se prikazuju u sljedećem bloku koda.

    Taj dio formule izvodi se samo prvi put kada korisnik nakon otvaranja aplikacije odabere mogućnost na padajućem popisu:

    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 ) )  
    );
    

    Prethodni kod određuje sljedeće varijable:

    • _userDomain: domena tvrtke korisnika aplikacije, koja odgovara adresi e-pošte korisnika.
    • _dateSelected: današnji datum (zadano). Galerija kalendara označava taj datum, a galerija događaja prikazuje događaje koji su zakazani za taj datum.
    • _firstDayOfMonth: prvi dan tekućeg mjeseca. Zbog (Today + (1 - Today)) = Today - Today + 1 = 1 ta funkcija DateAdd uvijek vraća prvi dan u mjesecu.
    • _firstDayInView: prvi dan koji galerija kalendara može prikazati. Vrijednost nije ista kao prvi dan u mjesecu, osim ako mjesec započinje u nedjelju. Da biste spriječili prikazivanje čitavog tjedna prethodnog mjeseca, vrijednost za _firstDayInView je _firstDayOfMonth - Weekday(_firstDayOfMonth) + 1.
    • _lastDayOfMonth: zadnji dan tekućeg mjeseca, koji je isti kao prvi dan sljedećeg mjeseca, minus jedan dan.

    Funkcije nakon funkcije If izvode se svaki put kada korisnik odabere mogućnost na padajućem popisu kalendara (ne samo prvi put kada korisnik otvori aplikaciju):

    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 )
    

    Prethodni kod određuje te varijable i jednu zbirku:

    • _calendarVisible: postavite na false kako se kalendar ne bi prikazivao tijekom učitavanja novog odabira.
    • _showLoading: postavite na true da se tijekom učitavanja novog odabira prikazuje pokazatelj učitavanja.
    • _myCalendar: postavite na trenutačnu vrijednost kontrole padajućeg popisa kalendara da bi se dohvatili događaji iz ispravnog kalendara.
    • _minDate: postavite na istu vrijednost kao za _firstDayInView. Ta varijabla određuje koji su događaji već dohvaćeni iz Outlooka i predmemorirani u aplikaciji.
    • _maxDate: postavite na posljednji dan u kalendaru koji je moguće prikazati. Formula je _firstDayInView + 40. Kalendar prikazuje najviše 41 dan, stoga varijabla _maxDate uvijek odražava posljednji dan koji je moguće prikazati i određuje koji su događaji već dohvaćeni iz Outlooka i predmemorirani u aplikaciji.
    • MyCalendarEvents: postavite na zbirku događaja korisnika iz odabranog kalendara, počevši od _minDate do _maxDate.
    • _showLoading: postavite na false; varijabla _calendarVisible postavlja se na true kada se sve ostalo učita.

Svojstva boje

Opća svojstva boje potražite u odjeljku Boja i svojstva obruba u Power Apps.

Jedinstvena svojstva boje za kontrolu padajućeg popisa kalendara:

  • ChevronBackground – boja pozadine za padajući popis kalendara.
  • ChevronDisabledBackground – boja pozadine za onemogućeni padajući popis kalendara.
  • ChevronFill – boja ispune za padajući popis kalendara.
  • ChevronDisabledFill – boja ispune za onemogućeni padajući popis kalendara.
  • ChevronHoverBackground – boja pozadine padajućeg popisa kalendara kada korisnik na njemu drži pokazivač miša.
  • ChevronHoverFill – boja ispune padajućeg popisa kalendara kada korisnik na njemu drži pokazivač miša.

Ikona kalendara

Kontrola iconCalendar.

  • Svojstvo: OnSelect
    Vrijednost: četiri funkcije Set koje ponovno postavljaju galeriju kalendara na današnji datum:

    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 ) )
    

    Prethodni kod ponovno postavlja sve varijable datuma koje su potrebne za prikaz odgovarajućeg prikaza kalendara.

    • _dateSelected ponovno se postavlja na danas.
    • _firstDayOfMonth ponovno se postavlja na prvi dan tekućeg mjeseca.
    • _firstDayInView ponovno se postavlja na prvi dan koji je moguće prikazati kad je odabran tekući mjesec.
    • _lastDayOfMonth ponovno se postavlja na posljednji dan tekućeg mjeseca.

    Navedene varijable detaljnije su objašnjenje u odjeljku Padajući popis kalendara ove teme.

Ševron za prethodni mjesec

Kontrola iconPrevMonth.

  • Svojstvo: OnSelect
    Vrijednost: četiri funkcije Set i funkcija If koje u galeriji kalendara prikazuju prethodni mjesec:

    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 )
    )
    

    Napomena

    Odredišta za _firstDayOfMonth, _firstDayInView i _lastDayOfMonth gotovo su jednaka odredištima u odjeljku Padajući popis kalendara u ovoj temi.

    Prva tri retka prethodnog koda izvode se svaki put kada korisnik odabere ševron za prethodni mjesec. Kod postavlja varijable koje su potrebne za prikaz odgovarajućeg prikaza kalendara. Preostali se kod izvodi samo ako korisnik nije prethodno odabrao taj mjesec za odabrani kalendar.

    U tom je slučaju _minDate prvi dan koji se prikazuje kada se prikaže prethodni mjesec. Prije nego što korisnik odabere ikonu, varijabla _minDate ima najmanju moguću vrijednost 23. tekućeg mjeseca. (Ako je 1. ožujka subota, _firstDayInView za ožujak je 23. veljače.) To znači da ako korisnik još nije odabrao taj mjesec, vrijednost za _minDate veća je od nove vrijednosti za _firstDayOfMonth, a funkcija If vraća vrijednost true. Izvodi se kod i ažuriraju se zbirka i varijabla:

    • MyCalendarEvents dohvaća događaje iz odabranog kalendara pomoću operacije Office365Outlook.GetEventsCalendarViewV2. Raspon datuma je između _firstDayInView i _minDate – 1 dan. Zbog toga što MyCalendarEvents već sadrži događaje na datum _minDate, od tog se datuma oduzima 1 dan za najveću vrijednost u tom novom rasponu datuma.

    • _minDate postavljen je na trenutačni _firstDayInView jer je to prvi datum za koji su dohvaćeni događaji. Ako se korisnik vrati na taj datum odabirom ševrona za prethodni mjesec, funkcija If vraća vrijednost false; kod se ne izvodi jer su događaji za taj prikaz već predmorirani u MyCalendarEvents.

Ševron za sljedeći mjesec

Kontrola iconNextMonth.

  • Svojstvo: OnSelect
    Vrijednost: četiri funkcije Set i funkcija If koje u galeriji kalendara prikazuju sljedeći mjesec:

    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))
    )
    

    Napomena

    Odredišta za _firstDayOfMonth, _firstDayInView i _lastDayOfMonth gotovo su jednaka odredištima u odjeljku Padajući popis kalendara u ovoj temi.

    Prva tri retka prethodnog koda, koji se izvodi kada korisnik odabere ševron za sljedeći mjesec, postavljaju varijable koje su potrebne za prikaz odgovarajućeg prikaza kalendara. Preostali se kod izvodi samo ako korisnik nije prethodno odabrao taj mjesec za odabrani kalendar.

    U tom je slučaju _maxDate posljednji dan koji se prikazuje kada se prikaže prethodni mjesec. Prije nego što korisnik odabere ševron za sljedeći mjesec, varijabla _maxDate ima najveću moguću vrijednost 13. sljedećeg mjeseca. (Ako 1. veljače pada na subotu u godini koja nije prijestupna, _maxDate 13. ožujka, odnosno _firstDayInView + 40 dana.) To znači da ako korisnik još nije odabrao taj mjesec, vrijednost za _maxDate veća je od nove vrijednosti za _lastDayOfMonth, a funkcija If vraća vrijednost true. Izvodi se kod i ažuriraju se zbirka i varijabla:

    • MyCalendarEvents dohvaća događaje iz odabranog kalendara pomoću operacije Office365Outlook.GetEventsCalendarViewV2. Raspon datuma je između _maxDate + 1 dan i _firstDayInView + 40 dana. Zbog toga što MyCalendarEvents već sadrži događaje na datum _minDate, tom se datumu dodaje 1 dan za najmanju vrijednost u tom novom rasponu datuma. _firstDayInView + 40 formula je za _maxDate, zato je drugi datum u rasponu samo novi _maxDate.

    • _maxDate postavljen je na _firstDayInView + 40 dana jer je to posljednji dan za koji su dohvaćeni događaji. Ako se korisnik vrati na taj datum odabirom ševrona za sljedeći mjesec, funkcija If vraća vrijednost false; kod se ne izvodi jer su događaji za taj prikaz već predmorirani u MyCalendarEvents.

Kontrola MonthDayGallery.

  • Svojstvo: Stavke
    Vrijednost: [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]

    Skup vrijednosti od 0 do 41 upotrebljava se za stavke u galeriji kalendara je će, u najgorem slučaju, kalendarski prikaz morati prikazati 42 čitavih dana. To se događa kada je prvi dan u mjesecu subota, a posljednji dan nedjelja. U tom slučaju kalendar prikazuje šest dana iz prethodnog mjeseca u retku koji sadrži prvi dan u mjesecu i šest dana iz sljedećeg mjeseca u retku koji sadrži posljednji dan u mjesecu. To vrijedi za 42 jedinstvene vrijednosti, od kojih je 30 za odabrani mjesec.

  • Svojstvo: WrapCount
    Vrijednost: 7

    Ta vrijednost odražava tjedan od sedam dana.

Naziv kontole Galerijamjesecdan.

  • Svojstvo: Tekst
    Vrijednost: Day( DateAdd( _firstDayInView, ThisItem.Value, Days ) )

    Nemojte zaboraviti da je _firstDayInView određen kao (_firstDayOfMonth – vrijednost na radni dan) + 1. To vam govori da je _firstDayInView uvijek nedjelja, a _firstDayOfMonth uvijek je u prvom retku galerije MonthDayGallery. Zbog tih je dviju činjenica _firstDayInView uvijek u prvoj ćeliji galerije MonthDayGallery. ThisItem.Value predstavlja broj za tu ćeliju u svojstvu stavke MonthDayGallery. Dakle, ako uzmemo _firstDayInView kao polazište, u svakoj se ćeliji prikazuje povećanje za _firstDayInView + vrijednost odgovarajuće ćelije.

  • Svojstvo: Ispuna
    Vrijednost: jedna funkcija If:

    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 )
    )
    

    Kao što je objašnjeno u opisu svojstva Tekst, DateAdd(_firstDayInView, ThisItem.Value) predstavlja dan u vidljivoj ćeliji. Uzimajući to u obzir, prethodni kod izvršava sljedeće usporedbe:

    1. Ako je vrijednost ćelije današnji datum I ćelija je ekvivalentna _dateSelected, nemojte navoditi vrijednost ispune.

    2. Ako je vrijednost ćelije današnji datum ali datum nije jednak _dateSelected, navedite vrijednost ispune ColorFade.

    3. Posljednja usporedba nije u potpunosti jasna. To je usporedba stvarne vrijednosti teksta u ćeliji i vrijednosti stavke ćelije (broj na zaslonu i broj stavke).

      Da biste bolje razumjeli tu usporedbu, uzmite za primjer rujan 2018. godine, mjesec koji započinje u subotu i završava u nedjelju. U tom slučaju kalendar prikazuje datume od 26. do 31. kolovoza i 1. rujna u prvom retku i Abs(Title.Text - ThisItem.Value) = 26 do 1. rujna. Tada je Abs(Title.Text - ThisItem.Value) = 5. Vrijednost će ostati 5 do zadnjeg retka u kalendaru, koji prikazuje datum 30. rujna i datume od 1. do 6. listopada. U tom Abs(Title.Text - ThisItem.Value) i dalje će biti 5 za 30. rujna, ali će za datume u listopadu biti 35.

      Uzorak je sljedeći: za dane prikazane iz prethodnog mjeseca, Abs(Title.Text - ThisItem.Value) uvijek je jednaka vrijednosti Title.Text prvog dana na zaslonu. Za dane koji se prikazuju u sljedećem mjesecu Abs(Title.Text - ThisItem.Value) uvijek će biti jednaka vrijednosti stavke MonthDayGallery prve ćelije tog mjeseca (u ovom slučaju 1. listopada) minus 1. I ono što je najvažnije, za dane prikazane u trenutačno odabranom mjesecu Abs(Title.Text - ThisItem.Value) također će uvijek biti jednaka vrijednosti prve stavke tog mjeseca minus 1 i nikad neće premašiti 5, kao što je prikazano u prethodnom primjeru. Dakle, potpuno je valjano formulu zapisati kao Abs(Title.Text - ThisItem.Value) > 5.

      Ta izjava provjerava je li vrijednost datuma izvan trenutačno odabranog mjeseca. Ako je, Ispuna je djelomično neprozirna siva.

    Napomena

    Valjanost posljednje usporedbe možete provjeriti sami tako da u galeriju umetnete kontrolu Oznaka i njezino svojstvo Tekst postavite na sljedeću vrijednost:
    Abs(Title.Text - ThisItem.Value).

  • Svojstvo: Vidljivo
    Vrijednost:

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

    Prethodna izjava provjerava je li ćelija u retku u kojem nisu prikazani dani u trenutačno odabranom mjesecu. Podsjetimo se da oduzimanje vrijednosti radnog dana za bilo koji dan od njegove vrijednosti datuma i dodavanje 1 uvijek vraća prvu stavku u retku u kojem se taj dan nalazi. Ta izjava provjerava pada li prvi dan u retku nakon posljednjeg dana u mjesecu koji je moguće prikazati. Ako pada, dan se neće prikazati jer cijeli redak sadrži dane sljedećeg mjeseca.

  • Svojstvo: OnSelect
    Vrijednost: funkcija Set koja varijablu _dateSelected postavlja na datum odabrane ćelije:

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

Kontrola kruga MonthDayGallery.

  • Svojstvo: Vidljivo
    Vrijednost: formula koja određuje jesu li za odabrani datum zakazani događaji i jesu li kontrole Sekundarni krug i Naslov vidljive:

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

    Kontrola Krug vidljiva je ako je polje Početak bilo kojeg događaja jednako datumu te ćelije, ako je kontrola Naslov vidljiva i ako kontrola Sekundarni krug nije vidljiva. Drugim riječima, ta je kontrola vidljiva kada se na taj dan dogodi barem jedan događaj, a taj dan nije odabran. Ako je odabran, događaji zakazani za taj dan bit će prikazani u kontroli CalendarEventsGallery.

Kontrola sekundarnog kruga MonthDayGallery.

  • Svojstvo: Vidljivo
    Vrijednost:

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

    Kontrola Sekundarni krug vidljiva je kada je _dateSelected jednak datumu ćelije i vidljiva je kontrola Naslov. Drugim riječima, ta se kontrola prikazuje kada je ćelija trenutačno odabrani datum.

Kontrola CalendarEventsGallery.

  • Svojstvo: Stavke
    Vrijednost: formula koja sortira i filtrira galeriju događaja:

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

    Zbirka MyCalendarEvents sadrži sve događaje između _minDate i _maxDate. Kako bi se prikazivali događaji samo za odabrani datum, primjenjuje se filtar na MyCalendarEvents za prikaz događaja čiji je datum početka jednak \ _dateSelected. Stavke se zatim sortiraju prema datumima početka kako bi se postavili u slijedni redoslijed.

Sljedeći koraci