Тип свойства: выражение
Иногда бывает полезно вычислять некоторые значения свойств на основе уже имеющихся. Например, объем упаковки (параллелепипеда со сторонами a, b и c) вычисляется по формуле V = a * b * c.
Пример посложнее: вычислить массу автомобильной шины с пригодной для практического применения точностью можно по формуле M = 0.000014 * (D ^ 1.6) * (W * 17 + W * (H - 15) * 0.69), где D - посадочный диаметр в дюймах, W - ширина в миллиметрах, H - высота в процентах от ширины.
Для вычисления таких значений в catalog.app есть тип свойства "выражение". Впрочем, его возможности гораздо шире, это полноценный язык программирования.
Для описания выражений мы используем язык Scriban. Scriban - это быстрый, мощный, безопасный и легкий язык сценариев. Подробнее с языком можно ознакимиться здесь.
Дополнительно доступна функция возведения в степень pow.
Объект с данными доступен в свойстве model. Проверить корректность работы выражения можно нажав на кнопку "Тест". После этого появится окно "Результаты", в котором, появится результат выражения или сообщения об ошибках. Модель данных можно увидеть, нажав на кнопку "Модель". И для проверки корректности, и для просмотра модели данных необходимо указать Id товара, который будет использован в качестве тестовой модели.
В объект с данными товара другие вычисляемые свойства не добавляются.
Пример модели данных:
{
"Category": "Шины",
"Vendor": "Formula",
"Name": "Шина зимняя(Ice 235/55R17 103T,шипы)",
"Article": null,
"Color": null,
"Ean": "8019227278347",
"Properties": {
"Ширина профиля": 235.000000,
"Диаметр": 17.000000,
"Шипы": true,
"Возможность ошиповки": false,
"Тип автомобиля": ["легковой"],
"Способ герметизации": ["бескамерные"],
"Конструкция": "радиальные",
"Страна производства": "Китай",
"Высота профиля": 55,
"Производитель": "Formula",
"Импортер": "ООО ПОКРЫШКИНО Минский р-н, Щомыслицкий с/с, 31-1 район аг. Озерцо, каб. 107",
"Ставка НДС": 20.000000
},
"Tags": [
{
"Id": 1,
"Name": "Черная пятница"
},
{
"Id": 2,
"Name": "11.11"
}
]
}
Пример вычисления массы шины по представленной модели:
d = model.Properties["Диаметр"];
w = model.Properties["Ширина профиля"];
h = model.Properties["Высота профиля"];
ret 0.000014 * pow(d, 1.6) * (w * 17 + w * (h - 15) * 0.69);
Результат:
13,653658330880194600000000000