A configurable calendar for Creatio
Six views, drag & drop, status colors, owners and multi-day tasks — with a live emulation of every feature below. Switch the guide language in the top right.
syn-calendarsyntech
Overview
CalendarSyntech renders records from any Creatio schema as calendar events. You map columns (date, time, title, color, status, owner) once in Settings, then work with the data directly on the board.
Any schema
Point it at a schema and map its columns — no code.
Edit in place
Drag, resize and create records straight on the calendar.
Real-time
Optional auto-refresh keeps the board in sync.
Configurable
Colors, statuses, grouping and owner photos, all from a lookup.
Toolbar & navigation
The top bar holds period navigation, the view switcher and quick actions. The active view is highlighted with the accent tint and ring.
◀ ▶ · Today
Move between periods; Today jumps back to the current date.
View switcher
Switch between the six views; admins can hide any of them.
Refresh
Reload records on demand; auto-refresh is optional.
Settings
The gear opens the configuration modal (admin).
The six views
Every view is emulated below with real sample data. Weekends are tinted, the current day is marked with an accent circle, and event bars carry their status color.
Month
A 7×5 grid. Each day shows up to three events; extra ones collapse into a “+N more” pill. Multi-day tasks run as a continuous bar across the days they cover.
Week
Seven day-columns over an hour grid. Timed events sit in the grid; long tasks move to the all-day lane on top so they never cover them.
Day
A single day at full height with a wider hour scale — best for a packed schedule. Multi-day tasks appear as bars above the grid.
Year
Twelve mini-months at a glance. Days with events carry an accent dot; today is a filled circle. Click a day to drill in.
Agenda
A chronological list grouped by day into cards, with a per-day event count. Ideal for a quick read-through of what’s next.
Resource timeline
Rows are resources (people, rooms, equipment) grouped by a lookup column; columns are hours or days. Pick the range with the day-count switcher — the active range is filled with the accent.
Event cards
An event mirrors one record. Its color comes from a status lookup; it can show the owner’s photo and any additional columns you map.
The legend below the toolbar lists every status and its color; it can be hidden per configuration.
Interactions
In edit mode you work directly on the board. A drag shows a floating “ghost” of the card that follows the cursor, while the target slot is highlighted.
Drag & drop
Move an event to a new time or day; it saves on drop.
Resize
Drag the top/bottom edge to change duration (or left/right in the timeline).
Create
Click an empty slot — or drag across a range — to add a record.
Open
Click a card to open the full record page.
Multi-day tasks
Records that span several days (an end date after the start) render as horizontal bars in the all-day lane above the grid, packed into rows so they never hide the small per-hour events. A ‹ / › cue shows when a task continues past the visible range.
Today & filtering
The current day is always emphasized — an accent circle on the date and a soft tint on its cell or column. Statuses double as filters.
Today marker
Accent circle on the number, gentle tint on the day.
Status filter
Toggle statuses to show only the events you need.
Settings
The gear opens a modal with tabbed configuration. Everything is stored as JSON keyed by the component name, so you can copy it between environments.
Data source
Schema plus the date, time, title and description columns.
Status
Status column and the lookup that supplies values and colors.
Grouping
The lookup column that becomes the rows of the resource timeline.
Shifts
Owner column plus the schema/column holding the photo.
Display
Default view, which views are enabled, and the status panel.
Behavior
Read-only, refresh interval, days-ahead and resource range.
// stored as JSON in SynCalendarSettings { "schemaName": "Activity", "dateColumn": "StartDate", "startTimeColumn": "StartDate", "endTimeColumn": "DueDate", "titleColumn": "Title", "statusColumn": "Status", "statusLookupSchema": "ActivityStatus", "statusValueColumn": "Id", "statusDisplayColumn": "Name", "groupByColumn": "Owner", "groupByLookupSchema": "Contact", "viewMode": "week", "firstDayOfWeek": 1, "dayStartHour": 8, "dayEndHour": 19, "refreshInterval": 60, "daysAhead": 30, "resourceTimelineDays": 7, "enabledViewModes": ["day", "week", "month", "year", "agenda", "resource-timeline"] }
Every setting
A calendar is configured in three places: the setup area in the Freedom UI Designer (stored in the page), the gear on the calendar toolbar (stored as JSON in SynCalendarSettings under the element code) and the platform itself (system settings, the user profile, the licence). Every parameter of all three is below.
In the Freedom UI Designer — the “Calendar settings” panel
| Field | JSON key | Default | What it changes |
|---|---|---|---|
| Component name | label | Calendar | The title drawn above the calendar; it also labels the element in the designer. |
| Object | objectName | — not set — | The entity the calendar reads. It is a fallback only: it applies when the saved settings have no schemaName. The list is built from SysSchema; without access to it the field becomes a text box. |
| Record column | recordColumn | empty | The column of the object that points at the page's record (for example Account). With Record Id it narrows the calendar to the records related to the open record. |
| Record Id | recordId | $Id | The page attribute that holds the current record id. Keep the default on a record page; on a list page it stays unused. |
| Folder / filter | folderId | $CalFilter | The page attribute with the selected folders. For a dynamic (search) folder the calendar reads its stored conditions from SearchData; a static folder filters through the membership table. |
| Apply pre-configured filter | externalFilters … externalFilters5 | empty | Up to five filters placed on the page (quick filters, the folder tree, pre-configured filters). The chosen list is kept in externalFilterSources; when the user changes such a filter the calendar reloads with it applied. |
| Element code | config | the element name | The key under which this calendar's configuration is stored in SynCalendarSettings. Two calendars with the same code share one configuration — give every calendar its own. |
Settings → Data source
| Field | JSON key | Default | What it changes |
|---|---|---|---|
| Schema name | schemaName | — not set — | The object the calendar reads. Choosing it loads that object's columns into every column list below. |
| Date column | dateColumn | — not set — | The date an event is placed on. Without it the calendar has nothing to draw. |
| Start time column | startTimeColumn | same as the date column | The start time of an event. Left empty, the date column supplies it. |
| End time column | endTimeColumn | — not set — | The end time. It sets the height of an event in the day and week grids and makes a task that spans days a bar in the all-day lane. |
| Global filter | globalFilterConditions | [] | Conditions that are combined (AND) with every other filter — the page filters and the folder included. Twelve operators are available, from = and ∋ to ∅; ∅ and ≠∅ need no value. A reference column offers its records as values. Incomplete conditions are dropped when the configuration is saved. |
Settings → Display
| Field | JSON key | Default | What it changes |
|---|---|---|---|
| Title column | titleColumn | — not set — | The text on the event. Without it an event shows only its time. |
| Color column | colorColumn | — not set — | A per-record colour (hex). It wins over the status colour, so one record can be highlighted without changing its status. |
| Description column | descriptionColumn | — not set — | The second line of an event and of an agenda card. HTML is stripped. |
| Additional columns | additionalColumns | [] | Extra columns shown in the event tooltip, the day dialog and the agenda card. Pick them as chips, or type them comma-separated when the column list could not be loaded. |
| Owner column | ownerColumn | — not set — | The lookup column with the person responsible. It gives the event its avatar and the resource timeline its rows when grouping is not set separately. |
| Owner photo schema | ownerPhotoSchema | filled in automatically | The object that holds the photo (for example Contact or SysAdminUnit). Together with the next field it is read as the path <schema>.<column> on the row. |
| Owner photo column | ownerPhotoColumn | filled in automatically | The column with the photo itself. With no photo the calendar draws the initials of the owner. |
Settings → Status
| Field | JSON key | Default | What it changes |
|---|---|---|---|
| Status column | statusColumn | — not set — | The column that carries the status. Without it every event is drawn in the default colour. |
| Status lookup schema | statusLookupSchema | three built-in statuses | The lookup the statuses come from (for example ActivityStatus). Without it the calendar falls back to Free, Booked and Completed. |
| Status value column | statusValueColumn | filled in automatically | The column whose value is matched against the record's status (usually Id). |
| Status display column | statusDisplayColumn | filled in automatically | The column shown in the legend and on the status chip (usually Name). |
| Status color column | statusColorColumn | — not set — | The column with the status colour as hex. It also accepts a path, StatusSchema.Column or EntitySchema.Owner.Column. Without it the calendar assigns each status a colour of its own from the built-in palette. |
| Status filter | statusFilter | all statuses | Which statuses are loaded at all. Clearing a status here removes its events from every view, not only from the legend. |
Settings → Grouping
| Field | JSON key | Default | What it changes |
|---|---|---|---|
| Group by column | groupByColumn | — not set — | The lookup column whose values become the rows of the resource timeline. |
| Group by lookup schema | groupByLookupSchema | filled in automatically | The object behind that column. It supplies the row names and, for a clickable name, the record to open. |
| Clickable resource name | resourceNameClickable | off | Turns the row label of the resource timeline into a link that opens the grouped record. |
Settings → Shifts
| Field | JSON key | Default | What it changes |
|---|---|---|---|
| Show out-of-shift indicator | shiftVisibilityEnabled | off | Marks events that fall outside the resource's working hours and adds the out-of-shift entry to the legend. The four fields below must be filled for it to work. |
| Shift schema | shiftSchema | — not set — | The object with one row per working interval of a resource. |
| Resource column | shiftResourceColumn | — not set — | The lookup column of that object pointing at the resource. It must resolve to the same record as the grouping column, otherwise no shift is found. |
| Day of week column | shiftDayOfWeekColumn | — not set — | The day of the week as a number. Both 0–6 from Sunday and 1–7 from Monday are accepted and normalised. Left empty, the day is derived from the shift start date. |
| Shift start column | shiftStartColumn | — not set — | The start of the interval (a time or a date-time column). |
| Shift end column | shiftEndColumn | — not set — | The end of the interval. An event outside start–end on its weekday is marked out of shift. |
Settings → Behavior
| Field | JSON key | Default | What it changes |
|---|---|---|---|
| Default view | viewMode | week | The view the calendar opens in: day, week, month, year, agenda or resource-timeline. |
| First day of week | firstDayOfWeek | automatic | A fixed first day (0 = Sunday … 6 = Saturday) for the week and month views, for everyone who sees this calendar. Left automatic, the user's own profile decides — see the box below. |
| Day starts at | dayStartHour | 0 (00:00) | The first hour drawn in the day and week grids (0–23). The resource timeline always keeps its 24 hours. |
| Day ends at | dayEndHour | 24 (24:00) | The hour the grid ends at (1–24, exclusive). The pair is written only when it is not the whole day, and an end that is not later than the start is ignored — the grid falls back to 00:00–24:00. |
| Refresh interval | refreshInterval | 0 — off | Auto-refresh in seconds. The calendar also reloads on demand and on the CalendarRefresh message channel, so a short interval is rarely needed. |
| Days ahead | daysAhead | 30 | How many days of data are loaded around the shown period. Records arrive in pages of 150. |
| Read only | readOnly | off | Forbids dragging, resizing and creating events on the board. Opening a record stays allowed, and the user's own rights still apply on top. |
| Accept external filters | externalFilterEnabled | off | A stored marker that the calendar expects a filter from the page. Filters connected in the designer are applied in any case, so the box changes nothing on its own. |
| Resources: days shown | resourceTimelineDays | 1 | How much of the timeline is shown: 1, 2, 3 or 4 days, a week, two weeks or month. The same switch sits above the timeline itself. From a week up the legacy key resourceTimelineWeekMode is written as well, for older bundles. |
| Hide status panel | hideStatusPanel | off | Hides the legend with the status colours and counters under the toolbar. |
| Enabled view modes | enabledViewModes | all six | Which view buttons the user gets. An empty list means all of them; clearing them all stores a sentinel that leaves only the default view. |
Outside the component — platform level
| Field | JSON key | Default | What it changes |
|---|---|---|---|
| Configuration store | SynCalendarSettings | object | One row per calendar: SynCode is the element code, SynSettings the JSON. Every user of the calendar needs read access to it; the configuration is loaded from it each time the calendar opens. |
| Web service | SynCalendarService | SaveSettings, GetSchemaColumns, GetRecordsCount | Saves the configuration, lists an object's columns for the settings panel and counts the records a filter matches. The gear is shown without any role check, so if only administrators may change a configuration, test with a regular user what the service allows. |
| Licence operation | SynCalendarLicense | licence | Only an explicit "no licence" answer replaces the board with the "License required" placeholder. The check fails open: when the licence service stays silent the calendar works, so a missing placeholder does not prove the licence is assigned. |
| System setting | SynCalendarDebugMode | boolean, off | When on, the calendar writes [Calendar] diagnostics to the browser console: data loads, filters, the licence result and where the first day of the week came from. Real errors are logged in any case. |
| System setting | DefaultFirstDayOfTheWeek | platform | The all-users default for the first day of the week. It is third in the chain below — after the component setting and the user's own profile. |
| User profile | SysAdminUnit.WeekFirstDay | Creatio 8.2+ | Each user's own first day of the week, chosen in their profile and stored in the WeekFirstDay lookup. The client reads it through the virtual SysUserProfile entity, which always returns the row of the logged-in user. The field appears in the profile only when the EnableWeekFirstDayConfiguration feature is on. |
Where the first day of the week comes from
- The component setting First day of week, when a day is chosen there — it applies to everyone who sees this calendar.
- Otherwise the user's own choice in their Creatio profile (Creatio 8.2 and later): it is stored in
SysAdminUnit.WeekFirstDayand read through the virtualSysUserProfileentity, so two people can see the same calendar starting on different days. - Otherwise the system setting
DefaultFirstDayOfTheWeek— the default for all users. - Otherwise the day implied by the user's culture — the platform applies this and the step above itself, on the server.
- And if nothing is set at all, Monday.
EnableWeekFirstDayConfiguration is the Creatio feature that puts the field in the user profile; while it is off, the chain starts at the system setting. SynCalendarDebugMode makes the calendar write to the browser console which step of the chain won.
У дизайнері Freedom UI — панель «Calendar settings»
| Поле | Ключ JSON | За замовчуванням | На що впливає |
|---|---|---|---|
| Назва компонента | label | Calendar | Заголовок над календарем; ним же підписано елемент у дизайнері. |
| Об'єкт | objectName | — не задано — | Сутність, яку читає календар. Це запасне значення: діє, лише коли в збережених налаштуваннях немає schemaName. Список будується з SysSchema; без доступу до нього поле стає текстовим. |
| Колонка запису | recordColumn | порожньо | Колонка об'єкта, що вказує на запис сторінки (наприклад, Account). Разом із Record Id звужує календар до записів, пов'язаних із відкритим записом. |
| Record Id | recordId | $Id | Атрибут сторінки з ідентифікатором поточного запису. На сторінці запису лишайте типове значення; на сторінці списку воно не використовується. |
| Папка / фільтр | folderId | $CalFilter | Атрибут сторінки з вибраними папками. Для динамічної папки календар читає її умови з SearchData; статична папка фільтрує через таблицю входження. |
| Застосувати налаштований фільтр | externalFilters … externalFilters5 | порожньо | До п’яти фільтрів, розміщених на сторінці (швидкі фільтри, дерево папок, налаштовані фільтри). Вибраний список зберігається в externalFilterSources; коли користувач змінює такий фільтр, календар перезавантажується з ним. |
| Код елемента | config | назва елемента | Ключ, під яким конфігурація цього календаря зберігається в SynCalendarSettings. Два календарі з однаковим кодом мають спільну конфігурацію — давайте кожному свій. |
Налаштування → Джерело даних
| Поле | Ключ JSON | За замовчуванням | На що впливає |
|---|---|---|---|
| Назва схеми | schemaName | — не задано — | Об'єкт, який читає календар. Після вибору його колонки підставляються в усі списки колонок нижче. |
| Колонка дати | dateColumn | — не задано — | Дата, на яку ставиться подія. Без неї календарю нема чого малювати. |
| Колонка часу початку | startTimeColumn | та сама, що колонка дати | Час початку події. Якщо не задано, його дає колонка дати. |
| Колонка часу закінчення | endTimeColumn | — не задано — | Час закінчення. Він задає висоту події в сітках дня й тижня і перетворює багатоденну задачу на смугу в рядку «весь день». |
| Глобальний фільтр | globalFilterConditions | [] | Умови, що поєднуються (AND) з будь-яким іншим фільтром — зокрема з фільтрами сторінки та папкою. Доступні дванадцять операторів, від = і ∋ до ∅; ∅ і ≠∅ значення не потребують. Довідкова колонка пропонує свої записи як значення. Неповні умови під час збереження відкидаються. |
Налаштування → Відображення
| Поле | Ключ JSON | За замовчуванням | На що впливає |
|---|---|---|---|
| Колонка заголовку | titleColumn | — не задано — | Текст на події. Без нього подія показує лише час. |
| Колонка кольору | colorColumn | — не задано — | Колір окремого запису (hex). Він переважає колір статусу, тож один запис можна виділити, не змінюючи статус. |
| Колонка опису | descriptionColumn | — не задано — | Другий рядок події та картки в агенді. HTML очищується. |
| Додаткові колонки | additionalColumns | [] | Додаткові колонки у підказці події, діалозі дня та картці агенди. Обирайте їх чипами або введіть через кому, якщо список колонок не завантажився. |
| Колонка відповідального | ownerColumn | — не задано — | Довідкова колонка з відповідальним. Вона дає події аватар, а шкалі ресурсів — рядки, якщо групування не задано окремо. |
| Схема фото | ownerPhotoSchema | заповнюється автоматично | Об'єкт, що зберігає фото (наприклад, Contact або SysAdminUnit). Разом із наступним полем читається як шлях <схема>.<колонка> у рядку. |
| Колонка фото | ownerPhotoColumn | заповнюється автоматично | Колонка із самим фото. Без фото календар малює ініціали відповідального. |
Налаштування → Статус
| Поле | Ключ JSON | За замовчуванням | На що впливає |
|---|---|---|---|
| Колонка статусу | statusColumn | — не задано — | Колонка зі статусом. Без неї всі події малюються типовим кольором. |
| Схема довідника статусів | statusLookupSchema | три вбудовані статуси | Довідник, з якого беруться статуси (наприклад, ActivityStatus). Без нього календар використовує «Вільно», «Заброньовано» та «Завершено». |
| Колонка значення статусу | statusValueColumn | заповнюється автоматично | Колонка, значення якої зіставляється зі статусом запису (зазвичай Id). |
| Колонка відображення статусу | statusDisplayColumn | заповнюється автоматично | Колонка, яку видно в легенді та на чипі статусу (зазвичай Name). |
| Колонка кольору статусу | statusColorColumn | — не задано — | Колонка з кольором статусу у hex. Приймає також шлях StatusSchema.Column або EntitySchema.Owner.Column. Без неї календар сам призначає кожному статусу колір із вбудованої палітри. |
| Фільтр статусів | statusFilter | усі статуси | Які статуси взагалі завантажуються. Знятий тут статус зникає з усіх подань, а не лише з легенди. |
Налаштування → Групування
| Поле | Ключ JSON | За замовчуванням | На що впливає |
|---|---|---|---|
| Колонка групування | groupByColumn | — не задано — | Довідкова колонка, значення якої стають рядками шкали ресурсів. |
| Схема довідника груп | groupByLookupSchema | заповнюється автоматично | Об'єкт, на який посилається ця колонка. Він дає назви рядків, а для клікабельної назви — запис, який відкривається. |
| Клікабельна назва ресурсу | resourceNameClickable | вимкнено | Робить підпис рядка шкали ресурсів посиланням, що відкриває згрупований запис. |
Налаштування → Зміни
| Поле | Ключ JSON | За замовчуванням | На що впливає |
|---|---|---|---|
| Показувати індикатор поза графіком | shiftVisibilityEnabled | вимкнено | Позначає події, що випадають за межі робочого часу ресурсу, і додає позначку в легенду. Щоб це працювало, треба заповнити чотири поля нижче. |
| Схема змін | shiftSchema | — не задано — | Об'єкт, у якому один рядок — один робочий інтервал ресурсу. |
| Колонка ресурсу | shiftResourceColumn | — не задано — | Довідкова колонка цього об'єкта, що вказує на ресурс. Вона має вести до того самого запису, що й колонка групування, інакше зміну не буде знайдено. |
| Колонка дня тижня | shiftDayOfWeekColumn | — не задано — | День тижня числом. Приймаються обидві нумерації — 0–6 від неділі та 1–7 від понеділка — і нормалізуються. Якщо не задано, день береться з дати початку зміни. |
| Колонка початку зміни | shiftStartColumn | — не задано — | Початок інтервалу (колонка часу або дати-часу). |
| Колонка кінця зміни | shiftEndColumn | — не задано — | Кінець інтервалу. Подія поза межами «початок–кінець» свого дня тижня позначається як поза графіком. |
Налаштування → Поведінка
| Поле | Ключ JSON | За замовчуванням | На що впливає |
|---|---|---|---|
| Вигляд за замовчуванням | viewMode | week | Подання, у якому відкривається календар: day, week, month, year, agenda або resource-timeline. |
| Перший день тижня | firstDayOfWeek | автоматично | Фіксований перший день (0 = неділя … 6 = субота) для подань тижня й місяця, однаковий для всіх, хто бачить цей календар. Якщо лишити «автоматично», вирішує профіль користувача — див. блок нижче. |
| День починається з | dayStartHour | 0 (00:00) | Перша година, яку малюють сітки дня й тижня (0–23). Шкала ресурсів завжди лишає свої 24 години. |
| День закінчується о | dayEndHour | 24 (24:00) | Година, на якій сітка закінчується (1–24, не включно). Пара зберігається, лише якщо це не цілий день; кінець, не пізніший за початок, ігнорується — сітка повертається до 00:00–24:00. |
| Інтервал оновлення | refreshInterval | 0 — вимкнено | Автооновлення в секундах. Календар також перечитує дані на вимогу та за каналом повідомлень CalendarRefresh, тож короткий інтервал потрібен рідко. |
| Днів вперед | daysAhead | 30 | Скільки днів даних завантажується навколо показаного періоду. Записи надходять сторінками по 150. |
| Тільки читання | readOnly | вимкнено | Забороняє перетягування, зміну тривалості та створення подій на дошці. Відкривати запис і далі можна, а права користувача діють додатково. |
| Приймати зовнішні фільтри | externalFilterEnabled | вимкнено | Збережена позначка, що календар очікує фільтр зі сторінки. Фільтри, підключені в дизайнері, застосовуються в будь-якому разі, тож сам прапорець нічого не змінює. |
| Ресурси: показувати днів | resourceTimelineDays | 1 | Скільки показує шкала: 1, 2, 3 чи 4 дні, тиждень, два тижні або month. Той самий перемикач є над самою шкалою. Від тижня й більше додатково зберігається застарілий ключ resourceTimelineWeekMode — для старих збірок. |
| Приховати панель статусів | hideStatusPanel | вимкнено | Приховує легенду з кольорами статусів і лічильниками під панеллю інструментів. |
| Доступні режими відображення | enabledViewModes | усі шість | Які кнопки подань бачить користувач. Порожній список означає «усі»; якщо зняти всі, зберігається ознака, що лишає тільки подання за замовчуванням. |
Поза компонентом — рівень платформи
| Поле | Ключ JSON | За замовчуванням | На що впливає |
|---|---|---|---|
| Сховище конфігурації | SynCalendarSettings | об'єкт | Один рядок — один календар: SynCode — код елемента, SynSettings — JSON. Кожному користувачеві календаря потрібен доступ на читання: конфігурація читається звідси щоразу під час відкриття. |
| Веб-сервіс | SynCalendarService | SaveSettings, GetSchemaColumns, GetRecordsCount | Зберігає конфігурацію, віддає перелік колонок об’єкта для панелі налаштувань і рахує записи під фільтр. Шестірню видно без перевірки ролі, тож якщо змінювати конфігурацію мають лише адміністратори, перевірте під звичайним користувачем, що дозволяє сервіс. |
| Ліцензійна операція | SynCalendarLicense | ліцензія | Лише явна відповідь «ліцензії немає» замінює дошку заглушкою «Потрібна ліцензія». Перевірка fail-open: якщо служба ліцензій мовчить, календар працює, тож відсутність заглушки не доводить, що ліцензію видано. |
| Системне налаштування | SynCalendarDebugMode | логічне, вимкнено | Увімкнене — календар пише в консоль браузера діагностику з міткою [Calendar]: завантаження даних, фільтри, результат перевірки ліцензії та звідки взято перший день тижня. Справжні помилки пишуться завжди. |
| Системне налаштування | DefaultFirstDayOfTheWeek | платформа | Типове значення першого дня тижня для всіх користувачів. У ланцюжку нижче воно третє — після налаштування компонента й особистого значення в профілі. |
| Профіль користувача | SysAdminUnit.WeekFirstDay | Creatio 8.2+ | Особистий перший день тижня кожного користувача, вибраний у профілі та збережений у довіднику WeekFirstDay. Клієнт читає його через віртуальну сутність SysUserProfile, яка завжди повертає рядок користувача, що увійшов. Поле з’являється у профілі, лише коли ввімкнено функціональність EnableWeekFirstDayConfiguration. |
Звідки береться перший день тижня
- Налаштування компонента «Перший день тижня», якщо там обрано день — воно діє для всіх, хто бачить цей календар.
- Інакше — особистий вибір користувача у профілі Creatio (від Creatio 8.2): він зберігається в
SysAdminUnit.WeekFirstDayі читається через віртуальну сутністьSysUserProfile, тож двоє людей можуть бачити той самий календар із різних днів. - Інакше — системне налаштування
DefaultFirstDayOfTheWeek, типове для всіх користувачів. - Інакше — день, що випливає з культури користувача: цей крок і попередній платформа застосовує сама, на сервері.
- А якщо не задано нічого — понеділок.
EnableWeekFirstDayConfiguration — функціональність Creatio, яка додає поле у профіль користувача; поки її вимкнено, ланцюжок починається із системного налаштування. SynCalendarDebugMode змушує календар писати в консоль браузера, який крок ланцюжка спрацював.
В дизайнере Freedom UI — панель «Calendar settings»
| Поле | Ключ JSON | По умолчанию | На что влияет |
|---|---|---|---|
| Название компонента | label | Calendar | Заголовок над календарём; им же подписан элемент в дизайнере. |
| Объект | objectName | — не задано — | Сущность, которую читает календарь. Это запасное значение: действует, только когда в сохранённых настройках нет schemaName. Список строится из SysSchema; без доступа к нему поле становится текстовым. |
| Колонка записи | recordColumn | пусто | Колонка объекта, указывающая на запись страницы (например, Account). Вместе с Record Id сужает календарь до записей, связанных с открытой записью. |
| Record Id | recordId | $Id | Атрибут страницы с идентификатором текущей записи. На странице записи оставьте значение по умолчанию; на странице списка оно не используется. |
| Папка / фильтр | folderId | $CalFilter | Атрибут страницы с выбранными папками. Для динамической папки календарь читает её условия из SearchData; статическая папка фильтрует через таблицу вхождения. |
| Применить настроенный фильтр | externalFilters … externalFilters5 | пусто | До пяти фильтров, размещённых на странице (быстрые фильтры, дерево папок, настроенные фильтры). Выбранный список хранится в externalFilterSources; когда пользователь меняет такой фильтр, календарь перезагружается с ним. |
| Код элемента | config | имя элемента | Ключ, под которым конфигурация этого календаря хранится в SynCalendarSettings. Два календаря с одинаковым кодом имеют общую конфигурацию — давайте каждому свой. |
Настройки → Источник данных
| Поле | Ключ JSON | По умолчанию | На что влияет |
|---|---|---|---|
| Название схемы | schemaName | — не задано — | Объект, который читает календарь. После выбора его колонки подставляются во все списки колонок ниже. |
| Колонка даты | dateColumn | — не задано — | Дата, на которую ставится событие. Без неё календарю нечего рисовать. |
| Колонка времени начала | startTimeColumn | та же, что колонка даты | Время начала события. Если не задано, его даёт колонка даты. |
| Колонка времени окончания | endTimeColumn | — не задано — | Время окончания. Оно задаёт высоту события в сетках дня и недели и превращает многодневную задачу в полосу в строке «весь день». |
| Глобальный фильтр | globalFilterConditions | [] | Условия, объединяемые (AND) с любым другим фильтром — в том числе с фильтрами страницы и папкой. Доступны двенадцать операторов, от = и ∋ до ∅; ∅ и ≠∅ значения не требуют. Справочная колонка предлагает свои записи как значения. Неполные условия при сохранении отбрасываются. |
Настройки → Отображение
| Поле | Ключ JSON | По умолчанию | На что влияет |
|---|---|---|---|
| Колонка заголовка | titleColumn | — не задано — | Текст на событии. Без него событие показывает только время. |
| Колонка цвета | colorColumn | — не задано — | Цвет отдельной записи (hex). Он важнее цвета статуса, поэтому одну запись можно выделить, не меняя статус. |
| Колонка описания | descriptionColumn | — не задано — | Вторая строка события и карточки в повестке. HTML очищается. |
| Дополнительные колонки | additionalColumns | [] | Дополнительные колонки в подсказке события, диалоге дня и карточке повестки. Выбирайте их чипами или введите через запятую, если список колонок не загрузился. |
| Колонка ответственного | ownerColumn | — не задано — | Справочная колонка с ответственным. Она даёт событию аватар, а шкале ресурсов — строки, если группировка не задана отдельно. |
| Схема фото | ownerPhotoSchema | заполняется автоматически | Объект, хранящий фото (например, Contact или SysAdminUnit). Вместе со следующим полем читается как путь <схема>.<колонка> в строке. |
| Колонка фото | ownerPhotoColumn | заполняется автоматически | Колонка с самим фото. Без фото календарь рисует инициалы ответственного. |
Настройки → Статус
| Поле | Ключ JSON | По умолчанию | На что влияет |
|---|---|---|---|
| Колонка статуса | statusColumn | — не задано — | Колонка со статусом. Без неё все события рисуются цветом по умолчанию. |
| Схема справочника статусов | statusLookupSchema | три встроенных статуса | Справочник, из которого берутся статусы (например, ActivityStatus). Без него календарь использует «Свободно», «Забронировано» и «Завершено». |
| Колонка значения статуса | statusValueColumn | заполняется автоматически | Колонка, значение которой сопоставляется со статусом записи (обычно Id). |
| Колонка отображения статуса | statusDisplayColumn | заполняется автоматически | Колонка, которую видно в легенде и на чипе статуса (обычно Name). |
| Колонка цвета статуса | statusColorColumn | — не задано — | Колонка с цветом статуса в hex. Принимает также путь StatusSchema.Column или EntitySchema.Owner.Column. Без неё календарь сам назначает каждому статусу цвет из встроенной палитры. |
| Фильтр статусов | statusFilter | все статусы | Какие статусы вообще загружаются. Снятый здесь статус исчезает из всех представлений, а не только из легенды. |
Настройки → Группировка
| Поле | Ключ JSON | По умолчанию | На что влияет |
|---|---|---|---|
| Колонка группировки | groupByColumn | — не задано — | Справочная колонка, значения которой становятся строками шкалы ресурсов. |
| Схема справочника групп | groupByLookupSchema | заполняется автоматически | Объект, на который ссылается эта колонка. Он даёт названия строк, а для кликабельного имени — запись, которая открывается. |
| Кликабельное имя ресурса | resourceNameClickable | выключено | Делает подпись строки шкалы ресурсов ссылкой, открывающей сгруппированную запись. |
Настройки → Смены
| Поле | Ключ JSON | По умолчанию | На что влияет |
|---|---|---|---|
| Показывать индикатор вне графика | shiftVisibilityEnabled | выключено | Отмечает события, выпадающие за пределы рабочего времени ресурса, и добавляет отметку в легенду. Чтобы это работало, нужно заполнить четыре поля ниже. |
| Схема смен | shiftSchema | — не задано — | Объект, в котором одна строка — один рабочий интервал ресурса. |
| Колонка ресурса | shiftResourceColumn | — не задано — | Справочная колонка этого объекта, указывающая на ресурс. Она должна вести к той же записи, что и колонка группировки, иначе смена не будет найдена. |
| Колонка дня недели | shiftDayOfWeekColumn | — не задано — | День недели числом. Принимаются обе нумерации — 0–6 от воскресенья и 1–7 от понедельника — и нормализуются. Если не задано, день берётся из даты начала смены. |
| Колонка начала смены | shiftStartColumn | — не задано — | Начало интервала (колонка времени или даты-времени). |
| Колонка конца смены | shiftEndColumn | — не задано — | Конец интервала. Событие вне границ «начало–конец» своего дня недели помечается как вне графика. |
Настройки → Поведение
| Поле | Ключ JSON | По умолчанию | На что влияет |
|---|---|---|---|
| Вид по умолчанию | viewMode | week | Представление, в котором открывается календарь: day, week, month, year, agenda или resource-timeline. |
| Первый день недели | firstDayOfWeek | автоматически | Фиксированный первый день (0 = воскресенье … 6 = суббота) для представлений недели и месяца, одинаковый для всех, кто видит этот календарь. Если оставить «автоматически», решает профиль пользователя — см. блок ниже. |
| День начинается с | dayStartHour | 0 (00:00) | Первый час, который рисуют сетки дня и недели (0–23). Шкала ресурсов всегда оставляет свои 24 часа. |
| День заканчивается в | dayEndHour | 24 (24:00) | Час, на котором сетка заканчивается (1–24, не включительно). Пара сохраняется, только если это не целые сутки; конец, не превышающий начало, игнорируется — сетка возвращается к 00:00–24:00. |
| Интервал обновления | refreshInterval | 0 — выключено | Автообновление в секундах. Календарь также перечитывает данные по требованию и по каналу сообщений CalendarRefresh, поэтому короткий интервал нужен редко. |
| Дней вперёд | daysAhead | 30 | Сколько дней данных загружается вокруг показанного периода. Записи приходят страницами по 150. |
| Только чтение | readOnly | выключено | Запрещает перетаскивание, изменение длительности и создание событий на доске. Открывать запись по-прежнему можно, а права пользователя действуют дополнительно. |
| Принимать внешние фильтры | externalFilterEnabled | выключено | Сохранённая отметка, что календарь ожидает фильтр со страницы. Фильтры, подключённые в дизайнере, применяются в любом случае, поэтому сам флажок ничего не меняет. |
| Ресурсы: показывать дней | resourceTimelineDays | 1 | Сколько показывает шкала: 1, 2, 3 или 4 дня, неделя, две недели или month. Тот же переключатель есть над самой шкалой. От недели и больше дополнительно сохраняется устаревший ключ resourceTimelineWeekMode — для старых сборок. |
| Скрыть панель статусов | hideStatusPanel | выключено | Скрывает легенду с цветами статусов и счётчиками под панелью инструментов. |
| Доступные режимы отображения | enabledViewModes | все шесть | Какие кнопки представлений видит пользователь. Пустой список означает «все»; если снять все, сохраняется признак, оставляющий только представление по умолчанию. |
Вне компонента — уровень платформы
| Поле | Ключ JSON | По умолчанию | На что влияет |
|---|---|---|---|
| Хранилище конфигурации | SynCalendarSettings | объект | Одна строка — один календарь: SynCode — код элемента, SynSettings — JSON. Каждому пользователю календаря нужен доступ на чтение: конфигурация читается отсюда при каждом открытии. |
| Веб-сервис | SynCalendarService | SaveSettings, GetSchemaColumns, GetRecordsCount | Сохраняет конфигурацию, отдаёт перечень колонок объекта для панели настроек и считает записи под фильтр. Шестерёнка видна без проверки роли, поэтому если менять конфигурацию должны только администраторы, проверьте под обычным пользователем, что разрешает сервис. |
| Лицензионная операция | SynCalendarLicense | лицензия | Только явный ответ «лицензии нет» заменяет доску заглушкой «Требуется лицензия». Проверка fail-open: если служба лицензий молчит, календарь работает, поэтому отсутствие заглушки не доказывает, что лицензия выдана. |
| Системная настройка | SynCalendarDebugMode | логическое, выключено | Включённое — календарь пишет в консоль браузера диагностику с меткой [Calendar]: загрузку данных, фильтры, результат проверки лицензии и откуда взят первый день недели. Настоящие ошибки пишутся всегда. |
| Системная настройка | DefaultFirstDayOfTheWeek | платформа | Значение первого дня недели по умолчанию для всех пользователей. В цепочке ниже оно третье — после настройки компонента и личного значения в профиле. |
| Профиль пользователя | SysAdminUnit.WeekFirstDay | Creatio 8.2+ | Личный первый день недели каждого пользователя, выбранный в профиле и сохранённый в справочнике WeekFirstDay. Клиент читает его через виртуальную сущность SysUserProfile, которая всегда возвращает строку вошедшего пользователя. Поле появляется в профиле, только когда включена функциональность EnableWeekFirstDayConfiguration. |
Откуда берётся первый день недели
- Настройка компонента «Первый день недели», если там выбран день — она действует для всех, кто видит этот календарь.
- Иначе — личный выбор пользователя в профиле Creatio (начиная с Creatio 8.2): он хранится в
SysAdminUnit.WeekFirstDayи читается через виртуальную сущностьSysUserProfile, поэтому двое людей могут видеть один и тот же календарь с разных дней. - Иначе — системная настройка
DefaultFirstDayOfTheWeek, значение по умолчанию для всех пользователей. - Иначе — день, вытекающий из культуры пользователя: этот шаг и предыдущий платформа применяет сама, на сервере.
- А если не задано ничего — понедельник.
EnableWeekFirstDayConfiguration — функциональность Creatio, которая добавляет поле в профиль пользователя; пока она выключена, цепочка начинается с системной настройки. SynCalendarDebugMode заставляет календарь писать в консоль браузера, какой шаг цепочки сработал.
Setting → result
Screens taken from a running stand: each one says which setting produced what is on it.
Designer setup area
When you place the calendar on a Freedom UI page, its setup area (property panel) lets an admin configure the essentials without code — the object it reads, a title, and which page filters feed it.
Component name
A title shown above the calendar; it also labels the element in the designer.
Object
Pick the entity the calendar reads from a searchable dropdown.
Connect page filters
Bind the calendar to filters placed on the page — quick filters, folder tree, pre-configured filters — one or several.
Element code
The configuration key; prefilled from the element and editable. Record Id and folder default to the page bindings.
Filtering
Beyond the status toggles, the calendar can be narrowed by filters from the page and by an always-on global filter — all combined with its own date/record/folder scope.
Page filters, live
Filters connected in the designer apply at runtime — change one and the calendar reloads with it applied.
Multiple filters
Connect several page filters at once; they are combined (AND) into one query.
Global filter
Add always-on conditions (column · operator · value) in Settings; they narrow the data on top of every other filter.
Status filter
Toggle statuses in the panel to show only the events you need.
Folders
Pick a folder in the page's folder tree and the calendar shows only its records — a general folder by its members, a dynamic folder by its saved conditions; several folders combine with OR. A filter the calendar's own object cannot read is dropped instead of breaking the query, so the calendar still opens.
Quick, search and period filters
Quick filters (such as “My tasks” or “Show canceled”), the search box and a date-period quick filter on the page all reach the calendar. When the page sets a period, the calendar jumps to its start and picks the view that fits its length — day, week, month or year.
Shift visibility
Map a working-hours (shift) source and the calendar highlights activities that fall outside a resource’s scheduled hours — making over- and off-schedule work easy to spot in the resource timeline.
Working-hours source
Map a shift schema: resource, start and end. The day of week is optional — derived from the shift date when not set.
Out-of-shift indicator
Events outside the resource’s working hours are visually flagged.
Per resource
Works in the resource timeline, where activities are grouped by owner.
Localization & access
The interface ships in three languages and follows the user’s Creatio culture automatically. A valid license is required; diagnostic logging is gated behind a system setting.
EN · UK · RU
~210 strings per language; the language follows the user culture.
License
The SynCalendar license is checked; without it a notice is shown.
Debug mode
The SynCalendarDebugMode setting turns on console diagnostics.
Add a language
Create a locale file, extend the map, and map the culture — that’s it.