Как добавить разницу дат в полях страницы редактирования
Glossary Item Box
Для работы с датами в клиентской части приложения используются возможности стандартного JavaScript-объекта Date. Например, для получения дня месяца для определенной даты в соответствии с локальным временем пользователя используется метод Date.prototype.getDate(). А для установки дня месяца относительно текущего месяца — метод Date.prototype.setDate(). Все свойства и методы объекта Date приведены в документации.
Например, при создании нового договора нужно, чтобы в поле [Дата завершения] ([End Date]) отображалась дата на 5 дней больше, чем в поле [Дата начала] ([Start Day]). Для этого необходимо:
1. Создать замещающую схему страницы редактирования записи раздела [Договоры] ContractPageV2 ([Section edit page schema - "Contracts"]). Как создать замещающую схему описано в статье "Создание клиентской схемы".
2. В созданную схему добавить следующий код:
define("ContractPageV2", [], function() { return { entitySchemaName: "Contract", methods: { // Установка даты выполняется после инициализации объекта. onEntityInitialized: function() { // Проверка режима новой записи if ((this.isAddMode() && this.Ext.isEmpty(this.get("EndDate")))) { // Вызов вспомогательного метода. this.setEndDate(this.get("StartDate"), 5); } // Вызов базовой функциональности. this.callParent(arguments); }, // Вспомогательный метод для установки даты. setEndDate: function(date, dateOffsetInDays) { var offsetDate = new Date(); offsetDate.setDate(date.getDate() + dateOffsetInDays); this.set("EndDate", offsetDate); } } }; });
3. Сохранить изменения.
4. Обновить страницу браузера.
В результате при добавлении нового договора будет автоматически установлена дата его завершения, отличающаяся от даты начала на 5 дней (рис. 1).
Рис. 1. — Результат выполнения кейса
Чтобы дата в поле [Дата завершения] ([End Date]) пересчитывалась автоматически при изменении пользователем поля [Дата начала] ([Start Day]), необходимо воспользоваться функциональностью вычисляемых полей. Как это сделать подробно описано в статье "Добавление вычисляемых полей".