Скрипты и расширения
Скрипты и расширения
Назначение
Сервис обеспечивает расширение поведения системы за счет сценариев, правил и дополнительной логики без изменения ядра. Включает client script и server script платформы , визуальную оркестрацию бизнес-логики (flexirule) и проектные скрипты в fixtures .
Цели и задачи
- Выполнять код на сервере при событиях документа (server script): валидация, расчеты, вызовы API.
- Менять поведение формы в браузере (client script): подстановка значений, показ/скрытие полей, проверки.
- Описывать бизнес-правила визуально (flexirule при установке).
- Использовать проектные скрипты из fixtures для типовой логики проектного контура.
- Избегать разработки отдельного приложения для типовых доработок.
Для кого
- Разработчики и продвинутые администраторы (server/client script).
- Аналитики и конфигураторы при использовании flexirule.
- Администраторы проектного контура .
Основные понятия
- Server Script — скрипт на Python, выполняемый на сервере при событии (before_save, on_update и т.д.); создается через тип документа Server Script или в коде.
- Client Script — скрипт на JavaScript, выполняемый в форме (form load, field change и т.д.); привязка к тип документа.
- safe_exec — среда выполнения серверных скриптов с ограничениями безопасности .
- script_manager.js — менеджер загрузки и выполнения client script .
- flexirule — приложение визуальной оркестрации бизнес-логики (README).
Основные сущности / объекты
- script_manager.js — client script.
- safe_exec.py — выполнение server script.
- flexirule (README) — визуальные правила.
- Dinext — server_script.json, client_script.json в fixtures.
Основные сценарии / процессы
Создание server script
- Создать запись Server Script (или аналог в вашей версии): выбрать тип документа и событие (before_save, on_submit и т.д.).
- Написать код на Python в допустимой среде (safe_exec): доступ к
doc,Dinext; без произвольного доступа к файловой системе и опасных операций. - Сохранить и включить скрипт; при наступлении события он выполнится.
- Логировать ошибки и проверять логи при сбоях.
Создание client script
- Создать Client Script: привязать к тип документа, выбрать событие (onload, onload_post_render, change поля и т.д.).
- Написать JavaScript: доступ к
frm,Dinext, полям формы; вызовыDinext.callдля серверных методов. - Сохранить; скрипт загрузится при открытии формы этого тип документа.
- Отлаживать в консоли браузера при необходимости.
Использование flexirule
- В flexirule описать сценарий: условия, действия, вызовы методов.
- Привязать к документу или процессу; активировать.
- Правило выполняется при наступлении заданных условий без написания кода в приложении.
Проектные скрипты
- Скрипты поставляются в fixtures (server_script.json, client_script.json); при установке/обновлении приложения они применяются к сайту.
- Не редактировать fixtures без версионирования; кастомные скрипты создавать отдельно (Server Script / Client Script) или в своем приложении.
- При конфликте приоритет у явно созданных скриптов в зависимости от порядка загрузки.
Правила и ограничения
- Server script выполняется в ограниченной среде (safe_exec); часть API может быть недоступна.
- Client script имеет доступ к форме и к вызовам API; не хранить секреты и не доверять данным с клиента без проверки на сервере.
- Слишком тяжелые или частые скрипты могут влиять на производительность; оптимизировать и кэшировать где возможно.
- flexirule совместимость с версией Dinext и другими приложениями уточнять в README.
Результаты / отчетность
- Измененное поведение форм и документов по событиям.
- Логи выполнения скриптов при ошибках (Error Log, логи приложения).
- Аудит изменений через версионирование скриптов при хранении в коде.
Типовые вопросы и ошибки (FAQ)
Server script не срабатывает
Проверьте: скрипт включен (disabled = 0); событие совпадает (before_save, on_update и т.д.); тип документа указан верно; в коде нет синтаксической ошибки. Просмотрите Error Log и логи воркера.
Как вызвать серверный метод из client script?
Dinext.call({ method: 'путь.к.методу', args: { ... }, callback: function(r) { ... } }). Метод должен быть помечен как whitelisted или вызываться из разрешенного контекста.
Чем flexirule отличается от server script?
flexirule — визуальное описание правил без написания кода; подходит для условий и простых действий. Server script — произвольный код; подходит для сложной логики и интеграций. Выбор зависит от задачи и навыков команды.