Делите путем


Референтне информације о предлошку екрана за календар за апликације подлоге

За апликације подлоге у услузи Power Apps, схватите како свака значајна контрола у предлошку екрана за календар доприноси укупној подразумеваној функцији екрана. Овај детаљни увид представља формуле понашања и вредности других својстава која одређују како контроле реагују на унос корисника. За дискусију о подразумеваној функционалности овог екрана на високом нивоу, погледајте одељак о прегледу екрана за календар.

Ова тема наглашава неке значајне контроле и објашњава изразе или формуле за које су постављена различита својства (попут Items и OnSelect) тих контрола:

Предуслов

Упознавање са начином додавања и конфигурисања екрана и других контрола док правите апликацију у услузи Power Apps.

Падајућа контрола календара

Контрола dropdownCalendarSelection.

  • Својство: Items
    Вредност: Office365.CalendarGetTables().value

    Ова вредност је операција конектора која преузима Outlook календаре корисника апликације. Можете видети вредност коју ова операција враћа.

  • Својство: OnChange
    Вредност: Select(dropdownCalendarSelection)

    Када корисник изабере опцију у листи, покреће се функција контроле у својству OnSelect.

  • Својство: OnSelect
    Вредност: Функција If која се појављује у следећем блоку кода и неколико додатних функција које се приказују у блоку кода након тога.

    Овај део формуле покреће се први пут када корисник изабере опцију на падајућој листи након отварања апликације:

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

    Претходни кôд дефинише следеће променљиве:

    • _userDomain: Домен предузећа корисника апликације, као што се одражава у адреси е-поште корисника.
    • _dateSelected: Данашњи датум (подразумевано). Галерија календара маркира овај датум, а галерија догађаја приказује догађаје који су заказани за тај датум.
    • _firstDayOfMonth: Први дан текућег месеца. Пошто је (Today + (1 - Today)) = Today - Today + 1 = 1, ова функција DateAdd увек враћа први дан у месецу.
    • _firstDayInView: Први дан који галерија календара може да прикаже. Ова вредност није иста као први дан у месецу, осим ако месец почиње у недељу. Да би се спречило да се приказује цела недеља претходног месеца, вредност функције _firstDayInView је _firstDayOfMonth - Weekday(_firstDayOfMonth) + 1.
    • _lastDayOfMonth: Последњи дан текућег месеца, који је исти као првог дана следећег месеца, минус један дан.

    Функције након функције If се покрећу сваки пут кад корисник на падајућој контроли календара изабере опцију (а не само први пут када корисник отвори апликацију):

    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 )
    

    Претходни кôд дефинише ове променљиве и једну колекцију:

    • _calendarVisible: Подешено на нетачно тако да се календар не приказује док се учитава нови избор.
    • _showLoading: Подешено на тачно тако да се индикатори учитавања приказују док се учитава нови избор.
    • _myCalendar: Подесите на тренутну вредност контроле падајући календар тако да се врате догађаји из исправног календара.
    • _minDate: Подесите на исту вредност као _firstDayInView. Ова променљива одређује који су догађаји већ преузети из програма Outlook и кеширани у апликацији.
    • _maxDate: Подесите на последњи дан који се може видети у календару. Формула је _firstDayInView + 40. Календар приказује максимално 41 дан, дакле променљива _maxDate увек одражава последњи дан који се може видети и одређује који су догађаји већ преузети из програма Outlook и кеширани у апликацији.
    • MyCalendarEvents: Подесите на колекцију корисничких догађаја из изабраног календара, почев од _minDate до _maxDate.
    • _showLoading: Подешено на нетачно; _calendarVisible се подешава на тачно након што се све остало учита.

Својства боја

За општа својства боја, погледајте Својства боја и ивица у услузи Power Apps.

Јединствена својства боја за падајућу контролу календара:

  • ChevronBackground – Боја позадине за падајућу контролу календара.
  • ChevronDisabledBackground – Боја позадине за онемогућену падајућу контролу календара.
  • ChevronFill – Боја попуне за падајућу контролу календара.
  • ChevronDisabledFill – Боја попуне за онемогућену падајућу контролу календара.
  • ChevronHoverBackground – Боја позадине падајуће контроле календара када корисник задржи показивач миша на њему.
  • ChevronHoverFill – Боја попуне падајуће контроле календара када корисник задржи показивач миша на њему.

Икона календара

Контрола iconCalendar.

  • Својство: OnSelect
    Вредност: Четири функције Set које ресетују галерију календара на данашњи датум:

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

    Претходни кôд ресетује све променљиве датума који су неопходне за приказивање исправног приказа календара:

    • _dateSelected ресетује на данас.
    • _firstDayOfMonth ресетује на први дан данашњег месеца.
    • _firstDayInView ресетује на први дан који се може приказати када је изабран данашњи месец.
    • _lastDayOfMonth ресетује на последњи дан данашњег месеца.

    Одељак Падајућа контрола календара ове теме детаљније објашњава ове променљиве.

Шеврон за претходни месец

Контрола iconPrevMonth.

  • Својство: OnSelect
    Вредност: Четири функције Set и функција If која приказује претходни месец у галерији календара:

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

    Напомена

    Дефиниције за _firstDayOfMonth, _firstDayInView и _lastDayOfMonth су скоро идентичне онима у одељку Падајућа контрола календара ове теме.

    Прве три линије претходног кода покрећу се кад год корисник изабере шеврон за претходни месец. Кôд поставља променљиве које су потребне за приказивање исправног приказа календара. Преостали кôд се покреће само ако корисник раније није изабрао овај месец за изабрани календар.

    Ако је то случај, _minDate је први дан који се приказује када се прикаже претходни месец. Пре него што корисник изабере икону, _minDate има минималну могућу вредност 23. текућег месеца. (Када 1. март пада у суботу, _firstDayInView за март је 23. фебруара.) То значи да ако корисник још није изабрао овај месец, _minDate је већи од новог _firstDayOfMonth, а функција If враћа тачно. Кôд се покреће, а колекција и променљива се ажурирају:

    • MyCalendarEvents преузима догађаје из изабраног календара помоћу операције Office365Outlook.GetEventsCalendarViewV2. Распон датума је између датума _firstDayInView и _minDate - 1. Пошто MyCalendarEvents већ садржи догађаје на датум _minDate, 1 се одузима од тог датума за максималну вредност у овом новом опсегу датума.

    • _minDate се подешава на актуелни _firstDayInView, јер то је први датум за који су враћени догађаји. Ако се корисник врати на овај датум одабиром шеврона за претходни месец, функција If враћа нетачно; кôд се не покреће јер су догађаји за овај приказ већ кеширани у MyCalendarEvents.

Шеврон за следећи месец

Контрола iconNextMonth.

  • Својство: OnSelect
    Вредност: Четири функције Set и функција If која приказује следећи месец у галерији календара:

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

    Напомена

    Дефиниције за _firstDayOfMonth, _firstDayInView и _lastDayOfMonth су скоро идентичне онима у одељку Падајућа контрола календара ове теме.

    Прве три линије претходног кода, који се покрећу када корисник изабере шеврон за следећи месец, подешавају променљиве које су неопходне за приказивање исправног приказа календара. Преостали кôд се покреће само ако корисник раније није изабрао овај месец за изабрани календар.

    У том случају, _maxDate је последњи дан који се приказује када се прикаже претходни месец. Пре него што корисник изабере шеврон за следећи месец, _maxDate има максималну могућу вредност 13. следећег месеца. (Када 1. фебруар пада у недељу просте године, _maxDate је 13. март, што је _firstDayInView + 40 дана.) То значи да ако корисник још увек није изабрао овај месец, _maxDate је већи од новог _lastDayOfMonth, а функција If враћа тачно. Кôд се покреће, а колекција и променљива се ажурирају:

    • MyCalendarEvents преузима догађаје из изабраног календара помоћу операције Office365Outlook.GetEventsCalendarViewV2. Распон датума је између _maxDate + 1 дан и _firstDayInView + 40 дана. Пошто MyCalendarEvents већ садржи догађаје за датум _minDate, 1 се додаје на тај датум за минималну вредност у овом новом опсегу датума. _firstDayInView + 40 је формула за _maxDate, тако да је други датум у опсегу само нови _maxDate.

    • _maxDate се подешава на _firstDayInView + 40 дана јер то је последњи дан за који су враћени догађаји. Ако се корисник врати на овај датум одабиром шеврона за следећи месец, функција If враћа нетачно; кôд се не покреће јер су догађаји за овај приказ већ кеширани у MyCalendarEvents.

Галерија календара

Контрола MonthDayGallery.

  • Својство: Items
    Вредност: [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]

    Скуп од 0 до 41 се користи за ставке у галерији календара јер ће, у најгорем сценарију, приказ календара морати да прикаже 42 пуна дана. То се догађа када први у месецу пада у суботу, а последњи у месецу пада у недељу. У том случају, календар приказује шест дана из претходног месеца у реду који садржи први у месецу и шест дана из следећег месеца у реду који садржи последњи у месецу. То су 42 јединствене вредности, од којих 30 за изабрани месец.

  • Својство: WrapCount
    Вредност: 7

    Ова вредност одражава седмодневну недељу.

Контрола наслова у галерији календара

Контрола MonthDayGallery Title.

  • Својство: Text
    Вредност: Day( DateAdd( _firstDayInView, ThisItem.Value, Days ) )

    Подсетимо се да је _firstDayInView дефинисан као (_firstDayOfMonth – вредност радног дана) + 1. То вам говори да је _firstDayInView увек недеља, а _firstDayOfMonth је увек у првом реду MonthDayGallery. Због ове две чињенице, _firstDayInView је увек у првој ћелији MonthDayGallery. ThisItem.Value је број те ћелије у својству ставке MonthDayGallery. Дакле, узимајући _firstDayInView као почетну тачку, свака ћелија приказује раст од _firstDayInView + одговарајућа вредност ћелије.

  • Својство: Fill
    Вредност: Једна функција 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 )
    )
    

    Као што је речено у опису својства Text, DateAdd(_firstDayInView, ThisItem.Value) представља дан у видљивој ћелији. Узимајући то у обзир, претходни кôд обавља ова поређења:

    1. Ако је вредност ћелије данашњи датум И ова ћелија је еквивалентна са _dateSelected, не пружа вредност попуне.

    2. Ако је вредност ћелије данашњи датум, али није еквивалентна са _dateSelected, пружа вредност попуне ColorFade.

    3. Последње поређење није тако јасно. То је поређење између стварне вредности текста у ћелији и вредности ставке ћелије (број на екрану и број ставке).

      Да бисте ово боље разумели, размислите о септембру 2018, месецу који почиње у суботу и завршава у недељу. У овом случају календар приказује од 26. до 31. августа и 1. септембар у првом реду, и Abs(Title.Text - ThisItem.Value) = 26 до 1. септембра. Затим Abs(Title.Text - ThisItem.Value) = 5. Остаће вредност 5 до последњег реда у календару, који приказује 30. септембар и од 1. до 6. октобра. Ту ће Abs(Title.Text - ThisItem.Value) још увек бити 5 за 30. септембар, али ће за датуме из октобра бити 35.

      Ово је образац: За дане приказане у претходном месецу, Abs(Title.Text - ThisItem.Value) увек ће бити једнак вредности Title.Text првог дана на екрану. За дане који се приказују у следећем месецу, Abs(Title.Text - ThisItem.Value) увек ће бити једнак вредности ставке MonthDayGallery прве ћелије тог месеца (у овом случају 1. октобра) минус 1. И што је најважније, за дане приказане у тренутно изабраном месецу, Abs(Title.Text - ThisItem.Value) такође ће увек бити једнака вредности прве ставке тог месеца минус 1 и никада неће прелазити 5, као што показује претходни пример. Дакле, потпуно је важеће да формулу напишете као Abs(Title.Text - ThisItem.Value) > 5.

      Овај израз проверава да ли је вредност датума ван тренутно изабраног месеца. Ако јесте, Fill је делимично непрозирно сива.

    Напомена

    Ваљаност овог последњег поређења можете сами проверити уметањем контроле Ознака у галерију и подешавањем њеног својства Text на ову вредност:
    Abs(Title.Text - ThisItem.Value).

  • Својство: Visible
    Вредност:

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

    Претходни израз проверава да ли се ћелија налази у реду у којем се не јављају дани тренутно изабраног месеца. Подсетимо се да одузимање вредности радног дана од вредности датума и додавање 1 увек враћа прву ставку у реду у којем се тај дан налази. Дакле, овај израз проверава да ли је први дан у реду последњи дан месеца који се може видети. Ако јесте, неће се приказати зато што цео ред садржи дане следећег месеца.

  • Својство: OnSelect
    Вредност: Функција Set која поставља променљиву _dateSelected на датум изабране ћелије:

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

Кружна контрола у галерији календара

Контрола MonthDayGallery Circle.

  • Својство: Visible
    Вредност: Формула која одређује да ли су неки догађаји заказани за изабрани датум и да ли су контроле унутрашњи круг и наслов видљиве:

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

    Контрола круг је видљива ако је поље Почетак за било који догађај еквивалентно датуму те ћелије, ако је контрола Наслов видљива и ако контрола унутрашњи круг није видљива. Другим речима, ова контрола је видљива када се на овај дан догоди бар један догађај, а овај дан није изабран. Ако је изабран, догађаји за тај дан ће се приказати у контроли CalendarEventsGallery.

Контрола унутрашњег круга у галерији календара

Контрола MonthDayGallery Subcircle.

  • Својство: Visible
    Вредност:

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

    Контрола унутрашњи круг је видљива када је _dateSelected еквивалентно датуму ћелије и контрола Наслов је видљива. Другим речима, ова контрола се приказује када је ћелија тренутно изабрани датум.

Галерија догађаја

Контрола CalendarEventsGallery.

  • Својство: Items
    Вредност: Формула која сортира и филтрира галерију догађаја:

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

    Колекција MyCalendarEvents садржи све догађаје између _minDate и _maxDate. Да би се приказали догађаји само за изабрани датум, примењује се филтер MyCalendarEvents за приказ догађаја са датумом почетка еквивалентним датуму \ _dateSelected. Ставке се затим сортирају према датумима почетка како би се поставиле у секвенцијални редослед.

Следећи кораци

Напомена

Можете ли нам рећи о својим жељеним поставкама језика у документацији? Испуните кратку анкету. (имајте на уму да је ова анкета на енглеском језику)

Анкета ће трајати око седам минута. Не прикупљају се лични подаци (изјава о приватности).