Informació de referència sobre la plantilla de pantalla de reunió per a les aplicacions de llenç

Per a les aplicacions de llenç de Power Apps, enteneu com cada control significatiu de la plantilla de pantalla de reunió contribueix a la funcionalitat predeterminada general de la pantalla. En aquesta anàlisi en profunditat es presenten fórmules del comportament i els valors d'altres propietats que determinen com els controls responen a les entrades de l'usuari. Per a una discussió d'alt nivell sobre la funcionalitat per defecte d'aquesta pantalla, vegeu la informació general de la pantalla de reunió.

En aquest tema es ressalten alguns controls importants i s'expliquen les expressions o les fórmules amb què es defineixen diverses propietats (com ara Items i OnSelect) d'aquests controls:

Requisit previ

Familiaritzar-se amb com afegir i configurar pantalles i altres controls a mesura que creeu una aplicació a Power Apps.

Pestanya Convida

Control LblInviteTab

  • Propietat: Color
    Valor: If( _showDetails, LblRecipientCount.Color, RectQuickActionBar.Fill )

    _showDetails és una variable que s'utilitza per determinar si s'ha seleccionat el control LblInviteTab o LblScheduleTab. Si el valor de _showDetails és true, el control LblScheduleTab s'ha seleccionat; si el valor és false, el control LblInviteTab s'ha seleccionat. Això vol dir que, si el valor de _showDetails és true (aquesta pestanya no s'ha seleccionat), el color de la pestanya coincideix amb el de l'element LblRecipientCount. Altrament, coincideix amb el valor d'emplenament de RectQuickActionBar.

  • Propietat: OnSelect
    Valor: Set( _showDetails, false )

    Defineix la variable _showDetails en false, la qual cosa significa que el contingut de la pestanya Convida és visible i el contingut de la pestanya Planifica està amagat.

Pestanya Planificació

Pestanya Planificació

  • Propietat: Color
    Valor: If( !_showDetails, LblRecipientCount.Color, RectQuickActionBar.Fill )

    _showDetails és una variable que s'utilitza per determinar si s'ha seleccionat el control LblInviteTab o LblScheduleTab. Si és true, s'ha seleccionat LblScheduleTab; si és false, s'ha seleccionat LblInviteTab. Això vol dir que, si _showDetails és true (aquesta pestanya s'ha seleccionat), el color de la pestanya coincideix amb el color d'emplenament de RectQuickActionBar. Altrament, coincideix amb el valor de color de LblRecipientCount.

  • Propietat: OnSelect
    Valor: Set( _showDetails, true )

    Defineix la variable _showDetails en true, la qual cosa significa que el contingut de la pestanya Planifica és visible i el contingut de la pestanya Convida està amagat.

Control TextSearchBox

Diversos altres controls de la pantalla hi tenen una dependència:

  • Si un usuari comença a escriure qualsevol text, PeopleBrowseGallery es fa visible.
  • Si un usuari escriu una adreça electrònica vàlida, AddIcon es fa visible.
  • Quan un usuari selecciona una persona dins PeopleBrowseGallery, el contingut de la cerca es restableix.

Icona Afegeix

Control AddIcon

Aquest control permet als usuaris afegir persones que no existeixen dins de la seva organització a la llista d'assistents de la reunió.

  • Propietat: Visible
    Valor: tres comprovacions lògiques que han d'avaluar si es tracta d'un valor true perquè el control sigui visible:

    !IsBlank( TextSearchBox.Text ) &&
        IsMatch( TextSearchBox.Text, Match.Email ) &&
        Not( Trim( TextSearchBox.Text ) in MyPeople.UserPrincipalName )
    

    Línia per línia, aquest bloc de codi indica que el control AddIcon només és visible si:

    • El control TextSearchBox conté text.
    • El text de TextSearchBox és una adreça electrònica vàlida.
    • El text de TextSearchBox no existeix a la col·lecció MyPeople.
  • Propietat: OnSelect
    Valor: una declaració Collect per afegir l'usuari a la llista d'assistents, una altra per actualitzar hores de reunió disponibles i diversos commutadors de variables:

    Collect( MyPeople,
        { 
            DisplayName: TextSearchBox.Text, 
            UserPrincipalName: TextSearchBox.Text, 
            Mail: TextSearchBox.Text
        }
    );
    Concurrent(
        Reset( TextSearchBox ),
        Set( _showMeetingTimes, false ),
        UpdateContext( { _loadMeetingTimes: true } ),
        Set( _selectedMeetingTime, Blank() ),
        Set( _selectedRoom, Blank() ),
        Set( _roomListSelected, false ),
        ClearCollect( MeetingTimes, 
            AddColumns(
                'Office365'.FindMeetingTimes(
                    { 
                        RequiredAttendees: Concat(MyPeople, UserPrincipalName & ";")
                        MeetingDuration: MeetingDurationSelect.Selected.Minutes,
                        Start: Text( DateAdd( MeetingDateSelect.SelectedDate, 8, Hours ), UTC ),
                        End: Text( DateAdd( MeetingDateSelect.SelectedDate, 17, Hours ), UTC ),
                        MaxCandidates: 15, 
                        MinimumAttendeePercentage:1, 
                        IsOrganizerOptional: false, 
                        ActivityDomain: "Work"
                    }
                ).MeetingTimeSuggestions,
                "StartTime", MeetingTimeSlot.Start.DateTime, 
                "EndTime", MeetingTimeSlot.End.DateTime
            )
        )
    );
    UpdateContext( { _loadingMeetingTimes: false } );
    Set( _showMeetingTimes, true )
    

    La selecció d'aquest control afegeix l'adreça electrònica vàlida (visible només si s'ha escrit una adreça electrònica vàlida a TextSearchBox) a la col·lecció MyPeople (aquesta col·lecció és la llista d'assistents) i, a continuació, actualitza les hores de reunió disponibles amb l'entrada de l'usuari nou.

    En un nivell baix, aquest bloc de codi:

    1. Recull l'adreça electrònica de la col·lecció MyPeople, que aplega l'adreça electrònica als camps DisplayName, UserPrincipalName i Correu.
    2. Restableix el contingut del control TextSearchBox.
    3. Defineix la variable _showMeetingTimes a false. Aquesta variable controla la visibilitat de FindMeetingTimesGallery, a la qual es visualitzen les hores disponibles dels assistents seleccionats.
    4. Defineix la variable de context _loadMeetingTimes a true. Aquesta variable defineix un estat de càrrega, que alterna la visibilitat dels controls d'estat de la càrrega, com ara _LblTimesEmptyState per indicar a l'usuari que les seves dades s'estan carregant.
    5. Defineix _selectedMeetingTime En blanc. _selectedMeetingTime és el registre seleccionat del control FindMeetingTimesGallery. Es deixa en blanc perquè la incorporació d'un altre assistent podria significar que la definició prèvia de _selectedMeetingTime no estigui disponible per a aquest assistent.
    6. Defineix _selectedRoom En blanc. _selectedRoom és el registre de sala seleccionat de RoomBrowseGallery. Les disponibilitats de sales es determinen amb el valor de _selectedMeetingTime. Amb aquest valor en blanc, el valor _selectedRoom ja no és vàlid, per la qual cosa ha de quedar en blanc.
    7. Defineix _roomListSelected a false. Pot ser que aquesta línia no s'apliqui a tots els usuaris. A l'Office, podeu agrupar les sales per diferents "llistes de sales". Si teniu una llista de sales, aquesta pantalla ho té en compte, la qual cosa us permet seleccionar primer una llista de sales abans de seleccionar-ne una de la llista. El valor _roomListSelected determina si un usuari (en un inquilí que només inclou llistes de sales) veurà sales d'una llista de sales o el conjunt de llistes de sales. Es defineix com a false per fer que els usuaris hagin de tornar a seleccionar una llista de sales nova.
    8. Utilitza l'operació Office365.FindMeetingTimes per determinar i recollir les hores de reunió disponibles dels assistents. Aquesta operació passa:
      • UserPrincipalName de cada usuari seleccionat al paràmetre RequiredAttendees.
      • MeetingDurationSelect.Selected.Minutes al paràmetre MeetingDuration.
      • MeetingDateSelect.SelectedDate + 8 hores al paràmetre Inici. S'afegeixen vuit hores perquè, per defecte, la data i l'hora completes per al control del calendari són les 00:00 de la data seleccionada. Segurament voldreu recuperar disponibilitats dins de les hores laborables habituals. Una hora laborable d'inici habitual serien les 8:00.
      • MeetingDateSelect.SelectedDate + 17 hores al paràmetre Final. S'afegeixen 17 hores perquè 0:00 + 17 = 17:00. Una hora laborable final habitual serien les 17:00.
      • 15 al paràmetre MaxCandidates. Això vol dir que l'operació només torna les primeres 15 hores disponibles per a la data seleccionada. Això té sentit perquè hi ha només setze intervals de 30 minuts en una jornada laboral de 8 hores i una reunió de 30 minuts és el mínima que es pot definir en aquesta pantalla.
      • 1 al paràmetre MinimumAttendeePercentage. Bàsicament, tret que no hi hagi assistents disponibles, es recupera l'hora de la reunió.
      • false al paràmetre IsOrganizerOptional. L'usuari de l'aplicació no és un assistent opcional per a aquesta reunió.
      • "Feina" al paràmetre ActivityDomain. Això vol dir que les hores recuperades només són dins d'un interval de jornada laboral habitual.
    9. La funció ClearCollect també afegeix dues columnes: "StartTime" i "EndTime". Això simplifica les dades tornades. El camp que conté les hores d'inici i final disponibles és el camp MeetingTimeSlot. Aquest camp és un registre que conté els registres d'inici i final, que contenen els valors DateTime i TimeZone del seu suggeriment corresponent. En comptes d'intentar recuperar aquests registres incrustats, afegir les columnes "StartTime" i "EndTime" a la col·lecció MeetingTimes porta els valors Inici > DateTime i Final > DateTime a la superfície de la col·lecció.
    10. Quan totes les funcions s'hagin completat, la variable _loadingMeetingTimes es defineix com a false, fet que suprimeix l'estat de càrrega, i _showMeetingTimes es defineix com a true, per mostrar FindMeetingTimesGallery.

Control PeopleBrowseGallery

  • Propietat: Items
    Valor:
    If( !IsBlank( Trim( TextSearchBox.Text ) ), 
        'Office365Users'.SearchUser( { searchTerm: Trim(TextSearchBox.Text), top: 15 } )
    )
    

Els resultats de la cerca emplenen els elements d'aquesta galeria mitjançant l'operació Office365.SearchUser. L'operació pren el text del Trim(**TextSearchBox**) com el seu terme de cerca i retorna els 15 primers resultats en funció d'aquesta cerca.

TextSearchBox s'inclou en una funció Trim perquè una recerca d'usuari en espais no és vàlida. L'operació Office365Users.SearchUser s'inclou en una funció If(!IsBlank(Trim(TextSearchBox.Text)) ... ) perquè recuperar resultats de la cerca abans que un usuari hagi cercat és malgastar rendiment.

Control de títol PeopleBrowseGallery

  • Propietat: Text
    Valor: ThisItem.DisplayName

    Mostra el nom de visualització de la persona des del seu perfil Office 365.

  • Propietat: OnSelect
    Valor: una declaració Collect per afegir l'usuari a la llista d'assistents, una altra per actualitzar hores de reunió disponibles i diversos commutadors de variables:

    Concurrent(
        Reset( TextSearchBox ),
        Set( _selectedUser, ThisItem ),
        If( Not( ThisItem.UserPrincipalName in MyPeople.UserPrincipalName ), 
            Collect( MyPeople, ThisItem ); 
            Concurrent(
                Set( _showMeetingTimes, false ),
                UpdateContext( { _loadMeetingTimes: true } ),
                Set( _selectedMeetingTime, Blank() ),
                Set( _selectedRoom, Blank() ),
                Set( _roomListSelected, false ),
                ClearCollect( MeetingTimes, 
                    AddColumns(
                        'Office365'.FindMeetingTimes(
                            {
                                RequiredAttendees: Concat( MyPeople, UserPrincipalName & ";" ),
                                MeetingDuration: MeetingDurationSelect.Selected.Minutes,
                                Start: Text( DateAdd( MeetingDateSelect.SelectedDate, 8, Hours ), UTC ),
                                End: Text( DateAdd( MeetingDateSelect.SelectedDate, 17, Hours ), UTC ),
                                MaxCandidates: 15, 
                                MinimumAttendeePercentage: 1, 
                                IsOrganizerOptional: false, 
                                ActivityDomain: "Work"
                            }
                        ).MeetingTimeSuggestions,
                        "StartTime", MeetingTimeSlot.Start.DateTime, 
                        "EndTime", MeetingTimeSlot.End.DateTime
                    )
                )
            );
            UpdateContext( { _loadingMeetingTimes: false } );
            Set( _showMeetingTimes, true )
        )
    )
    

    En un nivell alt, la selecció d'aquest control afegeix la persona a la col·lecció MyPeople (l'emmagatzematge de l'aplicació de la llista d'assistents) i actualitza els horaris de reunions disponibles segons l'addició de l'usuari nou.

    La selecció d'aquest control és molt similar a seleccionar el control AddIcon ; l'única diferència és la declaració Set(_selectedUser, ThisItem) i l'ordre d'execució de les operacions. Per tant, aquesta discussió no serà tan profunda. Per obtenir una explicació més completa, llegiu la secció Control AddIcon.

    La selecció d'aquest control restableix TextSearchBox. A continuació, si la selecció no és a la col·lecció MyPeople, el control:

    1. Defineix l'estat _loadMeetingTimes a true i l'estat _showMeetingTimes a false, deixa en blanc les variables _selectedMeetingTime i _selectedRoom i actualitza la col·lecció MeetingTimes amb l'addició nova a la col·lecció MyPeople.
    2. Defineix l'estat _loadMeetingTimes a false i _showMeetingTimes a true. Si la selecció ja és a la col·lecció MyPeople, restableix només el contingut de TextSearchBox.

Control MeetingPeopleGallery

  • Propietat: Items
    Valor: MyPeople

    La col·lecció MyPeople és la col·lecció de persones inicialitzades o afegides seleccionant el control PeopleBrowseGallery Title.

  • Propietat: Height
    Valor: lògica per permetre que la galeria creixi fins a una alçada màxima de 350:

    Min( 
        76 * RoundUp( CountRows( MeetingPeopleGallery.AllItems ) / 2, 0 ),
        350
    )
    

    L'alçada d'aquesta galeria s'ajusta al nombre d'elements de la galeria, fins a una alçada màxima de 350. La fórmula pren 76 com l'alçada d'una sola fila de MeetingPeopleGallery i, a continuació, ho multiplica pel nombre de files. La propietat WrapCount es defineix com a 2, de manera que el nombre de files definides com a true és RoundUp(CountRows(MeetingPeopleGallery.AllItems) / 2, 0).

  • Propietat: ShowScrollbar
    Valor: MeetingPeopleGallery.Height >= 350

    Quan s'arriba a l'alçada màxima de la galeria (350), la barra de desplaçament es fa visible.

Control MeetingPeopleGallery Title

  • Propietat: OnSelect

    Valor: Set(_selectedUser, ThisItem)

    Defineix la variable _selectedUser com l'element seleccionat a MeetingPeopleGallery.

Control MeetingPeopleGallery iconRemove

  • Propietat: OnSelect
    Valor: una declaració Remove per suprimir l'usuari de la llista d'assistents, una declaració Collect per actualitzar hores de reunió disponibles i diversos commutadors de variables:

    Remove( MyPeople, LookUp( MyPeople, UserPrincipalName = ThisItem.UserPrincipalName ) );
    Concurrent(
        Reset( TextSearchBox ),
        Set( _showMeetingTimes, false ),
        UpdateContext( { _loadMeetingTimes: true } ),
        Set( _selectedMeetingTime, Blank() ),
        Set( _selectedRoom, Blank() ),
        Set( _roomListSelected, false ),
        ClearCollect( MeetingTimes, 
            AddColumns(
                'Office365'.FindMeetingTimes(
                    {
                        RequiredAttendees: Concat( MyPeople, UserPrincipalName & ";" ), 
                        MeetingDuration: MeetingDurationSelect.Selected.Minutes,
                        Start: Text( DateAdd( MeetingDateSelect.SelectedDate, 8, Hours ), UTC ), 
                        End: Text( DateAdd( MeetingDateSelect.SelectedDate, 17, Hours ), UTC ),
                        MaxCandidates: 15, 
                        MinimumAttendeePercentage: 1, 
                        IsOrganizerOptional: false, 
                        ActivityDomain: "Work"
                    }
                ).MeetingTimeSuggestions,
                "StartTime", MeetingTimeSlot.Start.DateTime, 
                "EndTime", MeetingTimeSlot.End.DateTime
            )
        )
    );
    UpdateContext( { _loadingMeetingTimes: false } );
    Set( _showMeetingTimes, true )
    

    En un nivell alt, la selecció d'aquest control suprimeix la persona de la llista d'assistents i actualitza les hores de reunió disponibles en funció de l'eliminació d'aquesta persona.

    Després de la primera línia del codi anterior, la selecció d'aquest control és gairebé idèntica a la selecció del control AddIcon. Per tant, aquesta discussió no serà tan profunda. Per obtenir una explicació més completa, llegiu la secció Control AddIcon.

    A la primera línia de codi, l'element seleccionat se suprimeix de la col·lecció MyPeople. El codi, a continuació:

    1. Restableix TextSearchBox i suprimeix la selecció de la col·lecció MyPeople.
    2. Defineix l'estat _loadMeetingTimes a true i l'estat _showMeetingTimes a false, deixa en blanc les variables _selectedMeetingTime i _selectedRoom i actualitza la col·lecció MeetingTimes amb l'addició nova a la col·lecció MyPeople.
    3. Defineix l'estat _loadMeetingTimes a false i _showMeetingTimes a true.

Selector de data de la reunió

Control MeetingDateSelect

  • Propietat: DisplayMode
    Valor: If( IsEmpty(MyPeople), DisplayMode.Disabled, DisplayMode.Edit )

    No es pot triar una data per a una reunió fins que no s'hagi afegit com a mínim un assistent a la col·lecció MyPeople.

  • Propietat: OnChange
    Valor: Select( MeetingDateSelect )

    El canvi de la data seleccionada activa el codi de la propietat OnSelect d'aquest control per executar-se.

  • Propietat: OnSelect
    Valor: una declaració Collect per actualitzar les hores de reunió disponibles i diversos commutadors de variables:

    Concurrent(
        Reset( TextSearchBox ),
        Set( _showMeetingTimes, false ),
        UpdateContext( { _loadingMeetingTimes: true } ),
        Set( _selectedMeetingTime, Blank() ),
        Set( _selectedRoom, Blank() ),
        Set( _roomListSelected, false ),
        ClearCollect( MeetingTimes, 
            AddColumns(
                'Office365'.FindMeetingTimes(
                    {
                        RequiredAttendees: Concat( MyPeople, UserPrincipalName & ";" ), 
                        MeetingDuration: MeetingDurationSelect.Selected.Minutes,
                        Start: Text( DateAdd( MeetingDateSelect.SelectedDate, 8, Hours ), UTC ), 
                        End: Text( DateAdd( MeetingDateSelect.SelectedDate, 17, Hours ), UTC ),
                        MaxCandidates: 15, 
                        MinimumAttendeePercentage: 1, 
                        IsOrganizerOptional: false, 
                        ActivityDomain: "Work"
                    }
                ).MeetingTimeSuggestions,
                "StartTime", MeetingTimeSlot.Start.DateTime, 
                "EndTime", MeetingTimeSlot.End.DateTime
            )
        )
    );
    UpdateContext( { _loadingMeetingTimes: false } );
    Set( _showMeetingTimes, true )
    

    En un nivell alt, la selecció d'aquest control actualitza les hores de reunió disponibles. És valuós perquè, si un usuari canvia la data, els horaris de reunió disponibles s'han d'actualitzar per reflectir la disponibilitat dels assistents per a aquell dia.

    Amb l'excepció de la declaració Collect inicial, és idèntica a la funcionalitat OnSelect del control AddIcon. Per tant, aquesta discussió no serà tan profunda. Per obtenir una explicació més completa, llegiu la secció Control AddIcon.

    La selecció d'aquest control restableix TextSearchBox. A continuació:

    1. Defineix l'estat _loadMeetingTimes a true i l'estat _showMeetingTimes a false, deixa en blanc les variables _selectedMeetingTime i _selectedRoom i actualitza la col·lecció MeetingTimes amb la nova selecció de data.
    2. Defineix l'estat _loadMeetingTimes a false i _showMeetingTimes a true.

Menú desplegable de duració de la reunió

Control MeetingDateSelect: duració

  • Propietat: DisplayMode
    Valor: If( IsEmpty(MyPeople), DisplayMode.Disabled, DisplayMode.Edit )

    No es pot triar una duració per a una reunió fins que no s'hagi afegit com a mínim un assistent a la col·lecció MyPeople.

  • Propietat: OnChange
    Valor: Select(MeetingDateSelect1)

    El canvi de la duració seleccionada activa el codi de la propietat OnSelect del control MeetingDateSelect per executar-se.

Control FindMeetingTimesGallery

  • Propietat: Items
    Valor: MeetingTimes

    La col·lecció de possibles hores de reunió recuperada de l'operació Office365.FindMeetingTimes.

  • Propietat: Visible
    Valor: _showMeetingTimes && _showDetails && !IsEmpty( MyPeople )

    La galeria només està visible si _showMeetingTimes es defineix com a true, l'usuari ha seleccionat el control LblScheduleTab i, com a mínim, s'afegeix un assistent a la reunió.

Control FindMeetingTimesGallery Title

  • Propietat: Text
    Valor: una conversió de l'hora d'inici que es mostrarà en l'hora local de l'usuari:

    Text(
        DateAdd(
            DateTimeValue( ThisItem.StartTime ),
            - TimeZoneOffset(), 
            Minutes
        ),
        DateTimeFormat.ShortTime
    )
    

    El valor recuperat de StartTime és en format UTC. Per convertir d'UTC a l'hora local, s'aplica la funció DateAdd. La funció Text pren una data i hora com a primer argument i hi dona format segons el seu segon argument. Ho passeu en la conversió de l'hora local de ThisItem.StartTime i mostreu com a DateTimeFormat.ShortTime.

  • Propietat: OnSelect
    Valor: diverses declaracions Collect per recollir sales de reunions i els suggeriments de disponibilitat, així com diversos commutadors de variables:

    Set( _selectedMeetingTime, ThisItem );
    UpdateContext( { _loadingRooms: true } );
    If( IsEmpty( RoomsLists ),
        ClearCollect( RoomsLists, 'Office365'.GetRoomLists().value) );
    If( CountRows( RoomsLists ) <= 1,
        Set( _noRoomLists, true );
        ClearCollect( AllRooms, 'Office365'.GetRooms().value );
        Set( _allRoomsConcat, Concat( FirstN( AllRooms, 20 ), Address & ";" ) );
        ClearCollect( RoomTimeSuggestions, 
            'Office365'.FindMeetingTimes(
                {
                    RequiredAttendees: _allRoomsConcat, 
                    MeetingDuration: MeetingDurationSelect.Selected.Minutes,
                    Start: _selectedMeetingTime.StartTime & "Z", 
                    End: _selectedMeetingTime.EndTime & "Z", 
                    MinimumAttendeePercentage: "1",
                    IsOrganizerOptional: "false", 
                    ActivityDomain: "Unrestricted"
                }
            ).MeetingTimeSuggestions
        );
        ClearCollect( AvailableRooms, 
            AddColumns(
                AddColumns(
                    Filter( 
                        First( RoomTimeSuggestions ).AttendeeAvailability,
                        Availability="Free"
                    ), 
                    "Address", Attendee.EmailAddress.Address
                ), 
                "Name", LookUp( AllRooms, Address = Attendee.EmailAddress.Address ).Name 
            )
        );
        ClearCollect( AvailableRoomsOptimal, 
            DropColumns(
                DropColumns( AvailableRooms, "Availability" ), 
                "Attendee" 
            )
        ),
        Set( _roomListSelected, false) 
    );
    UpdateContext( {_loadingRooms: false} )
    

    En un nivell alt, aquest codi del bloc recull les sales disponibles per als usuaris que no tenen llistes de sales, segons la data i l'hora seleccionades per a la reunió. Altrament, simplement recupera les llistes de sales.

    En un nivell baix, aquest bloc de codi:

    1. Defineix _selectedMeetingTime a l'element seleccionat. Això s'utilitza per cercar les sales disponibles durant aquest temps.
    2. Defineix la variable d'estat de càrrega _loadingRooms a true i activa l'estat de càrrega.
    3. Si la col·lecció RoomsLists és buida, recupera les llistes de les sales de l'inquilí de l'usuari i les emmagatzema a la col·lecció RoomsLists.
    4. Si l'usuari no té cap llista de sales o en té una:
      1. La variable noRoomLists es defineix com a true i aquesta variable s'utilitza per determinar els elements que es mostren al control RoomBrowseGallery.
      2. L'operació Office365.GetRooms() s'utilitza per recuperar les primeres 100 sales de l'inquilí. S'emmagatzemen a la col·lecció AllRooms.
      3. La variable _allRoomsConcat es defineix com una cadena separada amb un punt i coma de les primeres 20 adreces electròniques de les sales de la col·lecció AllRooms. Això es deu al fet que Office365.FindMeetingTimes es limita a cercar les hores disponibles de 20 objectes de persona en una única operació.
      4. La col·lecció RoomTimeSuggestions utilitza Office365.FindMeetingTimes per recuperar la disponibilitat de les primeres 20 sales de la col·lecció AllRooms, en funció dels valors d'hores de la variable _selectedMeetingTime. Heu de tenir en compte que & "Z" s'utilitza per formatar correctament el valor DateTime.
      5. Es crea la col·lecció AvailableRooms. Això és simplement la col·lecció RoomTimeSuggestions de la disponibilitat dels assistents que inclou dues columnes addicionals que s'hi afegeixen: "Adreça" i "Nom". "Adreça" és l'adreça electrònica de la sala i "Nom" és el nom de la sala.
      6. A continuació, es crea la col·lecció AvailableRoomsOptimal. Només és la col·lecció AvailableRooms amb les columnes "Disponibilitat" i "Assistent" suprimides. Fer-ho coincideix amb els esquemes de AvailableRoomsOptimal i AllRooms. Això us permet utilitzar ambdues col·leccions a la propietat Items de RoomBrowseGallery.
      7. _roomListSelected es defineix a false.
    5. L'estat de càrrega, _loadingRooms, es defineix com a false quan la resta ja s'han acabat d'executar.

Control RoomBrowseGallery

  • Propietat: Items
    Valor: es defineix lògicament com a dues col·leccions internes d'esquema idèntic, en funció de si l'usuari ha seleccionat una llista de sales o té llistes de sales a l'inquilí:

    Search(
        If( _roomListSelected || _noRoomLists, AvailableRoomsOptimal, RoomsLists ),
        Trim(TextMeetingLocation1.Text), 
        "Name", 
        "Address"
    )
    

    En aquesta galeria es mostra la col·lecció AvailableRoomsOptimal si _roomListSelected o _noRoomLists és true. Altrament, es mostrarà la col·lecció RoomsLists. Això es pot fer perquè l'esquema d'aquestes col·leccions és idèntic.

  • Propietat: Visible
    Valor: _showDetails && !IsBlank( _selectedMeetingTime ) && !_loadingRooms

    La galeria només és visible si les tres declaracions anteriors són true.

Títol de RoomBrowseGallery

Control RoomBrowseGallery Title

  • Propietat: OnSelect
    Valor: un conjunt de declaracions Collect i Set enllaçades lògicament, que pot ser que s'activin o no, en funció de si l'usuari visualitza sales o llistes de sales:

    UpdateContext( { _loadingRooms: true } );
    If( !_roomListSelected && !noRoomLists,
        Set( _roomListSelected, true );
        Set( _selectedRoomList, ThisItem.Name );
        ClearCollect( AllRooms, 'Office365'.GetRoomsInRoomList( ThisItem.Address ).value );
        Set( _allRoomsConcat, Concat( FirstN( AllRooms, 20 ), Address & ";" ) );
        ClearCollect( RoomTimeSuggestions, 
            'Office365'.FindMeetingTimes(
                {
                    RequiredAttendees: _allRoomsConcat, 
                    MeetingDuration: MeetingDurationSelect.Selected.Minutes,
                        Start: _selectedMeetingTime.StartTime & "Z", 
                    End: _selectedMeetingTime.EndTime & "Z", 
                    MinimumAttendeePercentage: "1",
                    IsOrganizerOptional: "false", 
                    ActivityDomain: "Unrestricted"
                }
            ).MeetingTimeSuggestions
        );
        ClearCollect( AvailableRooms, 
            AddColumns(
                AddColumns(
                    Filter(
                        First( RoomTimeSuggestions ).AttendeeAvailability, 
                        Availability = "Free"
                    ),
                    "Address", Attendee.EmailAddress.Address 
                ), 
                "Name", LookUp( AllRooms, Address = Attendee.EmailAddress.Address ).Name
            )
        );
        ClearCollect( AvailableRoomsOptimal, 
            DropColumns(
                DropColumns( AvailableRooms, "Availability" )
            ), 
            "Attendee" )
        ),
        Set( _selectedRoom, ThisItem )
    );
    UpdateContext( {_loadingRooms: false} )
    

    Les accions que es produeixen en el moment en què se selecciona aquest control depenen de si un usuari visualitza actualment un conjunt de llistes de sales o un conjunt de sales. Si és la primera opció, la selecció d'aquest control recupera les sales disponibles a l'hora seleccionada de la llista de sales seleccionada. Si és l'última opció, la selecció d'aquest control defineix la variable _selectedRoom a l'element seleccionat. La declaració anterior és molt semblant a la declaració Select de Títol de FindMeetingTimesGallery.

    En un nivell baix, el bloc de codi anterior:

    1. Activa l'estat de càrrega per a les sales en definir _loadingRooms a true.
    2. Comprova si s'ha seleccionat una llista de sales i si l'inquilí té llistes de sales. Si és així:
      1. Defineix _roomListSelected a true i defineix _selectedRoomList a l'element seleccionat.
      2. La variable _allRoomsConcat es defineix com una cadena separada amb un punt i coma de les primeres 20 adreces electròniques de les sales de la col·lecció AllRooms. Això es deu al fet que l'operació Office365.FindMeetingTimes es limita a cercar les hores disponibles de 20 objectes de persona en una única operació.
      3. La col·lecció RoomTimeSuggestions utilitza l'operació Office365.FindMeetingTimes per recuperar la disponibilitat de les primeres 20 sales de la col·lecció AllRooms, en funció dels valors d'hores de la variable _selectedMeetingTime. Heu de tenir en compte que & "Z" s'utilitza per formatar correctament el valor DateTime.
      4. Es crea la col·lecció AvailableRooms. Això és simplement la col·lecció RoomTimeSuggestions de la disponibilitat dels assistents que inclou dues columnes addicionals que s'hi afegeixen: "Adreça" i "Nom". "Adreça" és l'adreça electrònica de la sala i "Nom" és el nom de la sala.
      5. A continuació, es crea la col·lecció AvailableRoomsOptimal. Només és la col·lecció AvailableRooms amb les columnes "Disponibilitat" i "Assistent" suprimides. Fer-ho coincideix amb els esquemes de AvailableRoomsOptimal i AllRooms. Això us permet utilitzar ambdues col·leccions a la propietat Items de RoomBrowseGallery.
      6. _roomListSelected es defineix a false.
    3. L'estat de càrrega, _loadingRooms, es defineix com a false quan la resta ja s'han acabat d'executar.

Cometes angulars Enrere

Control RoomsBackNav

  • Propietat: Visible
    Valor: _roomListSelected && _showDetails

    Aquest control només és visible si s'ha seleccionat una llista de sales i s'ha seleccionat la pestanya Planifica.

  • Propietat: OnSelect
    Valor: Set( _roomListSelected, false )

    Quan _roomListSelected es defineix com a false, canvia el control RoomBrowseGallery per mostrar els elements de la col·lecció RoomsLists.

Icona Envia

Control IconSendItem

  • Propietat: DisplayMode
    Valor: lògica per fer que l'usuari introdueix determinats detalls de la reunió abans que la icona es pugui editar.

    If( Len( Trim( TextMeetingSubject1.Text ) ) > 0
        && !IsEmpty( MyPeople ) && !IsBlank( _selectedMeetingTime ),
        DisplayMode.Edit, DisplayMode.Disabled
    )
    

    La icona només es pot seleccionar si s'ha emplenat el tema de la reunió, hi ha un mínim d'un assistent a la reunió i s'ha seleccionat l'hora de la reunió. Altrament, s'ha inhabilitat.

  • Propietat: OnSelect

    Valor: codi per enviar la invitació de la reunió als assistents seleccionats i esborrar tots els camps d'entrada:

    Set( _myCalendarName, LookUp( 'Office365'.CalendarGetTables().value, DisplayName = "Calendar" ).Name );
    Set( _myScheduledMeeting, 
        'Office365'.V2CalendarPostItem( _myCalendarName,
            TextMeetingSubject1.Text, 
            Text(DateAdd(DateTimeValue( _selectedMeetingTime.StartTime), -TimeZoneOffset(), Minutes) ),
            Text(DateAdd(DateTimeValue( _selectedMeetingTime.EndTime), -TimeZoneOffset(), Minutes) ),
            {
                RequiredAttendees: Concat( MyPeople, UserPrincipalName & ";" ) & _selectedRoom.Address, 
                Body: TextMeetingMessage1.Text, 
                Location: _selectedRoom.Name, 
                Importance: "Normal", 
                ShowAs: "Busy", 
                ResponseRequested: true
            }
        )
    );
    Concurrent(
        Reset( TextMeetingLocation1 ),
        Reset( TextMeetingSubject1 ),
        Reset( TextMeetingMessage1 ),
        Clear( MyPeople ),
        Set( _selectedMeetingTime, Blank() ),
        Set( _selectedRoomList, Blank() ),
        Set( _selectedRoom, Blank() ),
        Set( _roomListSelected, false )
    )
    

    En un nivell baix, aquest bloc de codi:

    1. Defineix _myCalendarName al calendari de l'operació Office365.CalendarGetTables() amb el valor "Calendari" de DisplayName.
    2. Planifica la reunió amb tots els valors d'entrada de les diverses seleccions que l'usuari ha fet a tota la pantalla amb l'operació Office365.V2CalendarPostItem.
    3. Restableix tots els camps d'entrada i les variables que s'utilitzen a la creació de la reunió.

Nota

En funció de la regió, pot ser que el calendari que voleu no tingui el nom de visualització "Calendari". Aneu a l'Outlook per veure quin és el títol del calendari i fer els canvis adients a l'aplicació.

Passos següents