Plantilla de pantalla del calendari a les aplicacions de llenç
En una aplicació del llenç, afegiu una pantalla de calendari que mostri als usuaris els pròxims esdeveniments des dels comptes de l'Office 365 Outlook. Els usuaris poden seleccionar una data d'un calendari i desplaçar-se per una llista d'activitats d'aquest dia. Podeu canviar els detalls que apareixen a la llista, afegir una segona pantalla que mostra més detalls sobre cada esdeveniment, mostrar una llista d'assistents per a cada esdeveniment i fer altres personalitzacions.
També podeu afegir altres pantalles basades en plantilles que mostrin diverses dades de l'Office 365, com ara el correu electrònic, les persones en una organització i la disponibilitat de les persones a què és possible que els usuaris vulguin convidar a una reunió.
Aquesta informació general us ensenya:
- Com utilitzar la pantalla de calendari per defecte.
- Com modificar-la.
- Com integrar-la en una aplicació.
Per aprofundir en la funcionalitat per defecte d'aquesta pantalla, vegeu la referència de la pantalla de calendari.
Requisit previ
Coneixements sobre com afegir i configurar pantalles i altres controls a mesura que creeu una aplicació al Power Apps.
Funcionalitat per defecte
Per afegir una pantalla de calendari de la plantilla:
Inicieu la sessió al Power Apps i, a continuació, creeu una aplicació o obriu una aplicació existent al Power Apps Studio.
En aquest tema es mostra una aplicació telefònica, però els mateixos conceptes s'apliquen a una aplicació de tauleta.
A la pestanya Inici de la franja, seleccioneu Pantalla nova > Calendari.
Per defecte, la pantalla té un aspecte semblant a aquesta:

Per mostrar dades, seleccioneu una opció de la llista desplegable a la part superior de la pantalla.

Algunes notes útils:
- La data d'avui se selecciona per defecte i hi podeu tornar fàcilment seleccionant la icona de calendari a la cantonada superior dreta.
- Si seleccioneu una altra data, un cercle l'envolta i un rectangle de color clar (blau si s'aplica el tema per defecte) envolta la data d'avui.
- Si es planifica com a mínim un esdeveniment per a una data concreta, apareix un cercle de color petit en aquesta data al calendari.
- Si seleccioneu una data per a la qual es planifiquen un o més esdeveniments, els esdeveniments apareixen en una llista a sota del calendari.
Modificar la pantalla
Podeu modificar la funcionalitat per defecte d'aquesta pantalla de diverses maneres:
- Especifiqueu el calendari.
- Mostreu diversos detalls sobre un esdeveniment.
- Amagueu els esdeveniments que no es bloquen.
Si voleu continuar modificant la pantalla, utilitzeu la referència de pantalla de calendari com a guia.
Especificar el calendari
Si ja sabeu quin calendari haurien de visualitzar els vostres usuaris, podeu simplificar la pantalla especificant el calendari abans de publicar l'aplicació. Aquest canvi suprimeix la necessitat de la llista desplegable de calendaris, de manera que podeu suprimir-la.
Definiu la propietat OnStart de l'aplicació a aquesta fórmula:
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) - 2 + 1 ), Days ) ); Set( _lastDayOfMonth, DateAdd( DateAdd( _firstDayOfMonth, 1, Months ), -1, Days ) ); Set( _calendarVisible, false ); Set( _myCalendar, LookUp(Office365Outlook.CalendarGetTablesV2().value, DisplayName = "{YourCalendarNameHere}" ) ); Set( _minDate, DateAdd( _firstDayOfMonth, -( Weekday(_firstDayOfMonth) - 2 + 1 ), Days ) ); Set( _maxDate, DateAdd( DateAdd( _firstDayOfMonth, -( Weekday(_firstDayOfMonth) - 2 + 1 ), Days ), 40, Days ) ); ClearCollect( MyCalendarEvents, Office365Outlook.GetEventsCalendarViewV3(_myCalendar.name, Text( _minDate, UTC), Text( _maxDate, UTC) ).value ); Set( _calendarVisible, true )Nota
Aquesta fórmula s'edita lleugerament del valor per defecte de la propietat OnSelect de la llista desplegable per seleccionar un calendari. Per obtenir més informació sobre aquest control, vegeu la seva secció a la referència de la pantalla de calendari.
Substituïu
{YourCalendarNameHere}, incloent-hi les claus, amb el nom del calendari que voleu que es mostri (per exemple, Calendari).Important
Els passos següents assumeixen que heu afegit només una pantalla de calendari a l'aplicació. Si n'heu afegit més d'un, els noms de control (com ara iconCalendar1) acabaran amb un altre número i haureu d'ajustar les fórmules en conseqüència.
Definiu la propietat Y del control iconCalendar1 per mostrar aquesta expressió:
RectQuickActionBar1.Height + 20Definiu la propietat Y del control LblMonthSelected1 per mostrar aquesta expressió:
iconCalendar1.Y + iconCalendar1.Height + 20Definiu la propietat Text del control LblNoEvents1 a aquest valor:
"No events scheduled"Definiu la propietat Visible de LblNoEvents1 a aquesta fórmula:
CountRows(CalendarEventsGallery1.AllItems) = 0 && _calendarVisibleSuprimiu aquests controls:
- dropdownCalendarSelection1
- LblEmptyState1
- iconEmptyState1
Si la pantalla del calendari no és la pantalla per defecte, afegiu un botó que navegui des de la pantalla per defecte a la pantalla de calendari per tal que pugueu provar l'aplicació.
Per exemple, afegiu un botó a Screen1 que navegui a Screen2 si heu afegit una pantalla de calendari a una aplicació que heu creat des de zero.
Deseu l'aplicació i, a continuació, proveu-la en un navegador o en un dispositiu mòbil.
Mostrar diversos detalls sobre un esdeveniment
Per defecte, a la galeria del calendari, anomenada CalendarEventsGallery, es mostra l'hora d'inici, la duració, el tema i la ubicació de cada esdeveniment. Podeu configurar la galeria per mostrar qualsevol camp (com ara l'organitzador) que el connector de l'Office 365 admeti.
A CalendarEventsGallery, definiu la propietat Text d'una etiqueta nova o existent a
ThisItemseguida d'un punt.IntelliSense enumera els camps que podeu seleccionar.
Seleccioneu el camp que vulgueu.
L'etiqueta mostra el tipus d'informació que heu especificat.
Amagar els esdeveniments que no es bloquen
A moltes oficines, els membres de l'equip envien sol·licituds de reunió per avisar-se els uns als altres quan seran fora de l'oficina. Per evitar el bloqueig de les planificacions de tothom, la persona que envia la sol·licitud defineix la seva disponibilitat a Lliure. Podeu amagar aquests esdeveniments del calendari i la galeria actualitzant un parell de propietats.
Definiu la propietat Items de CalendarEventsGallery a aquesta fórmula:
SortByColumns( Filter( MyCalendarEvents, Text( Start, DateTimeFormat.ShortDate ) = Text( _dateSelected, DateTimeFormat.ShortDate ), ShowAs <> "Free" ), "Start" )En aquesta fórmula, la funció Filter amaga no només els esdeveniments planificats per a una data diferent de la seleccionada, sinó també per als que la disponibilitat es defineix a Lliure.
Al calendari, definiu la propietat Visible del control Cercle a aquesta fórmula:
CountRows( Filter( MyCalendarEvents, DateValue( Text(Start) ) = DateAdd( _firstDayInView, ThisItem.Value, Days ), ShowAs <> "Free" ) ) > 0 && !Subcircle1.Visible && Title2.VisibleAquesta fórmula conté els mateixos filtres que la fórmula anterior. Per tant, el cercle de l'indicador d'esdeveniments apareix en una data només si té un o diversos esdeveniments que es troben en la data seleccionada i per als quals la disponibilitat no està disponible com a Lliure.
Integrar la pantalla en una aplicació
La pantalla de calendari és un paquet de controls potent per si mateixa, però normalment és més eficient com a part d'una aplicació més gran i versàtil. Podeu integrar aquesta pantalla en una aplicació més gran de diverses maneres, incloent-hi afegint aquestes opcions:
Visualitzar els detalls de l'esdeveniment
Si els usuaris seleccionen un esdeveniment a CalendarEventsGallery, podeu obrir una altra pantalla que mostri més informació sobre aquest esdeveniment.
Nota
Aquest procediment mostra els detalls de l'esdeveniment en una galeria amb contingut dinàmic, però podeu aconseguir resultats semblants prenent altres enfocaments. Per exemple, podeu obtenir més controls de disseny mitjançant una sèrie d'etiquetes.
Afegiu una pantalla en blanc, anomenada EventDetailsScreen, que conté una galeria d'alçada flexible en blanc i un botó que torna a la pantalla del calendari.
A la galeria d'alçada flexible, afegiu un control Etiqueta i un control Text HTML i definiu la propietat AutoHeight a cert.
Nota
El Power Apps recupera el cos del missatge de cada esdeveniment com a text HTML, per la qual cosa haureu de mostrar aquest contingut en un control Text HTML.
Definiu la propietat Y del control Text HTML per mostrar aquesta expressió:
Label1.Y + Label1.Height + 20Ajusteu les propietats addicionals segons calgui per adaptar-vos a les vostres necessitats.
Per exemple, pot ser que us interessi afegir una línia de separació per sota del control Text HTML.
Definiu la propietat Items de la galeria d'alçada flexible a aquesta fórmula:
Table( { Title: "Subject", Value: _selectedCalendarEvent.Subject }, { Title: "Time", Value: _selectedCalendarEvent.Start & " - " & _selectedCalendarEvent.End }, { Title: "Body", Value: _selectedCalendarEvent.Body } )Aquesta fórmula crea una galeria de dades dinàmiques que es defineixen en els valors de camp de selectedCalendarEvent, que es defineix cada vegada que l'usuari selecciona un esdeveniment en el control CalendarEventsGallery. Podeu ampliar aquesta galeria per incloure més camps afegint-hi més etiquetes, però aquest conjunt proporciona un bon punt d'inici.
Amb els elements de la galeria al lloc, definiu la propietat Text del control Etiqueta a
ThisItem.Titlei la propietat HtmlText del control Text HTML aThisItem.Value.A CalendarEventsGallery, definiu la propietat OnSelect del control Títol a aquesta fórmula:
Set( _selectedCalendarEvent, ThisItem ); Navigate( EventDetailsScreen, None )Nota
En lloc d'utilitzar la variable _selectedCalendarEvent, podeu utilitzar CalendarEventsGallery.Selected.
Mostrar els assistents a l'esdeveniment
L'operació Office365.GetEventsCalendarViewV2 recupera diversos camps per a cada esdeveniment, incloent-hi un conjunt d'assistents necessaris i opcionals separats per punt i coma. En aquest procediment, analitzareu cada conjunt d'assistents, esbrinareu quins assistents hi ha a l'organització i recuperareu els perfils de l'Office 365 dels que ho siguin.
Si l'aplicació no conté el connector d'usuaris de l'Office 365, afegiu-lo.
Per recuperar els perfils de l'Office 365 dels assistents a la reunió, definiu la propietat OnSelect del control Títol a CalendarEventsGallery a aquesta fórmula:
Set( _selectedCalendarEvent, ThisItem ); ClearCollect( AttendeeEmailsTemp, Filter( Split( ThisItem.RequiredAttendees & ThisItem.OptionalAttendees, ";" ), !IsBlank( Result ) ) ); ClearCollect( AttendeeEmails, AddColumns( AttendeeEmailsTemp, "InOrg", Upper( _userDomain ) = Upper( Right( Result, Len( Result ) - Find( "@", Result ) ) ) ) ); ClearCollect( MyPeople, ForAll( AttendeeEmails, If( InOrg, Office365Users.UserProfile( Result ) ) ) ); Collect( MyPeople, ForAll( AttendeeEmails, If( !InOrg, { DisplayName: Result, Id: "", JobTitle: "", UserPrincipalName: Result } ) ) )
Aquesta llista explica què fa cada operació ClearCollect:
ClearCollect(AttendeeEmailsTemp)
ClearCollect( AttendeeEmailsTemp, Filter( Split( ThisItem.RequiredAttendees & ThisItem.OptionalAttendees, ";" ), !IsBlank( Result) ) );Aquesta fórmula concatena els assistents necessaris i opcionals en una sola cadena i, a continuació, divideix la cadena en adreces individuals a cada punt i coma. La fórmula llavors filtra els valors en blanc del conjunt i afegeix els altres valors en una col·lecció anomenada AttendeeEmailsTemp.
ClearCollect(AttendeeEmails)
ClearCollect( AttendeeEmails, AddColumns( AttendeeEmailsTemp, "InOrg", Upper( _userDomain ) = Upper( Right( Result, Len(Result) - Find("@", Result) ) ) ) );Aquesta fórmula determina més o menys si un assistent és a l'organització. La definició de _userDomain és simplement l'adreça URL del domini a l'adreça electrònica de la persona que executa l'aplicació. Aquesta línia crea una columna addicional de cert/fals, anomenada InOrg, a la col·lecció AttendeeEmailsTemp. Aquesta columna conté cert si userDomain és equivalent a l'adreça electrònica del domini en aquesta fila concreta de AttendeeEmailsTemp.
Aquest enfocament no sempre és precís, però s'hi acosta molt. Per exemple, alguns assistents a l'organització poden tenir una adreça de correu electrònic com ara Jane@OnContoso.com, mentre que _userDomain és Contoso.com. L'usuari de l'aplicació i la Jane podrien treballar a la mateixa empresa però tenen variacions lleus a les seves adreces de correu electrònic. Per a casos com aquests, pot ser que us interessi utilitzar aquesta fórmula:
Upper(_userDomain) in Upper(Right(Result, Len(Result) - Find("@", Result)))No obstant això, aquesta fórmula fa coincidir adreces de correu electrònic com Jane@NotTheContosoCompany.com amb un _userDomain com Contoso.com, i aquestes persones no treballen a la mateixa empresa.
ClearCollect(MyPeople)
ClearCollect( MyPeople, ForAll( AttendeeEmails, If( InOrg, Office365Users.UserProfile( Result ) ) ) ); Collect( MyPeople, ForAll( AttendeeEmails, If( !InOrg, { DisplayName: Result, Id: "", JobTitle: "", UserPrincipalName: Result } ) ) );Per recuperar els perfils de l'Office 365, heu d'utilitzar l'operació Office365Users.UserProfile o Office365Users.UserProfileV2. Aquestes operacions recopilen primer tots els perfils de l'Office 365 dels assistents que es troben a l'organització de l'usuari. A continuació, les operacions afegeixen alguns camps per als assistents fora de l'organització. Heu d'haver separat aquests dos elements en operacions diferents, ja que el bucle ForAll no garanteix l'ordre. Per tant, ForAll podria recopilar un assistent de fora de l'organització primer. En aquest cas, l'esquema per a MyPeople només conté DisplayName, Id, JobTitle i UserPrincipalName. No obstant, les operacions d'UserProfile recuperen dades molt més riques. Per tant, obligueu a la col·lecció MyPeople que afegeixi els perfils de l'Office 365 abans dels altres perfils.
Nota
Podeu aconseguir el mateix resultat amb només una funció ClearCollect:
ClearCollect( MyPeople, ForAll( AddColumns( Filter( Split( ThisItem.RequiredAttendees & ThisItem.OptionalAttendees, ";" ), !IsBlank( Result ) ), "InOrg", _userDomain = Right( Result, Len( Result ) - Find( "@", Result ) ) ), If( InOrg, Office365Users.UserProfile( Result ), { DisplayName: Result, Id: "", JobTitle: "", UserPrincipalName: Result, Department: "", OfficeLocation: "", TelephoneNumber: "" } ) ) )
Per acabar aquest exercici:
Afegiu una pantalla que conté una galeria per a la qual la propietat Items està definida com a MyPeople.
A la propietat OnSelect del control Títol a CalendarEventsGallery, afegiu una funció Navigate a la pantalla que heu creat en el pas anterior.