Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W rozwiązaniu z aplikacjami kanwy w Power Apps można ustalić, jak każda znacząca kontrolka w szablonie ekranu spotkań przyczynia się do ogólnego funkcjonowania ekranu. Ten dogłębny artykuł prezentuje formuły zachowania i wartości innych właściwości określających sposób reakcji formantów na dane wprowadzone przez użytkownika. Aby zapoznać się z ogólną funkcjonalnością tego ekranu na najwyższym poziomie, zobacz Omówienie ekranu spotkań.
W tym temat wyróżniono niektóre istotne elementy sterujące i wyjaśniono wyrażenia lub formuły, w których są ustawione różne właściwości (np. Elementy i OnSelect) tych formantów:
- Karta zaproszenia (LblInviteTab)
- Karta harmonogramu (LblScheduleTab)
- Pole wyszukiwania tekstu
- Dodaj ikonę (AddIcon)
- Galeria przeglądania użytkowników (+ kontrolki podrzędne)
- Galeria spotkań z osobami (+ kontrolki podrzędne)
- Selektor dat spotkań (MeetingDateSelect)
- Czas trwania spotkania — lista rozwijana (MeetingDurationSelect)
- Galeria Wyszukiwanie godziny spotkania (+ kontrolki podrzędne)
- Galeria przeglądania pomieszczeń (+ kontrolki podrzędne)
- Tylny szewron (RoomsBackNav) (może nie być widoczny, jeśli dzierżawca nie ma list pomieszczeń)
- Ikona wysyłania
Warunek wstępny
Znajomość sposobu dodawania i konfigurowania ekranów oraz innych elementów sterujących podczas tworzenia aplikacji w programie Power Apps.
Karta zaproszenie
Właściwość: Kolor
Wartość:If( _showDetails, LblRecipientCount.Color, RectQuickActionBar.Fill )
_showDetails to zmienna używana w celu określenia, czy jest wybrana kontrolka LblInviteTab lub kontrolka LblScheduleTab. Jeśli wartość _showDetails jest równa prawda, wybierana jest LblScheduleTab; jeśli ta wartość wynosi fałsz, wybrana jest opcja LblInviteTab. Oznacza to, że jeśli wartość _showDetails jest równa prawda (ta karta nie jest zaznaczona), kolor karty jest taki sam, jak w LblRecipientCount. W przeciwnym razie jest on zgodny z wartością wypełnienia w RectQuickActionBar.
Właściwość: OnSelect
Wartość:Set( _showDetails, false )
Ustawia zmienną _showDetails jako fałsz, co oznacza, że widoczna jest treść karty Zaproszenie, a zawartość karty Harmonogram jest ukryta.
Karta Harmonogram
Właściwość: Kolor
Wartość:If( !_showDetails, LblRecipientCount.Color, RectQuickActionBar.Fill )
_showDetails to zmienna używana w celu określenia, czy jest wybrana kontrolka LblInviteTab lub kontrolka LblScheduleTab. Jeśli jest to prawda, wybierany jest LblScheduleTab; w przypadku wartości fałszywej, wybeirany jest LblInviteTab. Oznacza to, że jeśli wartość _showDetails jest równa prawda (ta karta jest zaznaczona), kolor karty jest taki sam jak wartość wypełnienia RectQuickActionBar. W przeciwnym razie kolor jest zgodny z wartością LblRecipientCount.
Właściwość: OnSelect
Wartość:Set( _showDetails, true )
Ustawia zmienną _showDetails jako prawda, co oznacza, że widoczna jest treść karty Harmonogram, a zawartość karty Zaproszenie jest ukryta.
Pole wyszukiwania tekstu
Kilka innych kontrolek na ekranie ma zależność od tego:
- Jeśli użytkownik zacznie wpisywać tekst, zostanie wyświetlona PeopleBrowseGallery.
- Jeśli użytkownik wpisze prawidłowy adres e-mail, zostanie wyświetlona AddIcon.
- Po wybraniu przez użytkownika osoby w PeopleBrowseGallery zawartość wyszukiwania zostaje zresetowana.
Ikona dodawania
Kontrolka ta pozwala użytkownikom dodawać osoby, które nie istnieją w organizacji, do listy uczestników spotkania, która ma zostać stworzona.
Właściwość: Widoczne
Wartość: trzy kontrolki logiczne, które wszystkie muszą być oszacowane jako prawda, aby kontrola była widoczna:!IsBlank( TextSearchBox.Text ) && IsMatch( TextSearchBox.Text, Match.Email ) && Not( Trim( TextSearchBox.Text ) in MyPeople.UserPrincipalName )
Wiersz po wierszu, ten blok kodu informuje, że kontrolka AddIcon jest widoczna tylko wtedy, gdy:
- TextSearchBox zawiera tekst.
- Tekst w TextSearchBox jest prawidłowym adresem e-mail.
- Tekst w TextSearchBox nie istnieje już w kolekcji MyPeople.
Właściwość: OnSelect
Wartość: instrukcja Collect, która powoduje dodanie użytkownika do listy uczestników, może również odświeżyć dostępne czasy spotkań i przełączać różne zmienne: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 )
Wybranie tej kontrolki powoduje dodanie prawidłowego adresu e-mail (można go wyświetlić tylko wtedy, gdy w TextSearchBox jest wpisany prawidłowy adres e-mail) do kolekcji MyPeople (kolekcja jest listą uczestników), a następnie odświeża dostępne godziny spotkania i nowy wpis użytkownika.
Na niskim poziomie ten blok kodu:
- Program gromadzi adresy e-mail w kolekcji MyPeople i gromadzi je w polach DisplayName, UserPrincipalName i Mail.
- Resetuje zawartości kontrolki TextSearchBox.
- Ustawia zmienną _showMeetingTimes jako fałsz. Ta zmienna steruje widocznością FindMeetingTimesGallery, która zawiera wolne godziny zaznaczonych uczestników na spotkania.
- Ustawia zmienną kontekstu _loadMeetingTimes jako prawda. Ta zmienna określa stan ładowania, który powoduje przełączenie widoczności kontrolek stanu ładowania, takich jak _LblTimesEmptyState, aby wskazać użytkownikowi, że ładowane są jego dane.
- Ustawia wartość _selectedMeetingTime na Pusty(). _selectedMeetingTime jest zaznaczonym rekordem z kontrolki FindMeetingTimesGallery. To pole jest puste, ponieważ dodanie innego uczestnika może oznaczać, że poprzednia definicja _selectedMeetingTime nie jest dostępna dla tego uczestnika.
- Ustawia wartość _selectedRoom na Pusty(). _selectedRoom jest wybranym rekordem pomieszczenia z poziomu RoomBrowseGallery. Dostępność pomieszczenia jest określana na podstawie wartości _selectedMeetingTime. Po wypełnieniu tej wartości wartość _selectedRoom nie jest już prawidłowa, w związku z czym pole musi być puste.
- Ustawia wartość _roomListSelected na fałsz. Ta pozycja może nie dotyczyć wszystkich użytkowników. W pakiecie Office możesz grupować pomieszczenia według różnych „list pomieszczeń”. Jeśli są używane listy pomieszczeń, ten ekran to uwzględnia, umożliwiając najpierw wybranie listy pokoi przed wybraniem pokoju z tej listy. Wartość _roomListSelected decyduje o tym, czy użytkownik (w dzierżawie tylko z listą pokojów) będzie wyświetlać pomieszczenia na liście pomieszczeń lub w zestawie list pomieszczeń. Właściwość jest ustawiona na fałsz, aby zmusić użytkowników do ponownego wybierania nowej listy pomieszczeń.
- Program używa operacji Office365.FindMeetingTimes w celu określenia i zebrania dostępnych terminów spotkań dla uczestników. Ta operacja przebiega w następujący sposób:
- Element userPrincipalName każdego zaznaczonego użytkownika w parametrze RequiredAttendees.
- MeetingDurationSelect.Selected.Minutes na parametr MeetingDuration.
- MeetingDateSelect. SelectedDate + 8 godzin w parametrze Start. Dodanie ośmiu godzin jest przypuszczane, ponieważ pełna Data/Godzina dla kontrolki Kalendarz wynosi domyślnie 12:00 i jest zaznaczona Data. W normalnych godzinach pracy warto zapewneć pobieranie dostępności. Normalną godziną rozpoczęcia pracy może być 8:00 AM.
- MeetingDateSelect.SelectedDate + 17 godzin w parametrze Koniec. Dodano 17 godzin, ponieważ 12:00 AM + 17 = 5:00 PM. Normalną godziną zakończenia pracy może być 5:00 PM.
- 15 w parametrze MaxCandidates. Oznacza to, że operacja zwraca tylko 15 godzin pierwszych dostępności za wybraną datę. Ma to sens, ponieważ w 8-godzinnym dniu pracy jest tylko szesnaście 30-minutowych kawałków, a 30-minutowe spotkanie to minimum, które można ustawić na tym ekranie.
- 1 do parametru MinimumAttendeePercentage. W zasadzie czas spotkania jest pobierany głównie wtedy, gdy żaden z uczestników nie jest dostępny.
- fałsz w parametrze IsOrganizerOptional. Użytkownik aplikacji nie jest opcjonalnym uczestnikiem tego spotkania.
- „Praca” z parametrem ActivityDomain. Oznacza to, że czasy pobrano tylko w zwykłym okresie roboczym.
- Funkcja ClearCollect dodaje również dwie kolumny: "StartTime" i "EndTime". Upraszcza to zwracane dane. Pole zawierające dostępną godzinę rozpoczęcia i zakończenia to pole MeetingTimeSlot. To pole jest rekordem zawierającym rekordy początkowe i końcowe, które same zawierają wartości typu DateTime i TimeZone w odpowiednich sugestiach. Zamiast próby pobrania tego zagnieżdżenia rekordów dodanie kolumn „StartTime” i „EndTime” do kolekcji MeetingTimes powoduje, że wartości Start > DateTime i End > DateTime wysuwają się na powierzchnię kolekcji.
- Po wykonaniu wszystkich tych funkcji zmienna _loadingMeetingTimes ma ustawioną wartość fałsz, usuwanie stanu ładowania i _showMeetingTimes jest ustawiona na wartość prawda, czyli wyświetlanie FindMeetingTimesGallery.
Galeria przeglądania osób
- Właściwość: Elementy
Wartość:If( !IsBlank( Trim( TextSearchBox.Text ) ), 'Office365Users'.SearchUser( { searchTerm: Trim(TextSearchBox.Text), top: 15 } ) )
Elementy tej galerii są wypełniane przez wyniki wyszukiwania z operacji Office365.SearchUser. W tej operacji tekst w Trim(**TextSearchBox**)
jest używany w postaci terminu wyszukiwania i zwraca 15 pierwszych wyników, które będą oparte na tym wyszukiwaniu.
TextSearchBox jest otoczony funkcją Trim, ponieważ wyszukiwanie w przestrzeniach użytkownika jest nieprawidłowe. Operacja Office365Users.SearchUser
jest otaczana funkcją If(!IsBlank(Trim(TextSearchBox.Text)) ... )
, ponieważ pobieranie wyników wyszukiwania przed wyszukaniem przez użytkownika stanowi odpady funkcjonalne.
Ludzie przeglądają galerię Tytuł
Właściwość: Text
Wartość:ThisItem.DisplayName
Wyswietla wyświetlana nazwa danej osoby z poziomu własnego profilu Office 365.
Właściwość: OnSelect
Wartość: instrukcja Collect, która powoduje dodanie użytkownika do listy uczestników, może również odświeżyć dostępne czasy spotkań i przełączać różne zmienne: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 ) ) )
Na wysokim poziomie wybranie tej kontrolki dodaje osobę do kolekcji MyPeople (przechowywanie listy uczestników przez aplikację) i odświeża dostępne terminy spotkań na podstawie dodania nowego użytkownika.
Wybranie tej kontrolki jest bardzo podobne do zaznaczenia opcji AddIcon; jedyna różnica polega na tym, że instrukcja
Set(_selectedUser, ThisItem)
i kolejność wykonywania operacji są wykonywane. Tak więc dyskusje nie będą tak głębokie. Aby zapoznać się z pełniejszym objaśnieniem, należy zapoznać się z sekcją kontrolka Addicon.Wybranie tego formantu powoduje zresetowanie TextSearchBox. Następnie, jeśli wybór nie znajduje się w kolekcji MyPeople, kontrolka:
- Powoduje ustawienie stanu _loadMeetingTimes równą prawda, a stan _showMeetingTimes wartość fałsz, puste zmienne _selectedMeetingTime i _selectedRoom, a następnie odświeża kolekcję MeetingTimes przy użyciu nowego dodawania do kolekcji MyPeople.
- Określa stan _loadMeetingTimes równy fałsz i ustawia wartość _showMeetingTimes równą prawda. Jeśli dany wybór znajduje się już w kolekcji MyPeople, zresetowana jest jedynie treść TextSearchBox.
Galeria spotkań z ludźmi
Właściwość: Elementy
Wartość:MyPeople
MyPeople to kolekcja osób, które zainicjowały lub dodali do programu, zaznaczając kontrolka PeopleBrowseGallery Tytuł.
Właściwość: Height
Wartość: Logika umożliwiająca wzrost galerii do maksymalnej wysokości 350:Min( 76 * RoundUp( CountRows( MeetingPeopleGallery.AllItems ) / 2, 0 ), 350 )
Wysokość tej galerii jest regulowana liczbą elementów w galerii i ma maksymalną wysokość 350. Formuła przyjmuje 76 jako wysokość pojedynczego wiersza MeetingPeopleGallery, a następnie mnoży ją przez liczbę wierszy. Właściwość WrapCount jest ustawiona na wartość 2, więc liczba rzeczywistych wierszy wynosi
RoundUp(CountRows(MeetingPeopleGallery.AllItems) / 2, 0)
.Właściwość: ShowScrollbar
Wartość:MeetingPeopleGallery.Height >= 350
Po osiągnięciu maksymalnej wysokości galerii (350) widoczny jest pasek przewijania.
Tytuł Galeria spotkań z ludźmi
Właściwość: OnSelect
Wartość:
Set(_selectedUser, ThisItem)
Ustawia zmienną _selectedUser na element zaznaczony w MeetingPeopleGallery.
Galeria spotkań z ludźmi iconRemove
Właściwość: OnSelect
Wartość: instrukcja Remove, która powoduje usunięcie użytkownika z listy uczestników, instrukcja Collect, która powoduje dodanie użytkownika do listy uczestników: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 )
Na wysokim poziomie wybranie tej kontrolki usuwa osobę z listy uczestników i odświeża dostępne czasy spotkań w oparciu o usunięcie tej osoby.
Po pierwszym wierszu poprzedniego kodu wybranie tej kontrolki jest niemal identyczne, aby można było wybrać kontrolkę AddIcon. Tak więc dyskusje nie będą tak głębokie. Aby zapoznać się z pełniejszym objaśnieniem, należy zapoznać się z sekcją kontrolka Addicon.
W pierwszym wierszu kodu wybrany element jest usuwany z kolekcji MyPeople. Kod:
- Powoduje zresetowanie TextSearchBox, a następnie usunięcie zaznaczenia z kolekcji MyPeople.
- Powoduje ustawienie stanu _loadMeetingTimes równą prawda, a stan _showMeetingTimes wartość fałsz, puste zmienne _selectedMeetingTime i _selectedRoom, a następnie odświeża kolekcję MeetingTimes przy użyciu nowego dodawania do kolekcji MyPeople.
- Określa stan _loadMeetingTimes równy fałsz i ustawia wartość _showMeetingTimes równą prawda.
Selektor daty spotkań
Właściwość: DisplayMode
Wartość:If( IsEmpty(MyPeople), DisplayMode.Disabled, DisplayMode.Edit )
Data spotkania nie może być wybierana, dopóki nie zostanie dodany do kolekcji MyPeople co najmniej jeden uczestnik.
Właściwość: OnChange
Wartość:Select( MeetingDateSelect )
Zmiana wybranej daty powoduje wyzwolenie kodu we właściwości OnSelect na uruchomienie tej kontrolki.
Właściwość: OnSelect
Wartość: oświadczenie Collect umożliwiające odświeżenie dostępnych godzin spotkań i przełączników różnych zmiennych: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 )
Na wysokim poziomie wybranie tej kontrolki odświeża dostępne czasy spotkań. Jest to przydatne, ponieważ jeśli użytkownik zmieni datę, dostępne czasy spotkań muszą zostać zaktualizowane w celu odzwierciedlenia dostępności danego dnia przez uczestników.
Z wyjątkiem początkowej instrukcji Collect jest to jednak identyczne z funkcją OnSelect kontrolki AddIcon. Tak więc dyskusje nie będą tak głębokie. Aby zapoznać się z pełniejszym objaśnieniem, należy zapoznać się z sekcją kontrolka Addicon.
Wybranie tego formantu powoduje zresetowanie TextSearchBox. W ten sposób:
- Ustawia stan _loadMeetingTimes na prawda, a stan _showMeetingTimes na fałsz, usuwa puste zmienne _selectedMeetingTime i _selectedRoom , i odświeża kolekcję MeetingTimes z nowym wyborem daty.
- Określa stan _loadMeetingTimes równy fałsz i ustawia wartość _showMeetingTimes równą prawda.
Pole rozwijane czasu trwania spotkania
Właściwość: DisplayMode
Wartość:If( IsEmpty(MyPeople), DisplayMode.Disabled, DisplayMode.Edit )
Czas trwania nie może być wybierana, dopóki nie zostanie dodany do kolekcji MyPeople co najmniej jeden uczestnik.
Właściwość: OnChange
Wartość:Select(MeetingDateSelect1)
Zmiana wybranego czasy trwania powoduje wyzwolenie kodu we właściwości OnSelect kontrolki MeetingDateSelect do uruchomienia.
Galeria wyszukiwania terminów spotkań
Właściwość: Elementy
Wartość:MeetingTimes
Zbieranie potencjalnych terminów spotkań pobranych z operacji Office365.FindMeetingTimes.
Właściwość: Widoczne
Wartość:_showMeetingTimes && _showDetails && !IsEmpty( MyPeople )
Galeria jest widoczna tylko wtedy, gdy _showMeetingTimes ma wartość prawda, użytkownik wybrał kontrolkę LblScheduleTab, a do spotkania jest dodawany co najmniej jeden uczestnik.
Galeria wyszukiwania terminów spotkań Tytuł
Właściwość: Text
Wartość: Konwersja czasu rozpoczęcia, która ma być wyświetlana na czas lokalny użytkownika:Text( DateAdd( DateTimeValue( ThisItem.StartTime ), - TimeZoneOffset(), Minutes ), DateTimeFormat.ShortTime )
Pobrana wartość parametru StartTime jest w formacie UTC. Aby można było przeprowadzić konwersję z czasu UTC na lokalny, stosowana jest funkcja DateAdd. Funkcja tekstu pobiera datę/godzinę jako pierwszy argument, a formatowanie jest oparte na drugim argumencie. W tym celu należy przekazać lokalną konwersję czasu ThisItem.StartTime i wyświetlić ją jako DateTimeFormat.ShortTime.
Właściwość: OnSelect
Wartość: kilka instrukcji Collect polegających na zgromadzeniu pomieszczeń spotkań i ich sugerowanej dostępności, a także wielu przełączników zmiennych: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} )
Na wysokim poziomie ten blok kodu gromadzi dostępne pomieszczenia dla użytkowników, którzy nie mają list pomieszczeń, na podstawie wybranej daty/godziny spotkania. W przeciwnym razie są po prostu pobrane listy pomieszczeń.
Na niskim poziomie ten blok kodu:
- Ustawia _selectedMeetingTime na zaznaczony element. Ta funkcja umożliwia znalezienie, jakie pomieszczenia są dostępne w tym samym czasie.
- Ustawia zmienną stanu ładowania _loadingRooms równą prawda, co powoduje włączenie stanu ładowania.
- Jeśli kolekcja RoomsLists jest pusta, jest pobierana lista pomieszczeń dzierżawy użytkownika i zawiera je w kolekcji RoomsLists.
- Jeśli użytkownik nie ma listy pomieszczeń ani jednej listy pomieszczeń:
- Zmienna noRoomLists jest ustawiona na wartość prawda, a ta zmienna jest używana do określania elementów wyświetlanych w kontrolce RoomBrowseGallery.
- Operacja
Office365.GetRooms()
jest używana do pobierania pierwszych 100 pomieszczeń w ich dzierżawie. Są one przechowywane w kolekcji AllRooms. - Zmienna _allRoomsConcat jest ustawiona na ciąg rozdzielany średnikami z pierwszych 20 adresów e-mail pomieszczeń w kolekcji AllRooms. Dzieje się tak, ponieważ Office365.FindMeetingTimes jest ograniczony do wyszukiwania dostępnych godzin 20 osobego obiektu w ramach jednej operacji.
- Kolekcja RoomTimeSuggestions używa Office365.FindMeetingTimes w celu pobrania dostępności pierwszych 20 pomieszczeń w kolekcji AllRooms na podstawie wartości godzinowych zmiennej _selectedMeetingTime. Zauważ, że
& "Z"
jest używana do prawidłowego formatowania wartości DateTime. - Kolekcja AvailableRooms została utworzona. Jest to po prostu kolekcja RoomTimeSuggestions dostępności uczestników z dwiema dodatkowymi kolumnami: „Adres” i „Nazwa”. „Adres” to adres e-mail pomieszczenia, a „nazwa” to nazwa pomieszczenia.
- Kolekcja AvailableRoomsOptimal została utworzona. Jest to tylko kolekcja AvailableRooms z usuniętymi kolumnami „Dostępność” i „Uczestnik”. Jest to zgodne ze schematami elementów AvailableRoomsOptimal i AllRooms. Zezwala to na korzystanie z obu zbiorów we właściwości Elementy RoomBrowseGallery.
- _roomListSelected jest ustawiona na fałsz.
- Stan ładowania, _loadingRooms, jest ustawiany na fałsz po zakończeniu wykonywania innych czynności.
Galeria przeglądania pomieszczeń
Właściwość: Elementy
Wartość: Logicznie ustawione na dwie wewnętrzne kolekcje o identycznym schemacie, w zależności od tego, czy użytkownik wybrał listę pomieszczeń, czy ma listy pomieszczeń w dzierżawie:Search( If( _roomListSelected || _noRoomLists, AvailableRoomsOptimal, RoomsLists ), Trim(TextMeetingLocation1.Text), "Name", "Address" )
W tej galerii jest wyświetlona kolekcja AvailableRoomsOptimal, jeśli _roomListSelected lub _noRoomLists jest prawdą. W przeciwnym razie zostanie wyświetlona kolekcja RoomsLists. Można to zrobić, ponieważ schemat tych kolekcji jest identyczny.
Właściwość: Widoczne
Wartość:_showDetails && !IsBlank( _selectedMeetingTime ) && !_loadingRooms
Galeria jest widoczna tylko wtedy, gdy w trzech poprzednich instrukcjach jest obliczana wartość prawda.
RoomBrowseGallery Tytuł
Właściwość: OnSelect
Wartość: Zestaw logicznie powiązanych instrukcji Collect i Set, które mogą lub nie zostać wyzwolone, w zależności od tego, czy użytkownik wyświetla listę pomieszczeń lub pomieszczenia: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} )
Akcje występujące po wybraniu tej kontrolki zależą od tego, czy dany użytkownik wyświetla obecnie zestaw list pomieszczeń i zestawu pomieszczeń. Jeśli jest to pierwsze, wybranie tego elementu sterującego spowoduje pobranie pomieszczeń dostępnych w wybranym czasie z listy wybranych pomieszczeń. Jeśli to ostatnie, wybranie tej kontrolki powoduje ustawienie zmiennej _selectedRoom dla wybranego elementu. Powyższa instrukcja jest bardzo podobna do instrukcji Wybierz dla FindMeetingTimesGallery Tytuł.
Na niskim poziomie poprzedni blok kodu:
- Włącza stan ładowania pokoi, ustawiając _loadingRooms na prawdę.
- Sprawdza, czy wybrano listę pomieszczeń i czy dzierżawca ma listy pomieszczeń. Jeśli tak:
- Ustawia _roomListSelected na prawda i ustawia _selectedRoomList na zaznaczony element.
- Zmienna _allRoomsConcat jest ustawiona na ciąg rozdzielany średnikami z pierwszych 20 adresów e-mail pomieszczeń w kolekcji AllRooms. Dzieje się tak, ponieważ operacja Office365.FindMeetingTimes jest ograniczona do wyszukiwania dostępnych godzin 20 osobego obiektu w ramach jednej operacji.
- Kolekcja RoomTimeSuggestions używa operacji Office365.FindMeetingTimes w celu pobrania dostępności pierwszych 20 pomieszczeń w kolekcji AllRooms na podstawie wartości godzinowych zmiennej _selectedMeetingTime. Zauważ, że
& "Z"
jest używane do prawidłowego formatowania wartości DateTime. - Kolekcja AvailableRooms została utworzona. Jest to po prostu kolekcja RoomTimeSuggestions dostępności uczestników z dwiema dodatkowymi kolumnami: „Adres” i „Nazwa”. „Adres” to adres e-mail pomieszczenia, a „nazwa” to nazwa pomieszczenia.
- Kolekcja AvailableRoomsOptimal została utworzona. Jest to tylko kolekcja AvailableRooms z usuniętymi kolumnami „Dostępność” i „Uczestnik”. Jest to zgodne ze schematami elementów AvailableRoomsOptimal i AllRooms. Zezwala to na korzystanie z obu zbiorów we właściwości Elementy RoomBrowseGallery.
- _roomListSelected jest ustawiona na fałsz.
- Stan ładowania, _loadingRooms, jest ustawiany na fałsz po zakończeniu wykonywania innych czynności.
Tylna podwójna strzałka
Właściwość: Widoczne
Wartość:_roomListSelected && _showDetails
Kontrolka jest widoczna tylko wtedy, gdy została zaznaczona opcja listy pokojów i wybrana karta Harmonogram.
Właściwość: OnSelect
Wartość:Set( _roomListSelected, false )
Kiedy _roomListSelected ma wartość fałsz, zmienia kontrolkę RoomBrowseGallery, tak aby wyświetlała elementy z kolekcji RoomsLists.
Ikona wysyłania
Właściwość: DisplayMode
Wartość: Logika, aby zmusić użytkownika do wprowadzenia określonych szczegółów spotkania, zanim ikona stanie się edytowalna.If( Len( Trim( TextMeetingSubject1.Text ) ) > 0 && !IsEmpty( MyPeople ) && !IsBlank( _selectedMeetingTime ), DisplayMode.Edit, DisplayMode.Disabled )
Ikona jest wybierana tylko wtedy, gdy wypełniany jest temat spotkania, dla danego spotkania jest co najmniej jeden uczestnik i jest wybierany czas spotkania. W przeciwnym razie jest wyłączone.
Właściwość: OnSelect
Wartość: Kod, aby wysłać zaproszenie na spotkanie do wybranych uczestników i wyczyścić wszystkie pola wprowadzania:
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 ) )
Na niskim poziomie ten blok kodu:
- Ustawia _myCalendarName z kalendarzem w operacji Office365.CalendarGetTables() podając DisplayName jako „Kalendarz”.
- Planuje spotkanie ze wszystkimi wartościami wejściowymi pochodzącymi z różnych wyborów wprowadzonych przez użytkownika na ekranie przy użyciu operacji Office365.V2CalendarPostItem.
- Powoduje zresetowanie wszystkich pól wejściowych i zmiennych użytych podczas tworzenia spotkania.
Uwaga
W zależności od regionu odpowiedni kalendarz może nie mieć nazwy wyświetlanej „Kalendarz”. W celu sprawdzenia, jaki jest tytuł kalendarza, należy przejść do programu Outlook i wprowadzić odpowiednie zmiany w aplikacji.
Następne kroki
- Więcej informacji o tym obrazie
- Więcej informacji o łączniku Office 365 Outlook znajduje się w Power Apps
- Więcej informacji o łączniku użytkownicy Office 365 znajduje się w Power Apps
Uwaga
Czy możesz poinformować nas o preferencjach dotyczących języka dokumentacji? Wypełnij krótką ankietę. (zauważ, że ta ankieta jest po angielsku)
Ankieta zajmie około siedmiu minut. Nie są zbierane żadne dane osobowe (oświadczenie o ochronie prywatności).