Viitetietoja kaaviosovellusten kalenterinäyttömallista

Tutustu Power Appsin kaaviosovellusten osalta siihen, miten kukin merkittävä kalenterinäyttömallin ohjausobjekti vaikuttaa näytön yleisiin oletustoimintoihin. Tämä syväkatsaus esittää toimintatapakaavat ja muiden ominaisuuksien arvot, jotka määrittävät, miten ohjausobjektit vastaavat käyttäjäsyötteisiin. Tämän näytön oletustoimintoja käsitellään korkealla tasolla kalenterinäytön yleiskatsauksessa.

Tässä aiheessa tuodaan esille joitakin merkittäviä ohjausobjekteja ja selitetään lausekkeet tai kaavat, joille näiden ohjausobjektin eri ominaisuudet (kuten Items ja OnSelect) määritetään:

Edellytykset

Perehtyneisyys siihen, miten näyttöjä ja muita ohjausobjekteja lisätään ja määritetään luotaessa sovellusta Power Appsissa.

Avattava kalenteriluettelo.

dropdownCalendarSelection-ohjausobjekti.

  • Ominaisuus: Items
    Arvo: Office365.CalendarGetTables().value

    Tämä arvo on yhdistintoiminto, joka noutaa sovelluksen käyttäjän Outlook-kalenterit. Näet arvon, jonka tämä toiminto noutaa.

  • Ominaisuus: OnChange
    Arvo: Select(dropdownCalendarSelection)

    Kun käyttäjä valitsee vaihtoehdon luettelosta, ohjausobjektin OnSelect-ominaisuuden toiminto suoritetaan.

  • Ominaisuus: OnSelect
    Value: Jos-toiminto, joka näkyy seuraavassa koodilohkossa, ja useita lisätoimintoja, jotka tulevat koodilohkossa sen jälkeen.

    Tämä kaavan osa suoritetaan vain ensimmäisellä kerralla, kun käyttäjä valitsee vaihtoehdon avattavasta luettelosta sovelluksen avaamisen jälkeen:

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

    Edeltävä koodi määrittää seuraavat muuttujat:

    • _userDomain: Sovelluksen käyttäjän yrityksen verkkotunnus, joka näkyy käyttäjän sähköpostiosoitteessa.
    • _dateSelected: kuluvan päivän päivämäärä (oletusarvoisesti). Kalenterivalikoima korostaa tämän päivän, ja tapahtumavalikoimassa näkyvät kyseiselle päivälle ajoitetut tapahtumat.
    • _firstDayOfMonth: Kuluvan kuukauden ensimmäinen päivä. Koska (Today + (1 - Today)) = Today - Today + 1 = 1, tämä DateAdd-toiminto palauttaa aina kuukauden ensimmäisen päivän.
    • _firstDayInView: Ensimmäinen päivä, jonka kalenterivalikoima voi näyttää. Tämä arvo ei ole sama kuin kuukauden ensimmäinen päivä, ellei kuukausi ala sunnuntaina. Jotta näkyviin ei tule kokonaista edellisen kuukauden viikkoa, arvo _firstDayInView on _firstDayOfMonth - Weekday(_firstDayOfMonth) + 1.
    • _lastDayOfMonth: Kuluvan kuukauden viimeinen päivä, joka on sama kuin seuraavan kuukauden ensimmäinen päivä, josta vähennetään yksi päivä.

    Jos-toiminnon jälkeiset toiminnot suoritetaan aina, kun käyttäjä valitsee vaihtoehdon avattavasta kalenteriluettelosta (ei vain ensimmäisellä kerralla, kun käyttäjä avaa sovelluksen):

    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 )
    

    Edellä oleva koodi määrittää nämä muuttujat ja yhden kokoelman:

    • _calendarVisible: Valueksi määritetään epätosi, jotta kalenteri ei tule näkyviin, kun uusi valinta ladataan.
    • _showLoading: Valueksi määritetään tosi, jotta latausilmaisimet tulevat näkyviin, kun uutta valintaa ladataan.
    • _myCalendar: Valueksi määritetään avattava kalenterivalikko -ohjausobjektin kulloinenkin arvo, jotta tapahtumat noudetaan oikeasta kalenterista.
    • _minDate: Valueksi määritetään sama kuin muuttujalle _firstDayInView. Tämä muuttuja määrittää, mitkä tapahtumat on jo noudettu Outlookista ja tallennettu sovelluksen välimuistiin.
    • _maxDate: Valueksi määritetään kalenterin viimeinen tarkasteltava päivä. Kaava on _firstDayInView + 40. Kalenterissa näkyy enintään 41 päivää, joten _maxdate -muuttuja vastaa aina viimeisintä tarkasteltavaa päivää ja määrittää, mitkä tapahtumat on jo noudettu Outlookista ja tallennettu sovelluksen välimuistiin.
    • MyCalendarEvents: Valueksi määritetään käyttäjän tapahtumien kokoelma valitusta kalenterista aikaväliltä _minDate_maxDate.
    • _showLoading: Valueksi määritetään epätosi; muuttujan _calendarVisible arvoksi määritetään tosi, kun kaikki muu on ladattu.

Colorominaisuudet

Tietoja yleisistä väriominaisuuksista: Coloren ja reunaviivojen ominaisuudet Power Appsissa.

Avattavan kalenteriohjausobjektin yksilölliset väriominaisuudet:

  • ChevronBackground - Avattavan kalenterin taustaväri.
  • ChevronDisabledBackground - Käytöstä poistetun avattavan kalenterin taustaväri.
  • ChevronFill - Avattavan kalenterin täyttöväri.
  • ChevronDisabledFill - Käytöstä poistetun avattavan kalenterin täyttöväri
  • ChevronHoverBackground - Avattavan kalenterin taustaväri, kun käyttäjä pitää hiiren osoitinta sen päällä.
  • ChevronHoverFill - Avattavan kalenterin täyttöväri, kun käyttäjä pitää hiiren osoitinta sen päällä

Kalenterikuvake

iconCalendar-ohjausobjekti.

  • Ominaisuus: OnSelect
    Value: Neljä Määritä-toimintoa, jotka palauttavat kalenterivalikoiman kuluvan päivän päivämäärään:

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

    Edeltävä koodi palauttaa kaikki oikean kalenterinäkymän näyttämiseen tarvittavat päivämäärämuuttujat:

    • _dateSelected -arvoksi palautetaan kuluva päivä.
    • _firstDayOfMonth -arvoksi palautetaan kuluvan kuukauden ensimmäinen päivä.
    • _firstDayInView -arvoksi palautetaan ensimmäinen tarkasteltava päivä, kun valittuna on kuluva kuukausi.
    • _lastDayOfMonth -arvoksi palautetaan kuluvan kuukauden viimeinen päivä.

    Tämän aiheen Avattava kalenteri -kohdassa nämä muuttujat selitetään tarkemmin.

Edellisen kuukauden nuolenkärkipainike

iconPrevMonth-ohjausobjekti.

  • Ominaisuus: OnSelect
    Value: Neljä Määritä-toimintoa ja Jos-toiminto, jotka näyttävät kalenterivalikoiman edellisen kuukauden:

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

    Huomautus

    Muuttujien _firstDayOfMonth, _firstDayInView ja _lastDayOfMonth ovat lähes samat kuin tämän aiheen Avattava kalenteri -osassa.

    Edellisen koodin kolme ensimmäistä riviä suoritetaan aina, kun käyttäjä valitsee edellisen kuukauden nuolenkärkipainikkeen. Koodi määrittää muuttujat, jotka tarvitaan oikean kalenterinäkymän näyttämiseksi. Jäljelle jäävä koodi suoritetaan vain, jos käyttäjä ei ole aikaisemmin valinnut kuluvaa kuukautta valitusta kalenterista.

    Tässä tapauksessa _minDate on ensimmäinen päivä, joka tulee näkyviin, kun näkyvissä on edellinen kuukausi. Ennen kuin käyttäjä valitsee kuvakkeen, _minDate-muuttujan pienin mahdollinen arvo on kuluvan kuukauden 23. päivä. (Kun 1. maaliskuuta on lauantai, maaliskuun _firstDayInView on 23. helmikuuta.) Jos käyttäjä ei ole vielä valinnut tätä kuukautta, _minDate on tällöin suurempi kuin uusi _firstDayOfMonth ja Jos-toiminnon tuloksena on tosi. Koodi suoritetaan ja kokoelmaa ja muuttujaa päivitetään:

    • MyCalendarEvents hakee tapahtumat valitusta kalenterista Office365Outlook.GetEventsCalendarViewV2 -toiminnolla. Päivämääräväli on välillä _firstDayInView ja _minDate - 1. Koska MyCalendarEvents sisältää jo tapahtumia _minDate-päivänä, 1 vähennetään kyseisestä päivämäärästä, jotta saadaan uuden päivämäärävälinen enimmäisarvo.

    • _minDate-arvoksi määritetään nykyinen _firstDayInView, koska kyseessä on ensimmäinen päivämäärä, jolle on noudettu tapahtumia. Jos käyttäjä palaa tähän päivämäärään valitsemalla edellisen kuukauden nuolenkärkipainikkeen, Jos-toiminnon tuloksena on epätosi. Koodia ei suoriteta, koska tämän näkymän tapahtumat on jo tallennettu MyCalendarEvents-välimuistiin.

Seuraavan kuukauden nuolenkärkipainike

iconNextMonth-ohjausobjekti.

  • Ominaisuus: OnSelect
    Value: Neljä Määritä-toimintoa ja Jos-toiminto, jotka näyttävät kalenterivalikoiman seuraavan kuukauden:

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

    Huomautus

    Muuttujien _firstDayOfMonth, _firstDayInView ja _lastDayOfMonth ovat lähes samat kuin tämän aiheen Avattava kalenteri -osassa.

    Edellisen koodin kolme ensimmäistä riviä, jotka suoritetaan, kun käyttäjä valitsee seuraavan kuukauden nuolenkärkipainikkeen, määrittävät muuttujat, jotka tarvitaan asianmukaisen kalenterinäkymän näyttämiseen. Jäljelle jäävä koodi suoritetaan vain, jos käyttäjä ei ole aikaisemmin valinnut kuluvaa kuukautta valitusta kalenterista.

    Tässä tapauksessa _maxDate on viimeinen päivä, joka tulee näkyviin, kun näkyvissä on edellinen kuukausi. Ennen kuin käyttäjä valitsee seuraavan kuukauden nuolenkärkipainikkeen, _maxdate-muuttujan suurin mahdollinen arvo on seuraavan kuukauden 13. päivä. (Kun 1. helmikuuta on muun kuin karkausvuoden sunnuntai, _maxDate on 13. maaliskuuta eli _firstDayInView + 40 päivää.) Jos käyttäjä ei ole vielä valinnut tätä kuukautta, _maxDate on tällöin suurempi kuin uusi _lastDayOfMonth ja Jos-toiminnon tuloksena on tosi. Koodi suoritetaan ja kokoelmaa ja muuttujaa päivitetään:

    • MyCalendarEvents hakee tapahtumat valitusta kalenterista Office365Outlook.GetEventsCalendarViewV2 -toiminnolla. Päivämääräväli on välillä _maxDate + 1 päivä _firstDayInView + 40 päivää. Koska MyCalendarEvents sisältää jo tapahtumia _minDate-päivänä, 1 lisätään kyseisestä päivämäärästä, jotta saadaan uuden päivämäärävälinen vähimmäisarvo. _firstDayInView + 40 on _maxDate-muuttujan kaava, joten aikavälin toinen päivämäärä on vain uusi _maxDate.

    • _maxDate-arvoksi määritetään _firstDayInView + 40 päivää, koska kyseessä on viimeinen päivämäärä, jolle on noudettu tapahtumia. Jos käyttäjä palaa tähän päivämäärään valitsemalla seuraavan kuukauden nuolenkärkipainikkeen, Jos-toiminnon tuloksena on epätosi. Koodia ei suoriteta, koska tämän näkymän tapahtumat on jo tallennettu MyCalendarEvents-välimuistiin.

Kalenterivalikoima

MonthDayGallery-ohjausobjekti.

  • Ominaisuus: Items
    Arvo: [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]

    Joukkoa 0–41 käytetään kalenterivalikoiman kohteille, koska kalenterinäkymässä on pahimmassa tapauksessa näyttävä 42 täyttä päivää. Tämä tapahtuu, kun kuukauden ensimmäinen päivä on lauantai ja kuukauden viimeinen päivä on sunnuntai. Tällöin kalenterissa näkyy kuusi päivää edelliseltä kuukaudelta kuukauden ensimmäisen päivän sisältävällä rivillä ja kuusi seuraavan kuukauden päivää kuukauden viimeisen päivän sisältävällä rivillä. Tämä tarkoittaa 42 yksilöllistä arvoa, joista 30 kuuluu valittuun kuukauteen.

  • Ominaisuus: WrapCount
    Arvo: 7

    Tämä arvo vastaa seitsemän päivän viikkoa.

Title-ohjausobjekti kalenterivalikoimassa

MonthDayGallery Title -ohjausobjekti.

  • Ominaisuus: Text
    Arvo: Day( DateAdd( _firstDayInView, ThisItem.Value, Days ) )

    Muista, että muuttujan _firstDayInView määritys on (_firstDayOfMonth - sen viikonpäivän arvo) + 1. Tämä tarkoittaa, että _firstDayInView on aina sunnuntai ja _firstDayOfMonth on aina ohjausobjektin MonthDayGallery ensimmäinen rivi. Näiden kahden seikan vuoksi _firstDayInView on aina ohjausobjektin MonthDayGallery ensimmäinen solu. ThisItem.Value on kyseisen solun numero MonthDayGallery-kohdeominaisuudessa. Kun lähtökohtana siis on _firstDayInView, kussakin solussa näkyy tulos kaavasta _firstDayInView + sen solun arvo.

  • Ominaisuus: Fill
    Value: Yksi Jos-toiminto:

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

    Kuten Text-ominaisuuden kuvauksessa mainittiin, DateAdd(_firstDayInView, ThisItem.Value) edustaa näkyvissä olevan solun päivää. Edeltävä koodi suorittaa tämän huomioon ottaen seuraavat vertailut:

    1. Jos solun arvona on kuluva päivä JA solu vastaa muuttujaa _dateSelected, älä anna täyttöarvoa.

    2. Jos solun arvona on kuluva päivä, mutta se ei vastaa muuttujaa _dateSelected, anna ColorFade-täyttö.

    3. Viimeinen vertailu ei ole yhtä selkeä. Se on solun todellisen tekstiarvon ja solukohteen arvon (näytössä oleva numero ja kohdenumero) välinen vertailu.

      Tätä voi selkeyttää ottamalla esimerkiksi vuoden 2018 syyskuun eli kuukauden, joka alkaa lauantaista ja päättyy sunnuntaihin. Tässä tapauksessa kalenterin ensimmäisellä rivillä näkyy päivämääräväli 26.8.–1.9. ja Abs(Title.Text - ThisItem.Value) = 26 1.9. asti. Sitten Abs(Title.Text - ThisItem.Value) = 5. Sen arvona pysyy 5 aina kalenterin viimeiselle riville, jossa näkyy päivämääräväli 30.9.–6.10. Sillä rivillä Abs(Title.Text - ThisItem.Value) on edelleen 5 syyskuun 30. päivän osalta, mutta muuttuu arvoon 35 lokakuun päivien osalta.

      Malli on tämä: Edelliseltä kuukaudelta näytettyjen päivien osalta Abs(Title.Text - ThisItem.Value) on aina sama kuin ensimmäisen näytetyn päivän Title.Text. Seuraavalta kuukaudelta näytettyjen päivien osalta Abs(Title.Text - ThisItem.Value) on aina sama kuin kyseisen kuukauden ensimmäisen solun (tässä tapauksessa 1. lokakuuta) MonthDayGallery miinus 1. Ja mikä tärkeintä, valitulta kuukaudelta näytettyjen päivien osalta Abs(Title.Text - ThisItem.Value) on myös aina sama kuin kyseisen kuukauden ensimmäisen kohteen arvo miinus 1 eikä koskaan suurempi kuin 5, kuten edellinen esimerkki osoittaa. On siis täysin perusteltua kirjoittaa kaavaksi Abs(Title.Text - ThisItem.Value) > 5.

      Tämä lauseke tarkistaa, onko päivämääräarvo valittuna olevan kuukauden ulkopuolella. Jos näin on, Fill on osittain läpinäkymätön harmaa.

    Huomautus

    Voit tarkistaa edellisen vertailun kelvollisuuden lisäämällä valikoimaan Label-ohjausobjektin ja määrittämällä sen Text-ominaisuuden arvoksi:
    Abs(Title.Text - ThisItem.Value).

  • Ominaisuus: Visible
    Arvo:

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

    Edeltävä lauseke tarkistaa, onko solu rivillä, jolla ei ole valittuna olevan kuukauden päiviä. Muista, että päivän viikonpäiväarvon vähentäminen sen päivämääräarvosta ja 1 lisääminen tuottaa tulokseksi aina sen rivin ensimmäisen kohteen, jolla kyseinen päivä on. Siten tämä lauseke tarkistaa, onko rivin ensimmäinen päivä tarkasteltavan kuukauden viimeisen päivän jälkeen. Jos näin on, se ei tule näkyviin, koska koko rivi sisältää seuraavan kuukauden päiviä.

  • Ominaisuus: OnSelect
    Value: Määritä-toiminto, joka määrittää muuttujan _dateSelected arvoksi valitun solun päivämäärän:

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

Circle-ohjausobjekti kalenterivalikoimassa

MonthDayGallery Circle -ohjausobjekti.

  • Ominaisuus: Visible
    Value: Kaava, joka määrittää, onko valitulle päivälle ajoitettu tapahtumia ja ovatko ohjausobjektit Subcircle ja Title näkyvissä:

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

    Circle-ohjausobjekti on näkyvissä, jos jonkin tapahtuman Alku-kenttä vastaa kyseisen solun päivämäärää, jos Title-ohjausobjekti on näkyvissä ja Subcircle-ohjausobjekti ei ole. Toisin sanoen tämä ohjausobjekti on näkyvissä, kun vähintään yksi tapahtuma tapahtuu kyseisenä päivänä eikä päivää ole valittu. Jos se valitaan, kyseisen päivän tapahtumat näkyvät CalendarEventsGallery-ohjausobjektissa.

Subcircle-ohjausobjekti kalenterivalikoimassa

MonthDayGallery Subcircle -ohjausobjekti.

  • Ominaisuus: Visible
    Arvo:

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

    Subcircle-ohjausobjekti näkyy, kun _dateSelected vastaa solun päivämäärää ja Title-ohjausobjekti on näkyvissä. Toisin sanoen tämä ohjausobjekti tulee näkyviin, kun solu on valittuna oleva päivä.

Tapahtumavalikoima

CalendarEventsGallery -ohjausobjekti.

  • Ominaisuus: Items
    Value: Kaava, joka lajittelee ja suodattaa tapahtumavalikoimaa:

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

    MyCalendarEvents-kokoelma sisältää kaikki tapahtumat välillä _minDate ja _maxDate. Jos haluat näkyviin vain valitun päivän tapahtumat, MyCalendarEvents-ohjausobjektiin sovelletaan suodatinta, jonka perusteella näkyvissä ovat vain tapahtumat, joiden alkamispäivä on sama kuin \ _dateSelected. Items lajitellaan sitten niiden alkamispäivien mukaan, jotta ne voi asettaa järjestykseen.

Seuraavat vaiheet

Huomautus

Voitko kertoa meille dokumentaatiota koskevan kielimäärityksesi? Vastaa lyhyeen kyselyyn. (Huomaa, että tämä kysely on englanninkielinen.)

Kyselyyn vastaaminen kestää noin seitsemän minuuttia. Henkilökohtaisia tietoja ei kerätä (tietosuojatiedot).