Valitsen sovelluksissa ja verkkosivuilla kalenterista usein väärän päivän. Syynä on esitettävässä kalenterissa viikon alkaminen maanantain sijaan sunnuntaina. Toisin kuin mihin olemme pienestä pitäen tottuneet.
Power Appsissa on sama ongelma.
Onneksi Power Appsin päivävalinta (date picker) -kontrollin asetuksista löytyy StartOfWeek ominaisuus. Vaihtamalla arvo maanantaiksi (StartOfWeek.Monday), muuttuu kalenteri meille tuttuun muotoon.
Tältäosin asia on kunnossa.
Kalenteri-sivupohja
Power Appsissa on mainiota valmiita sivupohjia eri tarpeisiin. Esimerkiksi kalenteri-sivu.
Sivulla voi selata valitsemansa Office 365 Outlook -kalenterin tapahtumia.
Esimerkiksi käyttämämme tuntikirjaustyökalu on toteutettu muokkaamalla tätä samaista sivupohjaa.
Huomaat varmaan pienen ärsyttävän yksityiskohdan alkuperäisessä mallissa.
Kyllä. Viikko alkaa sunnuntaista.
Viikon ensimmäisen päivän muuttaminen
Tämä pitää tietenkin korjata.
Kalenterin päivät ovat käytännössä yksi galleria, joka sisältää
- otsikon (päivän numero)
- ympyrän (valittu päivä)
- pikkuympyrän (onko päivälle tehty kalenterimerkintöjä)
Kalenterin päivien esittämistä varten on käytössä kolme muuttujaa
- _firstDayOfMonth (näytettävän kuukauden ensimmäinen päivä)
- _lastDayOfMonth (näytettävän kuukauden viimeinen päivä)
- _firstDayInView (galleriassa näytetävä ensimmäinen päivä (aina sunnuntai), kuvassa 29. maaliskuuta)
Näiden muuttujien arvot alustetaan joka kerta kun
- alasvetovalikosta valitaan Outlook-kalenteri
- siirrytään kuluvaan päivään
- siirrytään edelliseen kuukauteen
- siirrytään seuraavaan kuukauteen
Haluamme muuttaa viikon ensimmäisen päivän sunnuntaista maanantaiksi. Eli kaikkialla, missä _firstDayInView-muuttuja alustetaan, vähennetään siitä yksi.
Alkuperäinen
Set(_firstDayInView, DateAdd(_firstDayOfMonth, -(Weekday(_firstDayOfMonth) - 2 + 1), Days))
Korjattu
Set(_firstDayInView, DateAdd(_firstDayOfMonth,-(Weekday(_firstDayOfMonth)-2),Days)))
Näin gallerian ensimmäisen näytettävä päivä vaihtuu sunnuntaista maanantaihin.
Huom! Viikonpäivien otsikot ovat edelleen väärät, päivämäärät ovat jo oikeat.
Paitsi jos kuukausi alkaa sunnuntaista. Tällöin olemme onnistuneet hukkaamaan yhden päivän.
Täsmennetään logiikkaa seuraavasti
- mikäli viikon ensimmäinen päivä on sunnuntai (Weekday(_firstDayOfMonth)=1)
- näkymän ensimmäinen päivä on kuusi päivää aikaisempi kuin kuukauden ensimmäinen päivä
- muutoin
- näkymän ensimmäinen päivä on alunperin laskemamme
If(Weekday(_firstDayOfMonth)=1, Set(_firstDayInView, DateAdd(_firstDayOfMonth,-6,Days)), Set(_firstDayInView, DateAdd(_firstDayOfMonth,-(Weekday(_firstDayOfMonth)-2),Days)) )
Nyt myös maaliskuu näkyy oikein
Viikonpäivien otsikot
Korjataan vielä viikonpäivien otsikot. Alkuperäisessä ratkaisussa käytetään kalenterin WeekDaysShort-funktiota.
Tyydymme korvaamaan sen kovakoodatulla taulukolla.
Items: ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"]
Kalenterin viimeinen rivi
Enää yksi yksityiskohta jäljellä. Muutosten jälkeen kalenterin viimeiseltä viikolta puuttuu aina yksi päivä. Eli päivän esittämän otsikon (title) visible-arvossa on jotain pielessä.
Lisätään kaavaan -1 (lihavoitu), niin sekin on kunnossa.
Visible: !(DateAdd(_firstDayInView,ThisItem.Value,Days) - Weekday(DateAdd(_firstDayInView,ThisItem.Value-1,Days)) > _lastDayOfMonth)
Näin meillä on kalenteri, joka näyttää ja tuntuu oikealta.