다음을 통해 공유


캔버스 앱의 모임 화면 템플릿에 대한 참조 정보

Power Apps의 캔버스 앱에 대해 모임 화면 템플릿의 각 중요한 컨트롤이 화면의 전반적인 기본 기능에 어떻게 기여하는지 이해합니다. 이 심층 분석은 동작 수식과 컨트롤이 사용자 입력에 반응하는 방법을 결정하는 다른 속성의 값을 나타냅니다. 이 화면의 기본 기능에 대한 자세한 내용은 모임 화면 개요를 참조하십시오.

이 토픽에서는 몇 가지 중요한 컨트롤을 강조하고 이러한 컨트롤에서 설정된 다양한 속성(예: Items, OnSelect)에 대한 표현식이나 수식을 설명합니다.

필수 구성 요소

Power Apps에서 앱을 만들려면 화면 및 기타 컨트롤을 추가하고 구성하는 방법을 알아야 합니다.

초대 탭

LblInviteTab 컨트롤.

  • 속성: Color
    값: If( _showDetails, LblRecipientCount.Color, RectQuickActionBar.Fill )

    _showDetailsLblInviteTab 컨트롤이나 LblScheduleTab 컨트롤이 선택되었는지 여부를 결정하는 데 사용되는 변수입니다. _showDetails 값이 true이면 LblScheduleTab이 선택되며, 값이 false이면 LblInviteTab이 선택됩니다. 즉, _showDetails 값이 true이면(이 탭이 선택되지 않으면) 탭 색상이 LblRecipientCount의 색상과 일치합니다. 그렇지 않으면 RectQuickActionBar의 채우기 값과 일치합니다.

  • 속성: OnSelect
    값: Set( _showDetails, false )

    _showDetails 변수를 false로 설정합니다. 즉, Invite 탭의 내용이 표시되고 Schedule 탭의 내용이 숨겨집니다.

예약 탭

예약 탭.

  • 속성: Color
    값: If( !_showDetails, LblRecipientCount.Color, RectQuickActionBar.Fill )

    _showDetailsLblInviteTab 컨트롤이나 LblScheduleTab 컨트롤이 선택되었는지 여부를 결정하는 데 사용되는 변수입니다. 참이면 LblScheduleTab이 선택되고, 거짓이면 LblInviteTab이 선택됩니다. 즉, _showDetails이 참이면(이 탭이 선택되면) 탭 색상이 RectQuickActionBar의 채우기 값과 일치합니다. 그렇지 않으면 LblRecipientCount의 색상 값과 일치합니다.

  • 속성: OnSelect
    값: Set( _showDetails, true )

    _showDetails 변수를 true로 설정합니다. 즉, Schedule 탭의 내용이 표시되고 Invite 탭의 내용이 숨겨집니다.

TextSearchBox 컨트롤.

화면의 다른 여러 컨트롤은 이 컨트롤에 종속됩니다.

  • 사용자가 텍스트를 입력하기 시작하면 PeopleBrowseGallery가 표시됩니다.
  • 사용자가 유효한 이메일 주소를 입력하면 AddIcon이 표시됩니다.
  • 사용자가 PeopleBrowseGallery 내부에서 사람을 선택하면 검색 내용이 재설정됩니다.

아이콘 추가

AddIcon 컨트롤.

이 컨트롤을 통해 사용자는 조직 내에 존재하지 않는 사람을 구성 중인 모임의 참석자 목록에 추가할 수 있습니다.

  • 속성: Visible
    값: 컨트롤이 보이도록 모두가 true로 평가해야 하는 세 가지 논리적 검사:

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

    이 코드 블록은 AddIcon 컨트롤이 다음과 같은 경우에만 표시된다는 것을 알려줍니다.

    • TextSearchBox에 텍스트가 포함되어 있습니다.
    • TextSearchBox의 텍스트가 유효한 이메일 주소.
    • TextSearchBox의 텍스트가 MyPeople 컬렉션에 아직 존재하지 않음.
  • 속성: OnSelect
    값: 참석자 목록에 사용자를 추가하는 Collect 문, 사용 가능한 모임 시간을 새로 고치는 다른 문, 여러 가지 변수 토글:

    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 )
    

    이 컨트롤을 선택하면 MyPeople 컬렉션(이 컬렉션은 참석자 목록)에 유효한 이메일 주소가 추가되고(TextSearchBox에 유효한 이메일 주소를 입력한 경우에만 표시됨) 사용 가능한 모임 횟수가 새 사용자 항목과 함께 새로 고쳐집니다.

    낮은 수준에서 이 코드 블록은 다음과 같습니다.

    1. MyPeople 컬렉션으로 이메일 주소를 수집하고, DisplayName, UserPrincipalNameMail 필드로 이메일 주소를 수집합니다.
    2. TextSearchBox 컨트롤의 내용을 재설정합니다.
    3. _showMeetingTimes 변수를 false로 설정합니다. 이 변수는 선택된 참석자들이 만나는 열려 있는 시간을 표시하는 FindMeetingTimesGallery의 가시성을 제어합니다.
    4. _loadMeetingTimes 컨텍스트 변수를 true로 설정합니다. 이 변수는 로드 중 상태를 설정하여 _LblTimesEmptyState와 같은 로드 중 상태 컨트롤의 가시성을 토글하여 해당 데이터가 로드되는 중임을 사용자에게 나타냅니다.
    5. _selectedMeetingTimeBlank() 로 설정합니다. _selectedMeetingTimeFindMeetingTimesGallery 컨트롤에서 선택된 레코드입니다. 다른 참석자를 추가하면 _selectedMeetingTime에 대한 이전 정의를 해당 참석자에게 사용할 수 없으므로 여기서는 비워둡니다.
    6. _selectedRoomBlank() 로 설정합니다. _selectedRoomRoomBrowseGallery에서 선택된 방 레코드입니다. 방 사용 가능성은 _selectedMeetingTime 값에서 결정됩니다. 해당 값을 비워두면 _selectedRoom 값이 더 이상 유효하지 않으므로 비워두어야 합니다.
    7. _roomListSelectedfalse로 설정합니다. 이 줄은 모든 사람에게 적용되지 않을 수 있습니다. Office에서는 다른 "방 목록"으로 방을 그룹화할 수 있습니다. 방 목록이 있는 경우 이 화면에서 그 사실을 고려하여 해당 목록에서 방을 선택하기 전에 먼저 방 목록을 선택하도록 허용합니다. _roomListSelected 값은 사용자(방 목록이 있는 테넌트의 경우에만 해당)가 방 목록 또는 방 목록 세트 내에서 방을 볼지 여부를 결정하는 요인입니다. 이 값은 사용자에게 새 방 목록을 다시 선택하도록 강요하기 위해 false로 설정되어 있습니다.
    8. Office365.FindMeetingTimes 작업을 사용하여 참석자가 사용 가능한 모임 시간을 결정하고 수집합니다. 이 작업은 다음을 전달합니다.
      • RequiredAttendees 매개 변수에 선택된 각 사용자의 UserPrincipalName
      • MeetingDuration 매개 변수에 MeetingDurationSelect.Selected.Minutes
      • Start 매개 변수에 MeetingDateSelect.SelectedDate + 8시간 기본적으로 달력 컨트롤의 전체 날짜/시간은 선택된 날짜의 12:00 AM이므로 8시간이 추가됩니다. 정상적인 근무 시간 내에 사용 가능성을 검색하려고 할 수 있습니다. 정상적인 작업 시작 시간은 오전 8시입니다.
      • End 매개 변수에 MeetingDateSelect.SelectedDate + 17시간 12:00 AM + 17 = 5:00 PM이므로 17 시간이 추가됩니다. 정상적인 작업 종료 시간은 오후 5시입니다.
      • MaxCandidates 매개 변수에 15 이는 작업이 선택된 날짜에 대해 상위 15개의 사용 가능한 시간만 반환함을 의미합니다. 8시간 근무일에는 16개의 30분 청크만 있고 이 화면에서 설정할 수 있는 최소 시간은 30분 모임입니다.
      • MinimumAttendeePercentage 매개 변수에 1 기본적으로 참석자가 있을 경우 회의 시간을 검색합니다.
      • IsOrganizerOptional 매개 변수에 false 앱 사용자는 이 모임의 선택적 참석자가 아닙니다.
      • ActivityDomain 매개 변수에 "Work" 이는 검색된 시간이 정상 작업 시간 내에 있는 시간임을 의미합니다.
    9. ClearCollect 함수는 또한 "StartTime"과 "EndTime"의 두 열을 추가합니다. 이는 반환된 데이터를 단순화합니다. 사용 가능한 시작 및 종료 시간이 포함된 필드는 MeetingTimeSlot 필드입니다. 이 필드는 시작 및 종료 레코드를 포함하는 레코드이며, 그 자체에는 각 제안의 DateTimeTimeZone 값이 포함되어 있습니다. 이 레코드 중첩을 검색하는 대신 "StartTime"및 "EndTime"열을 MeetingTimes 컬렉션에 추가하면 컬렉션 공간에 Start > DateTimeEnd > DateTime 값을 가져옵니다.
    10. 이러한 함수가 모두 완료되면 _loadingMeetingTimes 변수가 false로 설정되고 로드 중 상태가 제거되고, _showMeetingTimestrue로 설정되고 FindMeetingTimesGallery가 표시됩니다.

PeopleBrowseGallery 컨트롤.

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

이 갤러리의 항목은 Office365.SearchUser 작업의 검색 결과로 채워집니다. 작업은 Trim(**TextSearchBox**)의 텍스트를 검색 용어로 사용하여 해당 검색을 기반으로 상위 15개의 결과를 반환합니다.

TextSearchBox는 공백에 대한 사용자 검색이 유효하지 않기 때문에 Trim 함수에 래핑됩니다. 사용자가 검색하기 전에 검색 결과를 검색하는 것은 성능 낭비이기 때문에 Office365Users.SearchUser 작업은 If(!IsBlank(Trim(TextSearchBox.Text)) ... )에 래핑됩니다.

PeopleBrowseGallery Title 컨트롤.

  • 속성: Text
    값: ThisItem.DisplayName

    Office 365 프로필에서 사용자의 표시 이름을 보여줍니다.

  • 속성: OnSelect
    값: 참석자 목록에 사용자를 추가하는 Collect 문, 사용 가능한 모임 시간을 새로 고치는 다른 문, 여러 가지 변수 토글:

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

    높은 수준에서 이 컨트롤을 선택하면 MyPeople 컬렉션(앱의 참석자 목록 저장소)에 사람이 추가되고 새로운 사용자 추가에 따라 사용 가능한 모임 시간이 새로 고쳐집니다.

    이 컨트롤을 선택하는 것은 AddIcon 컨트롤을 선택하는 것과 매우 유사합니다. 유일한 차이점은 Set(_selectedUser, ThisItem) 문과 해당 작업의 실행 순서입니다. 따라서 이 토론은 그리 깊게 진행되지 않을 것입니다. 더 자세한 설명은 AddIcon 컨트롤섹션을 읽어보십시오.

    이 컨트롤을 선택하면 TextSearchBox가 재설정됩니다. 그런 다음 선택 항목이 MyPeople 컬렉션이 아니면, 컨트롤은 다음을 수행합니다.

    1. _loadMeetingTimes 상태를 true로, _showMeetingTimes 상태를 false로 설정하고, _selectedMeetingTime_selectedRoom 변수를 비우고, MeetingTimes 컬렉션을 새로 고쳐 MyPeople 컬렉션에 새로 추가합니다.
    2. _loadMeetingTimes 상태를 false로 설정하고, _showMeetingTimestrue로 설정합니다. MyPeople 컬렉션에 이미 선택 사항이 있으면 TextSearchBox의 내용만 재설정합니다.

MeetingPeopleGallery 컨트롤.

  • 속성: Items
    값: MyPeople

    MyPeople 컬렉션은 PeopleBrowseGallery Title 컨트롤을 선택하여 시작하거나 추가된 사람들의 컬렉션입니다.

  • 속성: Height
    값: 갤러리를 최대 높이 350으로 늘릴 수있는 논리 :

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

    이 갤러리의 높이는 갤러리의 항목 수에 따라 최대 높이 350으로 조정됩니다. 수식은 76을 MeetingPeopleGallery의 단일 행 높이로 사용하며, 행 수로 곱합니다. WrapCount 속성은 2로 설정되어 있으므로 실제 행 수는 RoundUp(CountRows(MeetingPeopleGallery.AllItems) / 2, 0)입니다.

  • 속성: ShowScrollbar
    값: MeetingPeopleGallery.Height >= 350

    갤러리의 최대 높이(350)에 도달하면 스크롤 막대가 표시됩니다.

MeetingPeopleGallery Title 컨트롤.

  • 속성: OnSelect

    값: Set(_selectedUser, ThisItem)

    _selectedUser 변수를 MeetingPeopleGallery에서 선택한 항목으로 설정합니다.

MeetingPeopleGallery iconRemove 컨트롤.

  • 속성: OnSelect
    값: 참석자 목록에서 사용자를 제거하는 Remove 문, 사용 가능한 모임 시간을 새로 고치는 Collect 문, 여러 변수 토글:

    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 )
    

    높은 수준에서 이 컨트롤을 선택하면 참석자 목록에서 사람이 제거되고 이 사람의 제거에 따라 사용 가능한 모임 시간이 새로 고쳐집니다.

    앞의 코드의 첫 번째 줄 다음에 이 컨트롤을 선택하는 것은 AddIcon 컨트롤을 선택하는 것과 거의 동일합니다. 따라서 이 토론은 그리 깊게 진행되지 않을 것입니다. 더 자세한 설명은 AddIcon 컨트롤 섹션을 읽어보십시오.

    첫 번째 코드 줄에서 선택한 항목이 MyPeople 컬렉션에서 제거됩니다. 코드는 다음과 같습니다.

    1. TextSearchBox를 재설정한 다음 MyPeople 컬렉션에서 선택 사항을 제거합니다.
    2. _loadMeetingTimes 상태를 true로, _showMeetingTimes 상태를 false로 설정하고, _selectedMeetingTime_selectedRoom 변수를 비우고, MeetingTimes 컬렉션을 새로 고쳐 MyPeople 컬렉션에 새로 추가합니다.
    3. _loadMeetingTimes 상태를 false로 설정하고, _showMeetingTimestrue로 설정합니다.

모임 날짜 선택기

MeetingDateSelect 컨트롤.

  • 속성: DisplayMode
    값: If( IsEmpty(MyPeople), DisplayMode.Disabled, DisplayMode.Edit )

    최소 한 명 이상의 참석자가 MyPeople 컬렉션에 추가될 때까지 모임 날짜를 선택할 수 없습니다.

  • 속성: OnChange
    값: Select( MeetingDateSelect )

    선택한 날짜를 변경하면 이 컨트롤의 OnSelect 속성 코드가 실행됩니다.

  • 속성: OnSelect
    값: 사용 가능한 모임 시간을 새로 고치는 Collect 문, 여러 변수 토글:

    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 )
    

    높은 수준에서 이 컨트롤을 선택하면 사용 가능한 모임 시간이 새로 고쳐집니다. 사용자가 날짜를 변경하는 경우 해당 날짜에 참석자의 참석 가능 여부를 반영하기 위해 사용 가능한 미팅 시간을 업데이트해야 하므로 유용합니다.

    초기 Collect 문을 제외하고, AddIcon 컨트롤의 OnSelect 기능과 동일합니다. 따라서 이 토론은 그리 깊게 진행되지 않을 것입니다. 더 자세한 설명은 AddIcon 컨트롤섹션을 읽어보십시오.

    이 컨트롤을 선택하면 TextSearchBox가 재설정됩니다. 그런 다음, 다음을 수행합니다.

    1. _loadMeetingTimes 상태를 true로, _showMeetingTimes 상태를 false로 설정하고, _selectedMeetingTime_selectedRoom 변수를 비우고, MeetingTimes 컬렉션을 새 날짜 선택 사항으로 새로 고칩니다.
    2. _loadMeetingTimes 상태를 false로 설정하고, _showMeetingTimestrue로 설정합니다.

회의 시간 드롭다운

MeetingDateSelect 컨트롤 - 기간.

  • 속성: DisplayMode
    값: If( IsEmpty(MyPeople), DisplayMode.Disabled, DisplayMode.Edit )

    최소 한 명 이상의 참석자가 MyPeople 컬렉션에 추가될 때까지 모임 시간을 선택할 수 없습니다.

  • 속성: OnChange
    값: Select(MeetingDateSelect1)

    선택한 시간을 변경하면 MeetingDateSelect 컨트롤의 OnSelect 속성 코드가 실행됩니다.

FindMeetingTimesGallery 컨트롤.

  • 속성: Items
    값: MeetingTimes

    Office365.FindMeetingTimes 작업에서 검색된 잠재적 모임 시간의 컬렉션

  • 속성: Visible
    값: _showMeetingTimes && _showDetails && !IsEmpty( MyPeople )

    갤러리는 _showMeetingTimestrue로 설정되고, 사용자가 LblScheduleTab 컨트롤을 선택하고, 모임에 한 명 이상의 참석자가 추가되는 경우에만 표시됩니다.

FindMeetingTimesGallery Title 컨트롤.

  • 속성: Text
    값:시작 시간을 사용자의 현지 시간으로 표시되도록 변환:

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

    검색된 StartTime 값은 UTC 형식입니다. UTC에서 현지 시간으로 변환하는 경우, DateAdd 함수가 적용됩니다. Text 함수는 날짜/시간을 첫 번째 인수로 사용하고 두 번째 인수를 기준으로 형식을 지정합니다. 이를 ThisItem.StartTime의 현지 시간 변환으로 전달하고 DateTimeFormat.ShortTime으로 표시합니다.

  • 속성: OnSelect
    값: 회의실과 제안된 사용 가능성과 여러 변수 토글을 수집하는 여러 Collect 문:

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

    높은 수준에서 이 코드 블록은 모임에 대해 선택된 날짜/시간을 기준으로 방 목록이 없는 사용자가 사용할 수있는 방을 수집합니다. 그렇지 않으면 단순히 방 목록을 검색합니다.

    낮은 수준에서 이 코드 블록은 다음과 같습니다.

    1. _selectedMeetingTime을 선택한 항목으로 설정합니다. 해당 시간 동안 어떤 방을 사용할 수 있는지 찾는 데 사용됩니다.
    2. 로딩 상태 변수 _loadingRoomstrue로 설정하고, 로딩 상태를 켭니다.
    3. RoomsLists 컬렉션이 비어 있으면 사용자의 테넌트 방 목록을 검색하여 RoomsLists 컬렉션에 저장합니다.
    4. 사용자에게 방 목록이 없거나 하나 있는 경우:
      1. noRoomLists 변수가 true로 설정되고, 이 변수는 RoomBrowseGallery 컨트롤에 표시된 항목을 결정하는 데 사용됩니다.
      2. Office365.GetRooms() 작업은 해당 테넌트에서 첫 100개 방을 검색하는 데 사용됩니다. 이것들은 AllRooms 컬렉션에 저장됩니다.
      3. _allRoomsConcat 변수는 AllRooms 컬렉션에 있는 방의 처음 20개 이메일 주소의 세미콜론으로 구분된 문자열로 설정됩니다. 그 이유는 Office365.FindMeetingTimes이 한 번의 작업으로 20명 사람 개체의 사용 가능한 시간을 검색하는 것으로 제한되기 때문입니다.
      4. RoomTimeSuggestions 컬렉션은 Office365.FindMeetingTimes를 사용하여 _selectedMeetingTime 변수의 시간 값을 기준으로 AllRooms 컬렉션에서 처음 20개 방의 사용 가능성을 검색합니다. & "Z"DateTime 값의 형식을 올바르게 지정하는 데 사용됩니다.
      5. AvailableRooms 컬렉션이 생성됩니다. 이것은 단순히 "Address"와 "Name"이라는 두 개의 추가 열이 추가된 참석자 사용 가능성의 RoomTimeSuggestions 컬렉션입니다. "Address"는 방의 이메일 주소이고 "Name"은 방의 이름입니다.
      6. 그런 다음, AvailableRoomsOptimal 컬렉션이 생성됩니다. 이것은 단지 "Availability"와 "Attendee" 열이 제거된 AvailableRooms 컬렉션입니다. 이 작업은 AvailableRoomsOptimalAllRooms의 스키마와 일치합니다. 이를 통해 RoomBrowseGalleryItems 속성에서 두 컬렉션을 모두 사용할 수 있습니다.
      7. _roomListSelectedfalse로 설정됩니다.
    5. 다른 모든 것이 실행을 마치면 로딩 상태 _loadingRoomsfalse로 설정됩니다.

RoomBrowseGallery 컨트롤.

  • 속성: Items
    값: 사용자가 방 목록을 선택했는지 또는 해당 테넌트에 방 목록을 가지고 있는지 여부에 따라 동일한 스키마의 두 내부 콜렉션으로 논리적으로 설정됩니다.

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

    이 갤러리는 _roomListSelected 또는 _noRoomListstrue이면 AvailableRoomsOptimal 컬렉션을 표시합니다. 그렇지 않으면 RoomsLists 컬렉션을 표시합니다. 이러한 콜렉션의 스키마가 동일하기 때문에 이를 수행할 수 있습니다.

  • 속성: Visible
    값: _showDetails && !IsBlank( _selectedMeetingTime ) && !_loadingRooms

    갤러리는 위의 세 가지 문이 true인 경우에만 표시됩니다.

RoomBrowseGallery Title

RoomBrowseGallery Title 컨트롤.

  • 속성: OnSelect
    값: 사용자가 방 목록 또는 방을 보고 있는지 여부에 따라 트리거될 수도 있고 안 될 수도 있는 논리적으로 묶인 CollectSet 문의 집합:

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

    이 컨트롤을 선택할 때 발생하는 작업은 사용자가 현재 방 목록 세트 또는 방 세트를 보고 있는지 여부에 따라 달라집니다. 전자인 경우 이 컨트롤을 선택하면 선택한 방 목록에서 선택한 시간에 사용 가능한 방이 검색됩니다. 후자인 경우 이 컨트롤을 선택하면 _selectedRoom 변수를 선택된 항목으로 설정합니다. 위의 문은 FindMeetingTimesGallery Title에 대한 Select 문과 매우 유사합니다.

    낮은 수준에서 앞의 코드 블록은 다음을 수행합니다.

    1. _loadingRoomstrue로 설정하여 방에 대한 로딩 상태를 켭니다.
    2. 방 목록이 선택되었는지, 테넌트에 방 목록이 있는지 확인합니다. 그렇다면:
      1. _roomListSelectedtrue로 설정하고 _selectedRoomList를 선택된 항목으로 설정합니다.
      2. _allRoomsConcat 변수는 AllRooms 컬렉션에 있는 방의 처음 20개 이메일 주소의 세미콜론으로 구분된 문자열로 설정됩니다. 그 이유는 Office365.FindMeetingTimes 작업이 한 번의 작업으로 20명 사람 개체의 사용 가능한 시간을 검색하는 것으로 제한되기 때문입니다.
      3. RoomTimeSuggestions 컬렉션은 Office365.FindMeetingTimes 작업을 사용하여 _selectedMeetingTime 변수의 시간 값을 기준으로 AllRooms 컬렉션에서 처음 20개 방의 사용 가능성을 검색합니다. & "Z"DateTime 값의 형식을 올바르게 지정하는 데 사용됩니다.
      4. AvailableRooms 컬렉션이 생성됩니다. 이것은 단순히 "Address"와 "Name"이라는 두 개의 추가 열이 추가된 참석자 사용 가능성의 RoomTimeSuggestions 컬렉션입니다. "Address"는 방의 이메일 주소이고 "Name"은 방의 이름입니다.
      5. 그런 다음, AvailableRoomsOptimal 컬렉션이 생성됩니다. 이것은 단지 "Availability"와 "Attendee" 열이 제거된 AvailableRooms 컬렉션입니다. 이 작업은 AvailableRoomsOptimalAllRooms의 스키마와 일치합니다. 이를 통해 RoomBrowseGalleryItems 속성에서 두 컬렉션을 모두 사용할 수 있습니다.
      6. _roomListSelectedfalse로 설정됩니다.
    3. 다른 모든 것이 실행을 마치면 로딩 상태 _loadingRoomsfalse로 설정됩니다.

백 셰브론

RoomsBackNav 컨트롤.

  • 속성: Visible
    값: _roomListSelected && _showDetails

    이 컨트롤을 방 목록이 선택되었고 Schedule 탭이 선택된 경우에만 표시됩니다.

  • 속성: OnSelect
    값: Set( _roomListSelected, false )

    _roomListSelectedfalse로 설정되면, RoomBrowseGallery 컨트롤이 RoomsLists 컨트롤에서 항목을 표시하도록 변경됩니다.

보내기 아이콘

IconSendItem 컨트롤.

  • 속성: DisplayMode
    값: 아이콘을 편집하기 전에 사용자가 특정 모임 세부 정보를 입력하도록 강제하는 논리입니다.

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

    아이콘은 모임 주제가 작성되고, 모임에 최소 한 명의 참석자가 있고, 모임 시간이 선택된 경우에만 선택할 수 있습니다. 그렇지 않으면 비활성화됩니다.

  • 속성: OnSelect

    값: 선택된 참석자에게 모임 초대를 보내고 모든 입력 필드를 지우는 코드:

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

    낮은 수준에서 이 코드 블록은 다음과 같습니다.

    1. _myCalendarNameDisplayName이 "Calendar"인 Office365.CalendarGetTables() 작업의 일정으로 설정합니다.
    2. Office365.V2CalendarPostItem 작업을 사용하여 화면을 통해 사용자가 선택한 다양한 사항들의 입력 값 모두를 사용하여 모임을 예약합니다.
    3. 모임 생성에 사용된 모든 입력 필드 및 변수를 재설정합니다.

참고

지역에 따라 원하는 일정에 "Calendar"라는 표시 이름이 없을 수 있습니다. Outlook으로 이동하여 일정 제목을 확인하고 앱에서 적절히 변경하십시오.

다음 단계

참고

귀사의 설명서 언어 기본 설정에 대해 말씀해 주시겠습니까? 간단한 설문 조사에 응해주세요. (이 설문 조사는 영어로 되어 있습니다.)

이 설문 조사는 약 7분 정도 걸립니다. 개인 데이터는 수집되지 않습니다(개인정보처리방침).