Docs

Docs

Open in ChatGPT
Ask ChatGPT about this page
Open in Claude
Ask Claude about this page

Скрипты и расширения

Скрипты и расширения

Назначение

Сервис обеспечивает расширение поведения системы за счет сценариев, правил и дополнительной логики без изменения ядра. Включает 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

  1. Создать запись Server Script (или аналог в вашей версии): выбрать тип документа и событие (before_save, on_submit и т.д.).
  2. Написать код на Python в допустимой среде (safe_exec): доступ к doc, Dinext; без произвольного доступа к файловой системе и опасных операций.
  3. Сохранить и включить скрипт; при наступлении события он выполнится.
  4. Логировать ошибки и проверять логи при сбоях.

Создание client script

  1. Создать Client Script: привязать к тип документа, выбрать событие (onload, onload_post_render, change поля и т.д.).
  2. Написать JavaScript: доступ к frm, Dinext, полям формы; вызовы Dinext.call для серверных методов.
  3. Сохранить; скрипт загрузится при открытии формы этого тип документа.
  4. Отлаживать в консоли браузера при необходимости.

Использование flexirule

  1. В flexirule описать сценарий: условия, действия, вызовы методов.
  2. Привязать к документу или процессу; активировать.
  3. Правило выполняется при наступлении заданных условий без написания кода в приложении.

Проектные скрипты

  1. Скрипты поставляются в fixtures (server_script.json, client_script.json); при установке/обновлении приложения они применяются к сайту.
  2. Не редактировать fixtures без версионирования; кастомные скрипты создавать отдельно (Server Script / Client Script) или в своем приложении.
  3. При конфликте приоритет у явно созданных скриптов в зависимости от порядка загрузки.

Правила и ограничения

  • 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 — произвольный код; подходит для сложной логики и интеграций. Выбор зависит от задачи и навыков команды.

Связанные темы

Last updated 3 months ago
Was this helpful?
Thanks!