Freigeben über


Referenzinformationen für die Kalenderbildschirmvorlage für Canvas-Apps

Für Canvas-Apps in Power Apps verstehen Sie, wie jedes wichtige Steuerelement in der Kalenderbildschirmvorlage zur allgemeinen Standardfunktionalität des Bildschirms beiträgt. Diese Vertiefung zeigt die Verhaltensformeln und die Werte anderer Eigenschaften, die bestimmen, wie die Steuerelemente auf Benutzereingaben reagieren. Eine allgemeine Beschreibung der Standardfunktionen dieses Bildschirms finden Sie in der Kalenderbildschirmübersicht.

Dieses Thema hebt einige wichtige Steuerelemente hervor und erklärt die Ausdrücke oder Formeln, denen verschiedene Eigenschaften (wie Element und OnSelect) dieser Steuerelemente eingestellt sind:

Voraussetzung

Vertrautheit mit dem Hinzufügen und Konfigurieren von Bildschirmen und anderen Steuerelementen Erstellen Sie eine App in Power Apps.

Kalender-Dropdownliste

dropdownCalendarSelection control

  • Eigenschaft: Items
    Wert: Office365.CalendarGetTables().value

    Dieser Wert ist eine Connector-Operation, mit der die Outlook-Kalender des App-Benutzers abgerufen werden. Sie könen dnr Wert sehen, den dieser Vorgang abruft.

  • Eigenschaft OnChange
    Wert: Select(dropdownCalendarSelection)

    Wenn der Benutzer eine Option in der Liste auswählt, wird die Funktion in der Eigenschaft vom OnSelect ausgeführt.

  • Eigenschaft OnSelect
    Wert: Eine Funktion Wenn, die im folgenden Codeblock angezeigt wird, und mehrere zusätzliche Funktionen, die danach im Codeblock angezeigt werden.

    Dieser Teil der Formel wird nur ausgeführt, wenn der Benutzer nach dem Öffnen der App zum ersten Mal eine Option in der Dropdown-Liste auswählt:

    If( IsBlank( _userDomain ),
        UpdateContext( {_showLoading: true} );
        Set( _userDomain, Right( User().Email, Len( User().Email ) - Find( "@", User().Email ) ) );
        Set( _dateSelected, Today() );
        Set( _firstDayOfMonth, DateAdd( Today(), 1 - Day( Today() ), Days ) );  
        Set( _firstDayInView, DateAdd( _firstDayOfMonth, -(Weekday(_firstDayOfMonth) - 1), Days ) );
        Set( _lastDayOfMonth, DateAdd( DateAdd( _firstDayOfMonth, 1, Months ), -1, Days ) )  
    );
    

    Der vorhergehende Code definiert die folgenden Variablen:

    • _userDomain: Die Unternehmensdomäne des App-Benutzers, wie in der E-Mail-Adresse des Benutzers angegeben.
    • _dateSelected: Heutiges Datum (standardmäßig). In der Kalendergalerie wird dieses Datum hervorgehoben, und in der Ereignisgalerie werden die Ereignisse angezeigt, die für dieses Datum geplant sind.
    • _firstDayOfMonth : Der erste Tag des aktuellen Monats. Weil (Today + (1 - Today)) = Today - Today + 1 = 1, gibt diese Funktion DateAdd immer den ersten Tag des Monats zurück.
    • _firstDayInView : Der erste Tag, den die Kalendergalerie anzeigen kann. Dieser Wert entspricht nicht dem ersten Tag des Monats, es sei denn, der Monat beginnt an einem Sonntag. Um zu verhindern, dass eine ganze Woche des Vormonats angezeigt wird, ist der Wert von _firstDayInView is _firstDayOfMonth - Weekday(_firstDayOfMonth) + 1.
    • _lastDayOfMonth : Der letzte Tag des aktuellen Monats, der dem ersten Tag des nächsten Monats entspricht, abzüglich eines Tages.

    Die Funktionen nach der Funktion Wenn wird ausgeführt, wenn der Benutzer eine Option in der Kalender-Dropdown-Liste auswählt (nicht nur beim ersten Öffnen der App durch den Benutzer):

    Set( _calendarVisible, false );
    UpdateContext( {_showLoading: true} );
    Set( _myCalendar, dropdownCalendarSelection2.Selected );
    Set( _minDate, 
        DateAdd( _firstDayOfMonth, -(Weekday( _firstDayOfMonth ) - 2 + 1), Days )
    );
    Set(_maxDate, 
        DateAdd(
            DateAdd( _firstDayOfMonth, -(Weekday( _firstDayOfMonth ) - 2 + 1), Days ), 
            40, 
            Days
        )
    );
    ClearCollect( MyCalendarEvents, 
        Office365Outlook.GetEventsCalendarViewV2( _myCalendar.Name, 
            Text( _minDate, UTC ), 
            Text( _maxDate, UTC )
        ).value
    );
    UpdateContext( {_showLoading: false} );
    Set( _calendarVisible, true )
    

    Der vorhergehende Code definiert diese Variablen und eine Sammlung:

    • _calendarVisible: Ist auf falsch eingestellt, damit der Kalender nicht angezeigt wird, während die neue Auswahl geladen wird.
    • _showLoading: Ist auf wahr eingestellt, damit werden Ladeanzeigen angezeigt, während die neue Auswahl geladen wird.
    • _Mein Kalender: Ist auf den aktuellen Wert eingestellt von Kalender Dropdown Steuerung, damit Ereignisse aus dem richtigen Kalender abgerufen werden.
    • _minDate: Ist auf den gleichen Wert als _firstDayInView festgelegt. Diese Variable bestimmt, welche Ereignisse bereits aus Outlook abgerufen und in der App zwischengespeichert wurden.
    • _maxDate: Ist auf den letzten sichtbaren Tag im Kalender eingestellt. Die Formel lautet wie folgt: _firstDayInView + 40. Der Kalender zeigt maximal 41 Tage an _maxDate. Die Variable gibt immer den letzten sichtbaren Tag wieder und bestimmt, welche Ereignisse bereits aus Outlook abgerufen und in der App zwischengespeichert wurden.
    • MyCalendarEvents: Legen Sie eine Sammlung der Ereignisse des Benutzers aus dem ausgewählten Kalender ein _minDate zu _maxDate fest.
    • _showLoading: Eingestellt auf falsch ;; _calendarVisible ist eingestellt auf wahr nachdem alles andere geladen wurde.

Farbeigenschaften

Allgemeine Farbeigenschaften finden Sie unter Farb- und Randeigenschaften in Power Apps.

Einzigartige Farbeigenschaften für die Dropdown-Steuerung des Kalenders:

  • ChevronBackground – Hintergrundfarbe für das Kalender-Dropdown-Menü.
  • ChevronDisabledBackground – Hintergrundfarbe für das deaktivierte Kalender-Dropdown-Menü.
  • ChevronFill – Füllfarbe für Kalender-Dropdown.
  • ChevronDisabledFill – Füllfarbe für deaktiviertes Kalender-Dropdown.
  • ChevronHoverBackground – Hintergrundfarbe des Kalender-Dropdowns, wenn der Benutzer den Mauszeiger darauf hält.
  • ChevronHoverFill – Hintergrundfarbe des Kalender-Dropdowns ausfüllen, wenn der Benutzer den Mauszeiger darauf hält.

Kalender-Symbol

Steuerelement „iconCalendar“

  • Eigenschaft OnSelect
    Wert: Vier Funktionen einstellen, die die Kalendergalerie auf das heutige Datum zurücksetzen:

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

    Der vorhergehende Code setzt alle Datumsvariablen zurück, die für die Anzeige der richtigen Kalenderansicht erforderlich sind:

    • _dateSelected wird auf heute zurückgesetzt.
    • _firstDayOfMonth wird auf den ersten Tag des heutigen Monats zurückgesetzt.
    • _firstDayInView wird auf den ersten sichtbaren Tag zurückgesetzt, wenn der heutige Monat ausgewählt ist.
    • _lastDayOfMonth wird auf den letzten Tag des heutigen Monats zurückgesetzt.

    Die Kalender-Dropdown-Liste in diesem Abschnitt dieses Thema werden diese Variablen ausführlicher erläutert.

Zum vorherigen Monat Chevron

Steuerelement „iconPrevMonth control“

  • Eigenschaft OnSelect
    Wert: Vier Funktionen einstellen und eine Funktion Wenn, die den Vormonat in der Kalendergalerie anzeigt:

    Set( _firstDayOfMonth, DateAdd( _firstDayOfMonth, -1, Months ) );
    Set( _firstDayInView, 
        DateAdd( _firstDayOfMonth, -(Weekday( _firstDayOfMonth ) - 2 + 1), Days )
    );
    Set( _lastDayOfMonth, DateAdd(DateAdd( _firstDayOfMonth, 1, Months ), -1, Days ) );
    If( _minDate > _firstDayOfMonth,
        Collect( MyCalendarEvents,
            Office365Outlook.GetEventsCalendarViewV2( _myCalendar.Name,
                Text( _firstDayInView, UTC ), 
                Text( DateAdd( _minDate, -1, Days ), UTC )
            ).value
        );
        Set( _minDate, _firstDayInView )
    )
    

    Hinweis

    Definitionen für _firstDayOfMonth, _firstDayInView, und _lastDayOfMonth sind fast identisch mit denen in der Kalender-Dropdown-Liste Abschnitt dieses Thema.

    Die ersten drei Zeilen des vorhergehenden Codes werden immer dann ausgeführt, wenn der Benutzer den Chevron des Vormonats auswählt. Der Code legt die Variablen fest, die zur Anzeige der richtigen Kalenderansicht erforderlich sind. Der verbleibende Code wird nur ausgeführt, wenn der Benutzer diesen Monat noch nicht für den ausgewählten Kalender ausgewählt hat.

    Wenn dies der Fall ist, ist _minDate der erste Tag, der angezeigt wird, wenn der Vormonat angezeigt wird. Bevor der Benutzer das Symbol auswählt, _minDate hat einen minimal möglichen Wert vom 23. des laufenden Monats. (Wenn der 1. März auf einen Samstag fällt, _firstDayInView für März ist der 23. Februar.) Das bedeutet, wenn ein Benutzer diesen Monat noch nicht ausgewählt hat, ist _minDate größer als das neue _firstDayOfMonth, und die Wenn Funktion gibt wahr zurück.. Der Code wird ausgeführt und eine Sammlung und eine Variable werden aktualisiert:

    • MyCalendarEvents ruft Ereignisse aus dem ausgewählten Kalender mit der Office365Outlook.GetEventsCalendarViewV2-Operation ab. Der Datumsbereich liegt zwischen dem _firstDayInView Datum und _minDate – 1. Weil MyCalendarEvents bereits Ereignisse auf dem _minDatum erhält, wird Datum 1 von diesem Datum für den Maximalwert in diesem neuen Datumsbereich abgezogen.

    • _minDate ist auf das aktuelle _firstDayInView eingestellt, weil dies das erste Datum ist, für das Ereignisse abgerufen wurden. Wenn ein Benutzer durch Auswahl des Chevrons des Vormonats zu diesem Datum zurückkehrt, wird die Wenn Funktion falsch zurückgeben, der Code wird nicht ausgeführt, da Ereignisse für diese Ansicht bereits zwischengespeichert sind in MyCalendarEvents.

Zum nächsten Chevron-Monat

Steuerelement „iconNextMonth“

  • Eigenschaft OnSelect
    Wert: Vier Funktionen einstellen und eine Funktion Wenn, die den nächsten Monat in der Kalendergalerie anzeigt:

    Set( _firstDayOfMonth, DateAdd( _firstDayOfMonth, 1, Months ) );
    Set( _firstDayInView, 
        DateAdd( _firstDayOfMonth, -(Weekday( _firstDayOfMonth ) - 2 + 1), Days ) );
    Set( _lastDayOfMonth, DateAdd( DateAdd( _firstDayOfMonth, 1, Months ), -1, Days ) );
    If(_maxDate < _lastDayOfMonth, 
    Collect(MyCalendarEvents,
            Office365Outlook.GetEventsCalendarViewV2(_myCalendar.Name,
                Text(DateAdd(_maxDate, 1, Days), UTC),
                Text(DateAdd(_firstDayInView, 40, Days))
            ).value
    );
    Set(_maxDate, DateAdd(_firstDayInView, 40, Days))
    )
    

    Hinweis

    Definitionen für _firstDayOfMonth, _firstDayInView, und _lastDayOfMonth sind fast identisch mit denen in der Kalender-Dropdown-Liste Abschnitt dieses Thema.

    In den ersten drei Zeilen des vorhergehenden Codes, die ausgeführt werden, wenn der Benutzer den Chevron für den nächsten Monat auswählt, werden die Variablen festgelegt, die für die Anzeige der richtigen Kalenderansicht erforderlich sind. Der verbleibende Code wird nur ausgeführt, wenn der Benutzer diesen Monat noch nicht für den ausgewählten Kalender ausgewählt hat.

    Wenn dies der Fall ist, ist _maxDate der letzte Tag, der angezeigt wird, wenn der Vormonat angezeigt wird. Bevor der Benutzer den Chevron für den nächsten Monat auswählt, _maxDate hat einen maximal möglichen Wert vom 13. des nächsten Monats. (Wenn der 1. Februar in einem Nicht-Schaltjahr auf einen Sonntag fällt, _maxDate ist der 13. März, was _firstDayInView + 40 Tage ist.). Das bedeutet, wenn ein Benutzer diesen Monat noch nicht ausgewählt hat, ist _maxDate größer als das neue _firstDayOfMonth, und die Wenn Funktion gibt wahr zurück. Der Code wird ausgeführt und eine Sammlung und eine Variable werden aktualisiert:

    • MyCalendarEvents ruft Ereignisse aus dem ausgewählten Kalender mit der Office365Outlook.GetEventsCalendarViewV2-Operation ab. Der Datumsbereich liegt zwischen dem _maxDAte + 1 Tag und dem _firstDayInView + 40 Tage.. Weil MyCalendarEvents bereits Ereignisse auf dem _minDatum erhält, wird Datum 1 von diesem Datum für den Minimalwert in diesem neuen Datumsbereich abgezogen. _firstDayInView + 40 ist die Formel für _maxDate, so dass dass zweite Datum im Bereich das neue _maxDate ist.

    • _maxDate ist auf das aktuelle _firstDayInView + 40 Tage eingestellt, weil dies der letzte Tag ist, für das Ereignisse abgerufen wurden. Wenn ein Benutzer durch Auswahl des Chevrons des nächsten Monats zu diesem Datum zurückkehrt, wird die Wenn Funktion falsch zurückgeben, der Code wird nicht ausgeführt, da Ereignisse für diese Ansicht bereits zwischengespeichert sind in MyCalendarEvents.

Kalendergalerie

Steuerelement „MonthDayGallery“

  • Eigenschaft: Items
    Wert: [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19, 20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41]

    Der Satz von 0 bis 41 wird für die Elemente in der Kalendergalerie verwendet, da im schlimmsten Fall in der Kalenderansicht 42 volle Tage angezeigt werden müssen. Dies tritt auf, wenn der erste des Monats an einem Samstag und der letzte des Monats an einem Sonntag auftritt. In diesem Fall zeigt der Kalender sechs Tage des Vormonats in der Zeile mit dem ersten des Monats und sechs Tage ab dem folgenden Monat in der Zeile mit dem letzten des Monats an. Dies sind 42 eindeutige Werte, von denen 30 für den ausgewählten Monat gelten.

  • Eigenschaft: WrapCount
    Wert: 7

    Dieser Wert spiegelt eine Woche von sieben Tagen wider.

Titelsteuerung in der Kalendergalerie

MonthDayGallery-Titelsteuerung

  • Eigenschaft: Text
    Wert: Day( DateAdd( _firstDayInView, ThisItem.Value, Days ) )

    Erinnere dich daran _firstDayInView ist definiert als (_firstDayOfMonth – sein Wochentagswert) + 1. Das sagt, dass _firstDayInView immer ein Sonntag ist und _firstDayOfMonth immer in der ersten Reihe von MonthDayGallery liegt. Aufgrund dieser beiden Tatsachen ist _firstDayInView immer in der allerersten Zelle von MonthDayGallery. ThisItem.Value ist die Nummer für diese Zelle in der MonthDayGallery Element-Eigenschaft. Wenn wir _firstDayInView als Ausgangspunkt nehmen, zeigt jede Zelle das Inkrement von _firstDayInView + seinen jeweiligen Zellenwert an.

  • Eigenschaft: Füllen
    Wert: Eins Wenn Funktion:

    If( DateAdd( _firstDayInView, ThisItem.Value ) = Today() && 
                DateAdd( _firstDayInView, ThisItem.Value ) = _dateSelected, 
            RGBA( 0, 0, 0, 0 ),
        DateAdd( _firstDayInView, ThisItem.Value) = Today(), 
            ColorFade( Subcircle.Fill, 0.67 ),
        Abs( Title.Text - ThisItem.Value) > 10,
            RGBA( 200, 200, 200, 0.3 ),
        RGBA( 0, 0, 0, 0 )
    )
    

    Wie in der Beschreibung der Text Eigenschaft DateAdd(_firstDayInView, ThisItem.Value) beschrieben repräsentiert den Tag in der sichtbaren Zelle. In Anbetracht dessen führt der vorhergehende Code diese Vergleiche durch:

    1. Wenn der Wert der Zelle das heutige Datum ist UND dieser Zelle entspricht _dateSelected geben Sie keinen Füllwert an.

    2. Wenn der Wert der Zelle das heutige Datum ist aber nicht _dateSelected entspricht, geben Sie keinen ColorFade Füllwert an.

    3. Der letzte Vergleich ist nicht so klar. Es ist ein Vergleich zwischen dem tatsächlichen Textwert in der Zelle und dem Wert des Zellenelements (der angezeigten Nummer und der Elementnummer).

      Um dies besser zu verstehen, betrachten Sie den September 2018, einen Monat, der an einem Samstag beginnt und an einem Sonntag endet. In diesem Fall zeigt der Kalender den 26. bis 31. August und den 1. September in der ersten Zeile an, und Abs(Title.Text - ThisItem.Value) = 26 bis zum 1. September. Dann Abs(Title.Text - ThisItem.Value) = 5. Es bleibt bis zur letzten Zeile im Kalender, die den 30. September und den 1. bis 6. Oktober anzeigt, bei 5. Darin wird Abs(Title.Text - ThisItem.Value) für den 30. September immer noch 5 sein, für die Oktober-Daten jedoch 35.

      Dies ist das Muster: Für Tage, die vom Vormonat angezeigt wurden, Abs(Title.Text - ThisItem.Value) wird immer gleich der Title.Text Wert des ersten ausgestellten Tages angezeigt. Für Tage, die im nächsten Monat angezeigt werden, Abs(Title.Text - ThisItem.Value) wird immer gleich der MonthDayGallery Elementwert der ersten Zelle dieses Monats (in diesem Fall 1. Oktober) minus 1 angezeigt. Und vor allem für Tage, die im aktuell ausgewählten Monat angezeigt werden: Abs(Title.Text - ThisItem.Value) wird auch immer gleich dem Wert des ersten Elements dieses Monats minus 1 sein und niemals 5 überschreiten, wie das vorherige Beispiel zeigt. Es ist also durchaus gültig, die Formel als Abs(Title.Text - ThisItem.Value) > 5 zu schreiben.

      Diese Anweisung prüft, ob der Datumswert außerhalb des aktuell ausgewählten Monats liegt. Wenn ja, Ausfüllen ist ein teilweise undurchsichtiges Grau.

    Hinweis

    Sie können die Gültigkeit dieses letzten Vergleichs selbst überprüfen, indem Sie ein Steuerelement Beschriftung in die Galerie einfügen und die Eigenschaft Text auf diesen Wert festlegen:
    Abs(Title.Text - ThisItem.Value).

  • Eigenschaft Visible
    Wert:

    !(
        DateAdd( _firstDayInView, ThisItem.Value, Days ) - 
            Weekday( DateAdd( _firstDayInView, ThisItem.Value,Days ) ) + 1 
        > _lastDayOfMonth
    )
    

    Die vorstehende Anweisung prüft, ob sich die Zelle in einer Zeile befindet, in der keine Tage des aktuell ausgewählten Monats auftreten. Denken Sie daran, dass das Subtrahieren des Wochentagswerts eines Tages von seinem Datumswert und das Hinzufügen von 1 immer das erste Element in der Zeile zurückgibt, in dem dieser Tag lebt. Diese Anweisung prüft also, ob der erste Tag in der Zeile nach dem letzten Tag des sichtbaren Monats liegt. Wenn dies der Fall ist, wird es nicht angezeigt, da die gesamte Zeile Tage des folgenden Monats enthält.

  • Eigenschaft OnSelect
    Wert: A. Festlegen Funktion, die die _dateSelected Variable auf das Datum der ausgewählten Zelle festlegt:

    Set( _dateSelected, DateAdd( _firstDayInView, ThisItem.Value, Days ) )
    

Kreissteuerung in der Kalendergalerie

Steuerelement „MonthDayGallery Circle“

  • Eigenschaft Visible
    Wert: Eine Formel, die bestimmt, ob Ereignisse für das ausgewählte Datum geplant sind und ob die Unterkreis und Titel Steuerelemente sichtbar sind:

    CountRows(
        Filter( MyCalendarEvents, 
            DateValue( Text( Start ) ) = DateAdd( _firstDayInView, ThisItem.Value, Days )
        )
    ) > 0 && !Subcircle.Visible && Title.Visible
    

    Das Steuerelement Kreis ist sichtbar, wenn das Feld Start für ein Ereignis dem Datum dieser Zelle entspricht, wenn das Steuerelement Titel sichtbar ist und wenn die Unterkreis Kontrolle nicht sichtbar ist. Mit anderen Worten, dieses Steuerelement ist sichtbar, wenn an diesem Tag mindestens ein Ereignis auftritt und dieser Tag nicht ausgewählt ist. Wenn es ausgewählt ist, werden die Ereignisse für diesen Tag im Steuerelement CalendarEventsGallery angezeigt.

Unterkreissteuerelement in der Kalendergalerie

Steuerelement „MonthDayGallery Subcircle“

  • Eigenschaft Visible
    Wert:

    DateAdd( _firstDayInView, ThisItem.Value ) = _dateSelected && Title.Visible
    

    Das Unterkreis Steuerelement ist sichtbar, wenn _dateSelected dem Datum der Zelle entspricht, und das Steuerelement Titel sichtbar ist. Mit anderen Worten, dieses Steuerelement wird angezeigt, wenn die Zelle das aktuell ausgewählte Datum ist.

Veranstaltungsgalerie

Steuerelement „CalendarEventsGallery“

  • Eigenschaft: Items
    Wert: Eine Formel, die die Ereignisgalerie sortiert und filtert:

    SortByColumns(
        Filter( MyCalendarEvents,
            Text( Start, DateTimeFormat.ShortDate ) = Text( _dateSelected, DateTimeFormat.ShortDate )
        ),
        "Start"
    )
    

    Did MyCalendarEvents Sammlung enthält alle Ereignisse zwischen _minDate und _maxDate. Um die Ereignisse nur für das ausgewählte Datum anzuzeigen, wird ein Filter angewendet MyCalendarEvents, um die Ereignisse anzuzeigen, deren Startdatum gleich \ _dateSelected ist. Die Elemente werden dann nach ihren Startdaten sortiert, um sie in eine sequenzielle Reihenfolge zu bringen.

Nächste Schritte

Hinweis

Können Sie uns Ihre Präferenzen für die Dokumentationssprache mitteilen? Nehmen Sie an einer kurzen Umfrage teil. (Beachten Sie, dass diese Umfrage auf Englisch ist.)

Die Umfrage dauert etwa sieben Minuten. Es werden keine personenbezogenen Daten erhoben. (Datenschutzbestimmungen).