Compartir por


Información de referencia sobre o modelo de pantalla do calendario para aplicacións de lenzo

Para aplicacións de lenzo en Power Apps, obteña información sobre como contribúe cada control significativo do modelo da pantalla do calendario á funcionalidade predeterminada xeral da pantalla. Esta información presenta as fórmulas de comportamento e os valores doutras propiedades que determinan como responden os controis á entrada do usuario. Para manter un debate a alto nivel sobre a funcionalidade predeterminada desta pantalla, consulte a vista xeral da pantalla do calendario.

Este tema resalta algúns controis significativos e explica as expresións ou fórmulas nas que as diversas propiedades (como Elementos e OnSelect) destes controis se establecen:

Requisito previo

Familiarícese con como engadir e configurar pantallas e outros controis ao crear unha aplicación en Power Apps.

Menú despregable do calendario

Control dropdownCalendarSelection.

  • Propiedade: Items
    Valor: Office365.CalendarGetTables().value

    Este valor é unha operación de conector que recupera os calendarios de Outlook do usuario da aplicación. Pode ver o valor que recupera esta operación.

  • Propiedade: OnChange
    Valor: Select(dropdownCalendarSelection)

    Cando o usuario selecciona unha opción da lista, a función da propiedade OnSelect do control execútase.

  • Propiedade: OnSelect
    Valor: unha función Se que aparece no seguinte bloque de código e varias funcións adicionais, que aparecen no bloque de códigos despois diso.

    Esta parte da fórmula execútase só a primeira vez que o usuario selecciona unha opción na lista despregable despois de abrir a aplicación:

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

    O código anterior define as seguintes variables:

    • _userDomain: o dominio da empresa do usuario da aplicación, como se reflicte no enderezo de correo electrónico do usuario.
    • _dateSelected: data de hoxe (por defecto). A galería do calendario destaca esta data e a galería de eventos mostra os eventos que están programados para esa data.
    • _firstDayOfMonth: o primeiro día do mes en curso. Debido a que (Today + (1 - Today)) = Today - Today + 1 = 1, esta función DataAdd sempre devolve o primeiro día do mes.
    • _firstDayInView: o primeiro día que pode mostrar a galería do calendario. Este valor non é o mesmo que o primeiro día do mes a menos que o mes comece un domingo. Para evitar mostrar unha semana enteira do mes anterior, o valor de _firstDayInView é _firstDayOfMonth - Weekday(_firstDayOfMonth) + 1.
    • _lastDayOfMonth: o último día do mes en curso, que é o mesmo que o primeiro día do mes seguinte, menos un día.

    As funcións posteriores á función Se execútanse sempre que o usuario selecciona unha opción na lista despregable do calendario (non só a primeira vez que o usuario abre a aplicación):

    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 )
    

    O código anterior define estas variables e unha colección:

    • _calendarVisible: establézao en falso para que o calendario non apareza mentres se carga a nova selección.
    • _showLoading: establézao en verdadeiro para que aparezan indicadores de carga mentres se está a cargar a nova selección.
    • _myCalendar: establézao no valor actual do control despregable do calendario para que se recuperen os eventos do calendario correcto.
    • _minDate: establézao no mesmo valor que _firstDayInView. Esta variable determina que eventos xa foron recuperados de Outlook e almacenados na caché na aplicación.
    • _maxDate: establézao no último día que se pode ver do calendario. A fórmula é _firstDayInView + 40. O calendario mostra un máximo de 41 días, polo que a variable _maxDate sempre reflicte o último día visible e determina que eventos xa foron recuperados de Outlook e almacenados na caché da aplicación.
    • MyCalendarEvents: establécese nunha colección de eventos do usuario do calendario seleccionado, que van desde _minDate ata _maxDate.
    • _showLoading: establécese en falso; _calendarVisible establécese en verdadeiro unha vez cargado todo o demais.

Propiedades da cor

Para ver as propiedades xerais da cor, consulte Propiedades da cor e do bordo en Power Apps.

Propiedades exclusivas da cor para o control despregable do calendario:

  • ChevronBackground - cor de fondo para o menú despregable do calendario.
  • ChevronDisabledBackground - cor de fondo para o menú despregable do calendario desactivado.
  • ChevronFill - cor de recheo para o menú despregable do calendario.
  • ChevronDisabledFill - cor de recheo para o menú despregable do calendario desactivado.
  • ChevronHoverBackground - cor de fondo do menú despregable do calendario cando o usuario mantén o punteiro do rato sobre el.
  • ChevronHoverFill - cor de recheo do menú despregable do calendario cando o usuario mantén o punteiro do rato sobre el.

ID de calendario

Control de iconCalendar.

  • Propiedade: OnSelect
    Valor: catro funcións Conxunto que restablecen a galería do calendario na data de hoxe:

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

    O código anterior restablece todas as variables de data que son necesarias para mostrar a vista do calendario axeitada:

    • _dateSelected restablécese a hoxe.
    • _firstDayOfMonth restablécese ao primeiro día do mes de hoxe.
    • _firstDayInView restablécese ao primeiro día que se pode ver cando se selecciona o mes de hoxe.
    • _lastDayOfMonth restablécese ao último día do mes de hoxe.

    A sección Menú despregable do calendario deste tema explica estas variables con máis detalle.

Comiñas angulares do mes anterior

Control iconPrevMonth.

  • Propiedade: OnSelect
    Valor: catro funcións de Conxunto e unha función Se que mostra o mes anterior na galería de calendarios:

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

    Nota

    As definicións para _firstDayOfMonth, _firstDayInView e _lastDayOfMonth son case idénticas ás da sección menú despregable do calendario deste tema.

    As tres primeiras liñas do código anterior execútanse sempre que o usuario selecciona as comiñas angulares do mes anterior. O código establece as variables que son necesarias para mostrar a vista do calendario axeitada. O código restante só funciona se o usuario non seleccionou previamente este mes para o calendario seleccionado.

    Se é así, _minDate é o primeiro día que aparece cando aparece o mes anterior. Antes de que o usuario seleccione a icona, _minDate ten un valor mínimo posible do día 23 do mes en curso. (Cando o 1 de marzo cae un sábado, _firstDayInView para marzo é o 23 de febreiro). Isto significa que se un usuario aínda non seleccionou este mes, _minDate é maior que o novo _firstDayOfMonth e a función Se establécese en verdadeira. O código execútase e actualízase unha colección e unha variable:

    • MyCalendarEvents recupera eventos do calendario seleccionado coa operación Office365Outlook.GetEventsCalendarViewV2. O intervalo de datas está entre a data _firstDayInView e _minDate - 1. Debido a que MyCalendarEvents xa contén eventos na data _minDate, restarase 1 a esa data para o valor máximo neste novo intervalo de datas.

    • _minDate establécese no _firstDayInView actual porque esta é a primeira data para a que se recuperaron eventos. Se un usuario regresa a esta data seleccionando as comiñas angulares do mes anterior, a función Se devolve falso; o código non se executa porque os eventos para esta vista xa están almacenados na caché en MyCalendarEvents.

Comiñas angulares do mes seguinte

Control de iconNextMonth.

  • Propiedade: OnSelect
    Valor: catro funcións de Conxunto e unha función Se que mostra o mes seguinte na galería de calendarios:

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

    Nota

    As definicións para _firstDayOfMonth, _firstDayInView e _lastDayOfMonth son case idénticas ás da sección menú despregable do calendario deste tema.

    As tres primeiras liñas do código anterior, que se executan cando o usuario selecciona as comiñas angulares do mes seguinte, establecen as variables que son necesarias para mostrar a vista do calendario adecuada. O código restante só funciona se o usuario non seleccionou previamente este mes para o calendario seleccionado.

    Nese caso, _maxDate é o último día que aparece cando aparece o mes anterior. Antes de que o usuario seleccione as comiñas angulares do mes seguinte, _maxDate ten un máximo valor posible o día 13 do próximo mes. (Cando o 1 de febreiro cae un domingo dun ano non bisesto, _maxDate será o 13 de marzo, que é o _firstDayInView + 40 días). Isto significa que se un usuario aínda non seleccionou este mes, _maxDate será maior que o novo _lastDayOfMonth e a función Se volverá establecerse en verdadeira. O código execútase e actualízase unha colección e unha variable:

    • MyCalendarEvents recupera eventos do calendario seleccionado coa operación Office365Outlook.GetEventsCalendarViewV2. O intervalo de datas está entre _maxDate + 1 día e _firstDayInView + 40 días. Debido a que MyCalendarEvents xa contén eventos na data _minDate, sumarase 1 a esa data para o valor mínimo neste novo intervalo de datas. _firstDayInView + 40 é a fórmula para _maxDate, polo que a segunda data do intervalo é só a nova _maxDate.

    • _maxDate establécese no _firstDayInView + 40 días porque este é o último día para o que se recuperaron eventos. Se un usuario regresa a esta data seleccionando as comiñas angulares do mes seguinte, a función Se devolve falso; o código non se executa porque os eventos para esta vista xa están almacenados na caché en MyCalendarEvents.

Galería do calendario

Control MonthDayGallery.

  • Propiedade: Items
    Valor: [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]

    O conxunto do 0 ao 41 úsase para os elementos da galería do calendario porque, no peor dos casos, a vista do calendario terá que mostrar 42 días completos. Isto ocorre cando o primeiro do mes cae un sábado e o último do mes un domingo. Neste caso, o calendario mostra seis días desde o mes anterior na fila que contén o primeiro do mes e seis días desde o mes seguinte na fila que contén o último do mes. Trátase de 42 valores únicos, dos que 30 corresponden ao mes seleccionado.

  • Propiedade: WrapCount
    Valor: 7

    Este valor reflicte unha semana de sete días.

Control do título na galería do calendario

Control do título MonthDayGallery.

  • Propiedade: Text
    Valor: Day( DateAdd( _firstDayInView, ThisItem.Value, Days ) )

    Lembre que _firstDayInView defínese como (_firstDayOfMonth - o seu valor do día da semana) + 1. Isto indícalle que _firstDayInView cae sempre un domingo e _firstDayOfMonth cae sempre na primeira liña de MonthDayGallery. Por mor destes dous feitos, _firstDayInView está sempre na primeira cela de MonthDayGallery. ThisItem.Value é o número desa cela na propiedade do elemento MonthDayGallery. Por iso, tomando _firstDayInView como punto de partida, cada cela mostra o incremento de _firstDayInView + o seu valor da cela respectivo.

  • Propiedade: Fill
    Valor: unha función Se:

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

    Como se explica na descrición da propiedade Text, DateAdd(_firstDayInView, ThisItem.Value) representa o día na cela visible. Tendo isto en conta, o código anterior realiza estas comparacións:

    1. Se o valor da cela é a data de hoxe E esta cela é equivalente a _dateSelected, non proporcione un valor de recheo.

    2. Se o valor da cela é a data de hoxe pero non é equivalente a _dateSelected, proporcione o recheo ColorFade.

    3. A última comparación non é tan clara. É unha comparación entre o valor real de texto na cela e o valor do elemento da cela (o número en pantalla e o número de elemento).

      Para entendelo mellor, considere setembro de 2018, un mes que comeza un sábado e remata un domingo. Neste caso, o calendario mostra do 26 ao 31 de agosto e o 1 de setembro na primeira liña e Abs(Title.Text - ThisItem.Value) = 26 ata o 1 de setembro. Entón, Abs(Title.Text - ThisItem.Value) = 5. Permanecerá no 5 ata a última fila do calendario, que mostra os días 30 de setembro e do 1 ao 6 de outubro. Nese Abs(Title.Text - ThisItem.Value) aínda será o 5 para o 30 de setembro, pero será 35 para as datas de outubro.

      Este é o padrón: para os días amosados do mes anterior, Abs(Title.Text - ThisItem.Value) igualará sempre o valor Title.Text do primeiro día de exhibición. Para os días que se amosan no mes seguinte, Abs(Title.Text - ThisItem.Value) será sempre equivalente ao valor do elemento MonthDayGallery da primeira cela dese mes (neste caso, 1 de outubro) menos 1. E, o máis importante, durante días amosados no mes seleccionado actualmente, Abs(Title.Text - ThisItem.Value) igualará sempre o valor do primeiro elemento dese mes menos 1 e nunca superará o 5, como se mostra no exemplo anterior. Por iso é perfectamente válido escribir a fórmula como Abs(Title.Text - ThisItem.Value) > 5.

      Esta declaración verifica se o valor da data está fóra do mes seleccionado actualmente. Se o está, Recheo aparecerá nun gris parcialmente opaco.

    Nota

    Pode comprobar a validez desta última comparación por vostede mesmo inserindo un control de Etiqueta na galería e configurando a súa propiedade Text neste valor:
    Abs(Title.Text - ThisItem.Value).

  • Propiedade: Visible
    Valor:

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

    A declaración anterior comproba se a cela está nunha fila onde non se aparece ningún día do mes seleccionado actualmente. Lembre que restar o valor do día da semana de calquera día do valor da súa data e engadir 1 sempre devolverá o primeiro elemento da liña na que se atopa ese día. Polo tanto, esta declaración comproba se o primeiro día da fila é posterior ao último día do mes visible. En tal caso, non aparecerá porque toda a fila contén días do mes seguinte.

  • Propiedade: OnSelect
    Valor: unha función Conxunto que establece a variable _dateSelected na data da cela seleccionada:

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

Control do círculo na galería do calendario

Control do círculo MonthDayGallery.

  • Propiedade: Visible
    Valor: fórmula que determina se hai eventos programados para a data seleccionada e se os controis Círculo secundario e Título son visibles:

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

    O control Círculo é visible se o campo Inicio de calquera evento equivale á data desa cela, se o control Título está visible e se o control Círculo secundario non é visible. Noutras palabras, este control é visible cando ocorre polo menos un evento neste día, e este día non está seleccionado. Se o selecciona, os eventos dese día móstranse no control CalendarEventsGallery.

Control do círculo secundario na galería do calendario

Control do círculo secundario MonthDayGallery.

  • Propiedade: Visible
    Valor:

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

    O control Círculo secundario está visible cando _dateSelected equivale á data da cela e o control Título está visible. Noutras palabras, este control aparece cando a cela é a data seleccionada actualmente.

Galería de eventos

Control CalendarEventsGallery.

  • Propiedade: Items
    Valor: unha fórmula que ordena e filtra a galería de eventos:

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

    A colección MyCalendarEvents contén todos os eventos entre _minDate e _maxDate. Para amosar os eventos só para a data seleccionada, aplicarase un filtro en MyCalendarEvents para mostrar os eventos que teñen unha data de inicio equivalente a \ _dateSelected. Os elementos clasifícanse segundo as datas de inicio para poñelos en orde secuencial.

Pasos seguintes

Nota

Pode indicarnos as súas preferencias para o idioma da documentación? Realice unha enquisa breve. (teña en conta que esa enquisa está en inglés)

Esta enquisa durará sete minutos aproximadamente. Non se recompilarán datos persoais (declaración de privacidade).