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:
- Menú despregable do calendario (dropdownCalendarSelection)
- Icona do calendario (iconCalendar)
- Comiñas angulares do mes anterior (iconPrevMonth)
- Comiñas angulares do mes seguinte (iconNextMonth)
- Galería do calendario (MonthDayGallery) (+ controis secundarios)
- Galería de eventos (CalendarEventsGallery)
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
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
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
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
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
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
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:Se o valor da cela é a data de hoxe E esta cela é equivalente a _dateSelected, non proporcione un valor de recheo.
Se o valor da cela é a data de hoxe pero non é equivalente a _dateSelected, proporcione o recheo ColorFade.
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. NeseAbs(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 valorTitle.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 comoAbs(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
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
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
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
- Obter máis información sobre esta pantalla
- Máis información acerca do conector de Outlook de Office 365 en Power Apps
- Máis información acerca do conector de usuarios de Office 365 en Power Apps
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).
Comentarios
https://aka.ms/ContentUserFeedback.
Proximamente: Ao longo de 2024, retiraremos gradualmente GitHub Issues como mecanismo de comentarios sobre o contido e substituirémolo por un novo sistema de comentarios. Para obter máis información, consulte:Enviar e ver os comentarios