Πληροφορίες αναφοράς για το πρότυπο οθόνης ημερολογίου για εφαρμογές καμβά

Για τις εφαρμογές καμβά στο Power Apps, κατανοήστε τον τρόπο με τον οποίο κάθε σημαντικό στοιχείο ελέγχου στο πρότυπο οθόνης ημερολογίου συμβάλλει στη συνολική προεπιλεγμένη λειτουργικότητα της οθόνης. Αυτή η βαθιά βουτιά παρουσιάζει τους τύπους συμπεριφοράς και τις τιμές άλλων ιδιοτήτων που καθορίζουν τον τρόπο με τον οποίο τα στοιχεία ελέγχου ανταποκρίνονται στα δεδομένα εισόδου του χρήστη. Για μια συζήτηση υψηλού επιπέδου σχετικά με την προεπιλεγμένη λειτουργικότητα αυτής της οθόνης, ανατρέξτε στην Επισκόπηση οθόνης ημερολογίου.

Αυτό το θέμα επισημαίνει ορισμένα σημαντικά στοιχεία ελέγχου και επεξηγεί τις παραστάσεις ή τους τύπους με τους οποίους έχουν οριστεί διάφορες ιδιότητες (για παράδειγμα Στοιχεία και OnSelect) αυτών των στοιχείων ελέγχου:

Προαπαιτούμενα στοιχεία

Εξοικείωση με το πώς μπορείτε να προσθέσετε και να ρυθμίσετε τις παραμέτρους οθονών και άλλων στοιχείων ελέγχου καθώς δημιουργείτε μια εφαρμογή στο Power Apps.

Drop down ημερολογίου

Στοιχείο ελέγχου dropdownCalendarSelection.

  • Ιδιότητα: Στοιχεία
    Τιμή: Office365.CalendarGetTables().value

    Αυτή η τιμή είναι μια λειτουργία σύνδεσης που ανακτά τα ημερολόγια του Outlook του χρήστη της εφαρμογής. Μπορείτε να δείτε την τιμή που ανακτά αυτή η λειτουργία.

  • Ιδιότητα: OnChange
    Τιμή: Select(dropdownCalendarSelection)

    Όταν ο χρήστης επιλέξει μια επιλογή από τη λίστα, εκτελείται η συνάρτηση στην ιδιότητα OnSelect του στοιχείου ελέγχου.

  • Ιδιότητα: OnSelect
    Τιμή: Μια συνάρτηση If, η οποία εμφανίζεται στο ακόλουθο μπλοκ κώδικα και διάφορες πρόσθετες συναρτήσεις, οι οποίες εμφανίζονται στο μπλοκ κώδικα μετά από αυτό.

    Αυτό το τμήμα του τύπου εκτελείται μόνο την πρώτη φορά που ο χρήστης επιλέγει μια επιλογή από την αναπτυσσόμενη λίστα, μετά το άνοιγμα της εφαρμογής:

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

    Ο προηγούμενος κώδικας καθορίζει τις εξής μεταβλητές:

    • _userDomain: ο τομέας της εταιρείας του χρήστη της εφαρμογής, όπως αντικατοπτρίζεται στη διεύθυνση e-mail του χρήστη.
    • _dateSelected: Η σημερινή ημερομηνία (από προεπιλογή). Η συλλογή ημερολογίων επισημαίνει αυτήν την ημερομηνία και η συλλογή συμβάντων εμφανίζει τα συμβάντα που έχουν προγραμματιστεί για αυτήν την ημερομηνία.
    • _firstDayOfMonth: Η πρώτη ημέρα του τρέχοντος μήνα. Επειδή (Today + (1 - Today)) = Today - Today + 1 = 1, αυτή η συνάρτηση DateAdd επιστρέφει πάντα την πρώτη ημέρα του μήνα.
    • _firstDayInView: Η πρώτη ημέρα την οποία μπορεί να εμφανίσει η συλλογή ημερολογίων. Αυτή η τιμή δεν είναι η ίδια με την πρώτη ημέρα του μήνα, εκτός εάν ο μήνας ξεκινά Κυριακή. Για να αποτρέψετε την εμφάνιση μιας ολόκληρης εβδομάδας του προηγούμενου μήνα, η τιμή του _firstDayInView είναι _firstDayOfMonth - Weekday(_firstDayOfMonth) + 1.
    • _lastDayOfMonth: Η τελευταία ημέρα του τρέχοντος μήνα, η οποία είναι ίδια με την πρώτη ημέρα του επόμενου μήνα μείον μία ημέρα.

    Οι συναρτήσεις μετά τη συνάρτηση If εκτελούνται κάθε φορά που ο χρήστης επιλέγει μια επιλογή στην αναπτυσσόμενη λίστα ημερολογίου (όχι μόνο την πρώτη φορά που ο χρήστης ανοίγει την εφαρμογή):

    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 )
    

    Ο προηγούμενος κώδικας καθορίζει αυτές τις μεταβλητές και μία συλλογή:

    • _calendarVisible: Ορίστε την σε false έτσι, ώστε να μην εμφανίζεται το ημερολόγιο όσο φορτώνεται η νέα επιλογή.
    • _showLoading: Ορίστε την σε true έτσι ώστε οι δείκτες φόρτωσης να εμφανίζονται όσο φορτώνεται η νέα επιλογή.
    • _myCalendar: Ορίστε την τρέχουσα τιμή του αναπτυσσόμενου στοιχείου ελέγχου ημερολογίου έτσι ώστε να ανακτώνται τα συμβάντα από το σωστό ημερολόγιο.
    • _minDate: Ορίστε την ίδια τιμή με το _firstDayInView. Αυτή η μεταβλητή καθορίζει τα συμβάντα που έχουν ήδη ανακτηθεί από το Outlook και αποθηκεύονται στο cache στην εφαρμογή.
    • _maxDate: Ορίστε την τελευταία ημερομηνία με δυνατότητα προβολής στο ημερολόγιο. Ο τύπος είναι _firstDayInView + 40. Το ημερολόγιο εμφανίζει το πολύ 41 ημέρες, επομένως η μεταβλητή _maxDate αντικατοπτρίζει πάντα την τελευταία ημέρα με δυνατότητα προβολής και προσδιορίζει τα συμβάντα που έχουν ήδη ανακτηθεί από το Outlook και αποθηκεύονται στην cache στην εφαρμογή.
    • MyCalendarEvents: Ορίστε σε μια συλλογή των συμβάντων του χρήστη από το επιλεγμένο ημερολόγιο, που κυμαίνεται από _minDate έως _maxDate.
    • _showLoading: Ορίστε σε false, το _calendarVisible ορίζεται σε true μετά τη φόρτωση όλων των άλλων.

Ιδιότητες χρωμάτων

Για γενικές ιδιότητες χρωμάτων, ανατρέξτε στις Ιδιότητες χρώματος και περιγράμματος στο Power Apps.

Μοναδικές ιδιότητες χρωμάτων για το αναπτυσσόμενο στοιχείο ελέγχου ημερολογίου:

  • ChevronBackground - Χρώμα φόντου για την αναπτυσσόμενη λίστα του ημερολογίου.
  • ChevronDisabledBackground - Χρώμα φόντου για την απενεργοποιημένη αναπτυσσόμενη λίστα του ημερολογίου.
  • ChevronFill - Χρώμα γεμίσματος για την αναπτυσσόμενη λίστα του ημερολογίου.
  • ChevronDisabledFill - Χρώμα γεμίσματος για την απενεργοποιημένη αναπτυσσόμενη λίστα του ημερολογίου.
  • ChevronHoverBackground - Χρώμα φόντου της αναπτυσσόμενης λίστας ημερολογίου όταν ο χρήστης διατηρεί το δείκτη του ποντικιού επάνω της.
  • ChevronHoverFill - Χρώμα γεμίσματος της αναπτυσσόμενης λίστας ημερολογίου όταν ο χρήστης διατηρεί το δείκτη του ποντικιού επάνω της.

Εικονίδιο ημερολογίου

Στοιχείο ελέγχου iconCalendar.

  • Ιδιότητα: OnSelect
    Τιμή: Τέσσερις συναρτήσεις Set που επαναφέρουν τη συλλογή ημερολογίων στη σημερινή ημερομηνία:

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

    Ο προηγούμενος κωδικός επαναφέρει όλες τις μεταβλητές ημερομηνιών που είναι απαραίτητες για την εμφάνιση της κατάλληλης προβολής ημερολογίου:

    • Το _dateSelected επανέρχεται στο σήμερα.
    • Το _firstDayOfMonth επανέρχεται στην πρώτη ημέρα του σημερινού μήνα.
    • Το _firstDayInView επανέρχεται στην πρώτη ημέρα προβολής όταν είναι επιλεγμένος ο σημερινός μήνας.
    • Το _lastDayOfMonth επανέρχεται στην τελευταία ημέρα του σημερινού μήνα.

    Η ενότητα Drop down ημερολογίου αυτού του θέματος επεξηγεί αυτές τις μεταβλητές με περισσότερες λεπτομέρειες.

Chevron προηγούμενου μήνα

Στοιχείο ελέγχου iconPrevMonth.

  • Ιδιότητα: OnSelect
    Τιμή: Τέσσερις συναρτήσεις Set και μια συνάρτηση If που εμφανίζουν τον προηγούμενο μήνα στη συλλογή ημερολογίων:

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

    Σημείωση

    Οι ορισμοί για _firstDayOfMonth, _firstDayInView και _lastDayOfMonth είναι σχεδόν ίδιοι με εκείνους που περιλαμβάνονται στην ενότητα αναπτυσσόμενη λίστα ημερολογίου αυτού του θέματος.

    Οι πρώτες τρεις γραμμές του προηγούμενου κώδικα εκτελούνται κάθε φορά που ο χρήστης επιλέγει το chevron του προηγούμενου μήνα. Ο κώδικας καθορίζει τις μεταβλητές που είναι απαραίτητες για την εμφάνιση της κατάλληλης προβολής ημερολογίου. Ο κώδικας που απομένει εκτελείται μόνο εάν ο χρήστης δεν έχει επιλέξει προηγουμένως αυτό το μήνα για το επιλεγμένο ημερολόγιο.

    Σε αυτήν την περίπτωση, η _minDate είναι η πρώτη ημέρα που εμφανίζεται κατά την εμφάνιση του προηγούμενου μήνα. Πριν ο χρήστης επιλέξει το εικονίδιο, το _minDate έχει μια ελάχιστη δυνατή τιμή της 23ης του τρέχοντος μήνα. (Όταν η 1η Μαρτίου πέφτει Σάββατο, η _firstDayInView για τον Μάρτιο είναι η 23η Φλεβάρη). Αυτό σημαίνει ότι εάν ο χρήστης δεν έχει επιλέξει ακόμα αυτόν τον μήνα, το _minDate είναι μεγαλύτερο από το νέο _firstDayOfMonth και η συνάρτηση If επιστρέφει την τιμή true. Ο κώδικας εκτελείται και ενημερώνεται μια συλλογή και μια μεταβλητή:

    • Το MyCalendarEvents ανακτά συμβάντα από το επιλεγμένο ημερολόγιο με τη λειτουργία Office365Outlook.GetEventsCalendarViewV2. Το εύρος ημερομηνιών είναι μεταξύ της ημερομηνίας _firstDayInView και _minDate - 1. Επειδή το MyCalendarEvents περιέχει ήδη συμβάντα στην ημερομηνία _minDate, αφαιρείται 1 από την εν λόγω ημερομηνία για τη μέγιστη τιμή σε αυτό το νέο εύρος ημερομηνιών.

    • Η _minDate ορίζεται στην τρέχουσα _firstDayInView επειδή αυτή είναι η πρώτη ημερομηνία κατά την οποία τα συμβάντα έχουν ανακτηθεί. Εάν ένας χρήστης επιστρέψει σε αυτήν την ημερομηνία επιλέγοντας το Chevron του προηγούμενου μήνα, η συνάρτηση If επιστρέφει False και ο κώδικας δεν εκτελείται επειδή τα συμβάντα για αυτήν την προβολή βρίσκονται ήδη στην cache στο MyCalendarEvents.

Chevron επόμενου μήνα

Στοιχείο ελέγχου iconNextMonth.

  • Ιδιότητα: OnSelect
    Τιμή: Τέσσερις συναρτήσεις Set και μια συνάρτηση If που εμφανίζουν τον επόμενο μήνα στη συλλογή ημερολογίων:

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

    Σημείωση

    Οι ορισμοί για _firstDayOfMonth, _firstDayInView και _lastDayOfMonth είναι σχεδόν ίδιοι με εκείνους που περιλαμβάνονται στην ενότητα αναπτυσσόμενη λίστα ημερολογίου αυτού του θέματος.

    Οι τρεις πρώτες γραμμές του προηγούμενου κώδικα, οι οποίες εκτελούνται όταν ο χρήστης επιλέγει το chevron του επόμενου μήνα, ορίζουν τις μεταβλητές που είναι απαραίτητες για την εμφάνιση της κατάλληλης προβολής ημερολογίου. Ο κώδικας που απομένει εκτελείται μόνο εάν ο χρήστης δεν έχει επιλέξει προηγουμένως αυτό το μήνα για το επιλεγμένο ημερολόγιο.

    Σε αυτήν την περίπτωση, η _maxDate είναι η τελευταία ημέρα που εμφανίζεται κατά την εμφάνιση του προηγούμενου μήνα. Προτού ο χρήστης επιλέξει το chevron του επόμενου μήνα, το _maxDate έχει μέγιστη δυνατή τιμή την 13η του επόμενου μήνα. (Όταν η 1η Φεβρουαρίου πέφτει Κυριακή μη δίσεκτου έτους, η _maxDate είναι 13 Μαρτίου, η οποία είναι η _firstDayInView + 40 ημέρες). Αυτό σημαίνει ότι εάν ο χρήστης δεν έχει επιλέξει ακόμα αυτόν τον μήνα, το _maxDate είναι μεγαλύτερο από το νέο _lastDayOfMonth και η συνάρτηση If επιστρέφει την τιμή true. Ο κώδικας εκτελείται και ενημερώνεται μια συλλογή και μια μεταβλητή:

    • Το MyCalendarEvents ανακτά συμβάντα από το επιλεγμένο ημερολόγιο με τη λειτουργία Office365Outlook.GetEventsCalendarViewV2. Το εύρος ημερομηνιών είναι μεταξύ της _maxDate + 1 ημέρα και της _firstDayInView + 40 ημέρες. Επειδή το MyCalendarEvents περιέχει ήδη συμβάντα στην ημερομηνία _minDate, προστίθεται 1 στην εν λόγω ημερομηνία για τη ελάχιστη τιμή σε αυτό το νέο εύρος ημερομηνιών. Το _firstDayInView + 40 είναι ο τύπος για το _maxDate, επομένως η δεύτερη ημερομηνία στην περιοχή είναι απλώς η νέα _maxDate.

    • Η _maxDate ορίζεται σε _firstDayInView + 40 ημέρες επειδή αυτή είναι η τελευταία ημερομηνία κατά την οποία τα συμβάντα έχουν ανακτηθεί. Εάν ένας χρήστης επιστρέψει σε αυτήν την ημερομηνία επιλέγοντας το Chevron του επόμενου μήνα, η συνάρτηση If επιστρέφει False και ο κώδικας δεν εκτελείται επειδή τα συμβάντα για αυτήν την προβολή βρίσκονται ήδη στην cache στο MyCalendarEvents.

Στοιχείο ελέγχου MonthDayGallery.

  • Ιδιότητα: Στοιχεία
    Τιμή: [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]

    Το σύνολο των 0 έως 41 χρησιμοποιείται για τα στοιχεία στη συλλογή ημερολογίων επειδή, στη χειρότερη περίπτωση, η προβολή ημερολογίου θα πρέπει να εμφανίζει 42 ολόκληρες ημέρες. Αυτό συμβαίνει όταν η πρώτη του μήνα πέφτει Σάββατο και η τελευταία ημέρα του μήνα πέφτει Κυριακή. Σε αυτήν την περίπτωση, το ημερολόγιο εμφανίζει τις έξι ημέρες του προηγούμενου μήνα στη γραμμή που περιέχει την πρώτη του μήνα και έξι ημέρες από τον επόμενο μήνα στη γραμμή που περιέχει την τελευταία του μήνα. Πρόκειται για 42 μοναδικές τιμές, από τις οποίες οι 30 είναι για τον επιλεγμένο μήνα.

  • Ιδιότητα: WrapCount
    Τιμή: 7

    Αυτή η τιμή αντικατοπτρίζει μια εβδομάδα επτά ημερών.

Στοιχείο ελέγχου τίτλου MonthDayGallery.

  • Ιδιότητα: Text
    Τιμή: Day( DateAdd( _firstDayInView, ThisItem.Value, Days ) )

    Θυμηθείτε ότι το _firstDayInView ορίζεται ως (_firstDayOfMonth - η τιμή της εργάσιμης ημέρας της) + 1. Αυτό σημαίνει ότι το _firstDayInView είναι πάντα Κυριακή και το _firstDayOfMonth είναι πάντα στην πρώτη σειρά της MonthDayGallery. Λόγω αυτών των δύο γεγονότων, η _firstDayInView είναι πάντα το πρώτο κελί του MonthDayGallery. Ο ThisItem.Value είναι ο αριθμός για αυτό το κελί στην ιδιότητα του στοιχείου MonthDayGallery. Έτσι, λαμβάνοντας την _firstDayInView ως σημείο εκκίνησης, κάθε κελί εμφανίζει την προσαύξηση της _firstDayInView + της αντίστοιχης τιμής κελιού.

  • Ιδιότητα: Fill
    Τιμή: Μία συνάρτηση If:

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

    Όπως αναφέρθηκε στην περιγραφή της ιδιότητας Κείμενο, η DateAdd(_firstDayInView, ThisItem.Value) αντιπροσωπεύει την ημέρα στο ορατό κελί. Λαμβάνοντας αυτό υπόψη, ο προηγούμενος κώδικας εκτελεί αυτές τις συγκρίσεις:

    1. Εάν η τιμή του κελιού είναι η σημερινή ημερομηνία ΚΑΙ αυτό το κελί είναι ισοδύναμο με _dateSelected, μην παρέχετε μια τιμή γεμίσματος.

    2. Εάν η τιμή του κελιού είναι η σημερινή ημερομηνία αλλά όχι ισοδύναμη με _dateSelected, παρέχετε τιμή γεμίσματος ColorFade.

    3. Η τελευταία σύγκριση δεν είναι τόσο σαφής. Πρόκειται για μια σύγκριση μεταξύ της πραγματικής τιμής κειμένου στο κελί και της τιμής του στοιχείου κελιού (τον αριθμό που εμφανίζεται και τον αριθμό του στοιχείου).

      Για να το καταλάβετε καλύτερα αυτό, εξετάστε το Σεπτέμβριο του 2018, ένα μήνα που αρχίζει Σάββατο και καταλήγει Κυριακή. Σε αυτήν την περίπτωση, το ημερολόγιο εμφανίζει την 26η έως την 31η Αυγούστου και την 1η Σεπτεμβρίου στην πρώτη σειρά και Abs(Title.Text - ThisItem.Value) = 26 μέχρι την 1η Σεπτεμβρίου. Τότε Abs(Title.Text - ThisItem.Value) = 5. Θα παραμείνει στο 5 έως την τελευταία γραμμή στο ημερολόγιο, το οποίο θα εμφανίζει την 30η Σεπτεμβρίου και την 1η Οκτωβρίου έως την 6η Οκτωβρίου. Σε αυτό το Abs(Title.Text - ThisItem.Value) θα είναι ακόμα 5 για την 30η Σεπτεμβρίου, αλλά θα είναι 35 για τις ημερομηνίες του Οκτωβρίου.

      Αυτό είναι το μοτίβο: Για τις ημέρες που εμφανίζονται από τον προηγούμενο μήνα, η Abs(Title.Text - ThisItem.Value) θα ισούται πάντα με την τιμή Title.Text της πρώτης ημέρας που εμφανίζεται. Για τις ημέρες που εμφανίζονται στον επόμενο μήνα, η Abs(Title.Text - ThisItem.Value) θα ισούται πάντα με την τιμή του στοιχείου MonthDayGallery του πρώτου κελιού εκείνου του μήνα (στην προκειμένη περίπτωση, 1η Οκτωβρίου) μείον 1. Και το σημαντικότερο είναι ότι για τις ημέρες που εμφανίζονται στον τρέχοντα επιλεγμένο μήνα, η Abs(Title.Text - ThisItem.Value) επίσης θα ισούται πάντα με την τιμή του πρώτου στοιχείου εκείνου του μήνα μείον 1 και δεν θα ξεπερνά ποτέ το 5, όπως δείχνει το προηγούμενο παράδειγμα. Επομένως, είναι απολύτως θεμιτή η εγγραφή του τύπου ως Abs(Title.Text - ThisItem.Value) > 5.

      Αυτή η διατύπωση ελέγχει εάν η τιμή ημερομηνίας βρίσκεται εκτός του τρέχοντος επιλεγμένου μήνα. Εάν είναι, το Fill είναι ένα μερικώς αδιαφανές γκρι.

    Σημείωση

    Μπορείτε να ελέγξετε οι ίδιοι την εγκυρότητα αυτής της τελευταίας σύγκρισης εισάγοντας ένα στοιχείο ελέγχου Label στη συλλογή και θέτοντας την ιδιότητα Κείμενο σε αυτήν την τιμή:
    Abs(Title.Text - ThisItem.Value).

  • Ιδιότητα: Visible
    Τιμή:

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

    Η προηγούμενη διατύπωση ελέγχει εάν το κελί είναι σε μια γραμμή όπου δεν υπάρχουν ημέρες του τρέχοντος επιλεγμένου μήνα. Θυμηθείτε ότι η αφαίρεση της τιμής της εργάσιμης ημέρας οποιασδήποτε ημέρας από την τιμή ημερομηνίας της και η προσθήκη 1 επιστρέφει πάντα το πρώτο στοιχείο στη γραμμή όπου βρίσκεται η ημέρα. Έτσι, αυτή η δήλωση ελέγχει εάν η πρώτη ημέρα στη σειρά είναι μετά την τελευταία ημέρα του μήνα με δυνατότητα προβολής. Σε αυτήν την περίπτωση, δεν θα εμφανιστεί επειδή ολόκληρη η γραμμή περιέχει ημέρες του επόμενου μήνα.

  • Ιδιότητα: OnSelect
    Τιμή: Μια συνάρτηση Set που ορίζει τη μεταβλητή _dateSelected έως την ημερομηνία του επιλεγμένου κελιού:

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

Στοιχείο ελέγχου κύκλου MonthDayGallery.

  • Ιδιότητα: Ορατό
    Τιμή: Ένας τύπος που προσδιορίζει εάν τυχόν συμβάντα έχουν προγραμματιστεί για την επιλεγμένη ημερομηνία και εάν τα στοιχεία ελέγχου Subcircle και Title είναι ορατά:

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

    Το στοιχείο ελέγχου Circle είναι ορατό εάν το πεδίο Start για οποιοδήποτε συμβάν είναι ισοδύναμο με την ημερομηνία του εν λόγω κελιού, εάν το στοιχείο ελέγχου Title είναι ορατό και εάν το στοιχείο ελέγχου Subcircle δεν είναι ορατό. Με άλλα λόγια, αυτό το στοιχείο ελέγχου είναι ορατό όταν συμβεί τουλάχιστον ένα συμβάν εκείνη την ημέρα και δεν αυτή η ημέρα δεν είναι επιλεγμένη. Εάν είναι επιλεγμένη, τα συμβάντα για τη συγκεκριμένη ημέρα εμφανίζονται στο στοιχείο ελέγχου CalendarEventsGallery.

Στοιχείο ελέγχου υποκύκλου MonthDayGallery.

  • Ιδιότητα: Ορατό
    Τιμή:

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

    Το στοιχείο ελέγχου Υποκύκλος είναι ορατό όταν το _dateSelected είναι ισοδύναμο με την ημερομηνία του κελιού και το στοιχείο ελέγχου Τίτλος είναι ορατό. Με άλλα λόγια, αυτό το στοιχείο ελέγχου εμφανίζεται όταν το κελί είναι η τρέχουσα επιλεγμένη ημερομηνία.

Στοιχείο ελέγχου CalendarEventsGallery.

  • Ιδιότητα: Στοιχεία
    Τιμή: Ένας τύπος που ταξινομεί και φιλτράρει τη συλλογή συμβάντων:

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

    Η συλλογή MyCalendarEvents περιέχει όλα τα συμβάντα μεταξύ _minDate και _maxDate. Για να εμφανίζονται τα συμβάντα μόνο για την επιλεγμένη ημερομηνία, εφαρμόζεται ένα φίλτρο στο MyCalendarEvents για να εμφανίζονται τα συμβάντα που έχουν ημερομηνία έναρξης που ισοδυναμεί με \ _dateSelected. Στη συνέχεια, τα στοιχεία ταξινομούνται με βάση τις ημερομηνίες έναρξής τους, για να τοποθετηθούν με διαδοχική σειρά.

Επόμενα βήματα