Кенеп бағдарламаларына арналған күнтізбелік экран үлгісі туралы анықтамалық ақпарат

Power Apps ішіндегі кенеп бағдарламалары үшін күнтізбелік экран үлгісіндегі әр маңызды басқару элементінің экранның әдепкі жұмысына қалай әсер ететінін түсініңіз. Бұл толық талқылау әрекет формулаларын және басқару элементтерінің пайдаланушы енгізуіне жауап беру жолын анықтайтын басқа сипаттардың мәндерін көрсетеді. Бұл экранның әдепкі функционалдығын жоғары деңгейде талқылау үшін күнтізбелік экранға шолу бөлімін қараңыз.

Бұл тақырып кейбір маңызды басқару элементтеріне назар аударады және осы басқару элементтерінің әртүрлі сипаттары (Элементтержәне OnSelect сияқты) орнатылған өрнектерді немесе формулаларды түсіндіреді:

Алғышарт

Power Apps жүйесінде қолданба жасау кезінде экрандарды және басқа басқару элементтерін қосу және теңшеу жолын білу.

Ашылмалы күнтізбе

dropdownCalendarSelection басқару элементі.

  • Сипат: Items
    Мән: Office365.CalendarGetTables().value

    Бұл мән пайдаланушының Outlook күнтізбелерін шығаратын қосқыш операциясы. Осы операция шығаратын мәнді көре аласыз.

  • Сипат: OnChange
    Мән: Select(dropdownCalendarSelection)

    Пайдаланушы тізімде опцияны таңдағанда, басқару элементінің OnSelect сипатындағы функция іске қосылады.

  • Сипат: OnSelect
    Мәні: Егер келесі код құлпында пайда болатын функция және одан кейін код құлпында пайда болатын бірнеше қосымша функция.

    Формуланың бұл бөлігі пайдаланушы бағдарламаны ашқаннан кейін ашылмалы тізімнен опцияны таңдаған кезде ғана іске қосылады:

    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: келесі айдың бірінші күнімен бірдей ағымдағы айдың соңғы күнінен бір күн алып тасталған.

    Егер функцияларынан кейінгі функциялар пайдаланушы күнтізбе ашылмалы тізімінде опцияны таңдаған кезде жұмыс істейді (пайдаланушы бағдарламаны бірінші рет ашқанда ғана емес):

    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( _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( _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 мәнінен үлкен және Егер функциясы шын мәніне қайтарылады. Код іске қосылып, жинақ пен айнымалы мән жаңартылады:

    • MyCalendarEvents параметрі Office365Outlook.GetEventsCalendarViewV2 әрекетінің көмегімен таңдалған күнтізбеден оқиғаларды шығарады. Күндер ауқымы _firstDayInView күні мен _minDate - 1 аралығында. Себебі MyCalendarEvents ішінде әлдеқашан _minDate күніндегі оқиғалар бар, осы жаңа күндер ауқымындағы ең үлкен мәннен 1 күн алынып тасталады.

    • _minDate параметрі ағымдағы _firstDayInView мәніне орнатылады, өйткені бұл оқиғалардың алынған алғашқы күні. Егер пайдаланушы осы күнге алдыңғы айдағы шевронды таңдау арқылы оралса, онда Егерфункциясы жалған мәніне қайтарылады; код іске қосылмайды, өйткені бұл көрініс үшін оқиғалар MyCalendarEvents ішінде кэштелген.

Келесі айдағы шеврон

iconNextMonth басқару элементі.

  • Сипат: OnSelect
    Мәні: күнтізбе галереясында келесі айды көрсететін төрт Орнату және Егер функциялары:

    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 мәнінен үлкен және Егер функциясы шын мәніне қайтарылады. Код іске қосылып, жинақ пен айнымалы мән жаңартылады:

    • MyCalendarEvents параметрі Office365Outlook.GetEventsCalendarViewV2 әрекетінің көмегімен таңдалған күнтізбеден оқиғаларды шығарады. Күндер ауқымы _maxDate + 1 күн және _firstDayInView + 40 күн аралығында. Себебі MyCalendarEvents ішінде әлдеқашан _minDate күніндегі оқиғалар бар, осы жаңа күндер ауқымындағы ең кіші мәнге 1 күн қосылады. _firstDayInView + 40 формуласы _maxDate параметріне арналған, сондықтан ауқымдағы екінші күн - бұл жаңа _maxDate.

    • _maxDate параметрі _firstDayInView + 40 күн мәніне орнатылады, өйткені бұл оқиғалардың алынған соңғы күні. Егер пайдаланушы осы күнге келесі айдағы шевронды таңдау арқылы оралса, онда Егерфункциясы жалған мәніне қайтарылады; код іске қосылмайды, өйткені бұл көрініс үшін оқиғалар 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 "Атау" басқару элементі.

  • Сипат: Text
    Мән: Day( DateAdd( _firstDayInView, ThisItem.Value, Days ) )

    _firstDayInView - (_firstDayOfMonth - апталық мән) + 1 ретінде анықталатынын еске саламыз. Бұл сізге _firstDayInView әрдайым жексенбі және _firstDayOfMonth әрдайым MonthDayGallery бірінші қатары екенін білдіреді. Осы екі фактіні ескере отырып, _firstDayInView әрдайым MonthDayGallery бірінші ұяшығында болады. ThisItem.Value - MonthDayGallery элемент сипатындағы сол ұяшықтың нөмірі. Сонымен, _firstDayInView бастапқы нүкте ретінде қабылдай отырып, әр ұяшық _firstDayInView өсуін + сәйкес ұяшық мәнін көрсетеді.

  • Сипат: Толтыру
    Мәні: бір Егер функциясы:

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

    Мәтін сипаттамасында талқыланғандай, DateAdd(_firstDayInView, ThisItem.Value) көрінетін ұяшықтағы күнді білдіреді. Осыны ескере отырып, алдыңғы код мына салыстыруларды орындайды:

    1. Егер ұяшықтың мәні бүгінгі күн болса ЖӘНЕ бұл ұяшық _dateSelected тең болса, толтыру мәнін бермеңіз.

    2. Егер ұяшықтың мәні бүгінгі күн болса, бірақ _dateSelected тең болмаса, ColorFade арқылы толтырыңыз.

    3. Соңғы салыстыру түсініксіз. Бұл ұяшықтағы нақты мәтін мәні мен ұяшық элементінің мәні (дисплейдегі нөмір мен элемент нөмірі) арасындағы салыстыру.

      Мұны жақсы түсіну үшін 2018 жылдың қыркүйегін қарастырайық, ол сенбіде басталып, жексенбіде аяқталады. Бұл жағдайда күнтізбе бірінші қатарда 26-31 тамыз және 1 қыркүйек күндерін және 1-қыркүйекке дейін Abs(Title.Text - ThisItem.Value) = 26 көрсетеді. Онда Abs(Title.Text - ThisItem.Value) = 5. Ол 30 қыркүйек пен 1 қазаннан 6 қазанға дейінгі күнтізбенің соңғы жолына дейін 5-те қалады. Сол Abs(Title.Text - ThisItem.Value) 30 қыркүйек үшін әлі 5 болады, бірақ қазан айына 35 болады.

      Бұл үлгі: алдыңғы айдан көрсетілген күндер үшін, Abs(Title.Text - ThisItem.Value) әрдайым дисплейдегі бірінші күннің Title.Text мәніне тең болады. Келесі айда көрсетілетін күндер үшін, Abs(Title.Text - ThisItem.Value)әрдайым сол айдың (бұл жағдайда 1 қазан) 1 азайтылған бірінші ұяшығының MonthDayGallery элемент мәніне тең болады. Ең бастысы, таңдалған айда көрсетілген күндер үшін, Abs(Title.Text - ThisItem.Value) сонымен қатар әрдайым 1 азайтылған сол айдың бірінші элементінің мәніне тең болады және алдыңғы мысалда көрсетілгендей ешқашан 5-тен аспайды. Сондықтан формуланы Abs(Title.Text - ThisItem.Value) > 5 етіп жазған дұрыс.

      Бұл мәлімдеме күн мәнінің қазіргі таңдалған айдан тыс екенін тексереді. Егер солай болса, Толтыру жартылай мөлдір сұр болып табылады.

    Ескерім

    Осы соңғы салыстырудың дұрыстығын өзіңіз үшін Белгі басқару элементін галереяға енгізу және оның Мәтін сипатын мына мәнге орнату арқылы тексеруіңізге болады:
    Abs(Title.Text - ThisItem.Value).

  • Сипат: Көрінетін
    Мән:

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

    Алдыңғы мәлімдеме ұяшықтың ағымдағы таңдалған айдың ешқандай күндері болмайтын жолда тұрғандығын тексереді. Кез келген күннің апталық күнінің мәнін оның күн мәнінен алып тастап, 1-ді қоссаңыз әрдайым сол күн өмір сүретін қатардағы бірінші элементті қайтаратынын есте сақтаңыз. Сонымен, бұл мәлімдеме қатардағы бірінші күннің көрінетін айдың соңғы күнінен кейін екендігін тексереді. Егер солай болса, ол пайда болмайды, өйткені бүкіл қатарда келесі айдың күндері болады.

  • Сипат: OnSelect
    Мәні: таңдалған ұяшықтың күніне _dateSelected айнымалысын орнататын Орнату функциясы:

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

MonthDayGallery шеңбер басқару элементі.

  • Сипат: Көрінетін
    Мән: Кез келген оқиғаның таңдалған күнге жоспарланғанын және Ішкі шеңбер мен Атауы басқару элементтері көрінетіндігін анықтайтын формула:

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

    Шеңбер басқару элементі кез келген оқиғаға арналған Іске қосу өрісі сол ұяшықтың күніне тең болса, Атауы басқару элементі көрінетін болса және егер Ішкі шеңбер басқару көрінбейтін болса көрінеді. Басқаша айтқанда, бұл басқару элементі кем дегенде сол күнде бір оқиға болған кезде және ол күн таңдалмаса көрінеді. Егер ол таңдалса, онда сол күнгі оқиғалар CalendarEventsGallery басқару элементінде көрсетіледі.

MonthDayGallery ішкі шеңбер басқару элементі.

  • Сипат: Көрінетін
    Мән:

    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 мәніне тең оқиғаларды көрсетіледі. Содан кейін элементтер дәйектілік реті бойынша орналастыру үшін басталу күндері бойынша сұрыпталады.

Келесі қадамдар

Ескерім

Сіз құжат тіліңіздің артықшылықтары туралы айта аласыз ба? Қысқа сауалнамаға қатысыңыз. (бұл сауалнама ағылшын тілінде екеніне назар аударыңыз)

Сауалнама шамамен жеті минут уақытыңызды алады. Жеке деректер жиналмайды (құпиялылық туралы мәлімдеме).