(не показано 7 промежуточных версий этого же участника)
Строка 1:
Строка 1:
Предыдущая статья курса: ''[[Задание 7. Создание служебного сценария]]''
Предыдущая статья курса: ''[[Задание 7. Создание служебного сценария]]''
<blockquote>
'''Дальнейшие статьи курса расчитаны на наличие опыта в разработке приложений и сервисов. Крайне желательно наличие опыта разработки на языке TypeScript и работе с NodeJS.'''</blockquote>
= Общая информация =
= Общая информация =
Строка 7:
Строка 12:
Разработка приложений на платформе эра выполняется с помощью языка TypeScript. В большинстве случаев, можно выбрать контекст исполнения кода - он может быть клиентский (в браузере) или серверный (на сервере приложений продуктового слоя). В случае использования серверного контекста, код будет исполняться при помощи NodeJS версии 14.Х.
Разработка приложений на платформе эра выполняется с помощью языка TypeScript. В большинстве случаев, можно выбрать контекст исполнения кода - он может быть клиентский (в браузере) или серверный (на сервере приложений продуктового слоя). В случае использования серверного контекста, код будет исполняться при помощи NodeJS версии 14.Х.
Фактически, при использовании No-Code редакторов и применении изменений в пакете, система автоматически генерирует TypeScript-код и сохраняет изменения в файловой системе.
В рамках платформы, при разработке, применяется принцип разделения интерфейсов (см. [https://ru.wikipedia.org/wiki/SOLID_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5) SOLID]).
В рамках платформы, при разработке, применяется принцип разделения интерфейсов (см. [https://ru.wikipedia.org/wiki/SOLID_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5) SOLID]).
Более полную архитектуру платформы и её модулей можно найти в [[Архитектура платформы|соответствующей статье]].
Более полную архитектуру платформы и её модулей можно найти в [[Архитектура платформы|соответствующей статье]].<blockquote>Для применения изменений, связанных с серверным кодом, необходимо применять изменения в пакете. В отличии от изменений классов, контролов и остальных сущностей, требуется деактивация и повторная активация пакета в приложении Builder. При использовании функции Apply, сервисы и некоторые другие элементы пакета не будут перезапущены, соответственно в таком случае изменения не будут применены.</blockquote>
= Применение TS-кода в No-Code редакторах =
= Применение TS-кода в No-Code редакторах =
[[Файл:Переопределение TypeScript-методов в классе.png|мини|Переопределение методов в редакторе класса]]
=== Переопределение методов ===
Платформа предлагает широкие возможности по модификации логики объектов с помощью переопределения некоторых TypeScript-методов в редакторах объектов. Переопределен может быть как серверный, так и клиентский код.
В случае использования данного инструмента, в соответствующие поля необходимо вносить тело метода, платформа при применении изменений в пакете автоматически создаст всю необходимую обвязку данного метода и задаст указанный код в качестве его тела.
Переопределенные клиентские методы будут автоматически применены в сгенерированном системой контроле.
Методы, доступные для переопределения в редакторах:
{| class="wikitable"
|+Методы, доступные для переопределения
!Имя объекта
!Имя метода
!Контекст исполнения
!Комментарий
|-
| rowspan="9" |Класс
|afterApplyUpdatesCode
|Серверный
|Метод вызывается после применения изменений в данных объекта класса
|-
|beforeInsertCode
|Серверный
|Метод вызывается перед добавлением нового объекта класса
|-
|beforeModifyCode
|Серверный
|Метод вызывается перед изменением данных объекта класса
|-
|beforeDeleteCode
|Серверный
|Метод вызывается перед удалением объекта класса
|-
|autoCalcCondition
|Серверный
|
|-
|doubleClickCode
|Клиентский
|
|-
|autoFocusConditionCode
|Клиентский
|
|-
|beforeInitCode
|Клиентский
|Метод вызывается перед инициализацией контрола в браузере
|-
|afterInitCode
|Клиентский
|Метод вызывается после инициализации контрола в браузере
|-
|Класс/DataProperty
|beforeSetCode
|Серверный
|Метод вызывается перед установкой нового значения в свойство объекта класса
|-
|
|afterSetCode
|Серверный
|Метод вызывается после установки нового значения в свойство объекта класса
|-
|
|dynamicEditorCode
|Клиентский
|
|-
|
|visibilityConditionCode
|Клиентский
|Метод, определяющий видимость свойства класса. Должен возвращать true или false
|-
|
|readOnlyConditionCode
|Клиентский
|Метод, определяющий доступность свойства класса для редактирования. Должен возвращать true или false
|-
|
|dynamicFilterCode
|Клиентский
|
|-
|
|afterValueChangedCode
|Клиентский
|Метод вызывается после измнеения значения свойства класса (на клиенте)
|-
|
|validationCode
|Клиентский
|Метод вызывается после изменения значения свойства, для его валидации. Должен возвращать true или false
|}
=== Действия классов ===
[[Файл:Действие класса.png|мини|Действие класса]]
Одна из важных возможностей реализации бизнес-логики объектов - это действия классов. Набор действий задается в коллекции Actions каждого класса.
Действие может выполняться как в серверном так и в клиентском контексте. Платформа не накладывает ограничений на логику работы действий, таким образом в действии может быть заложена сложная логика обработки данных класса, взаимодействий с другими модулями и сервисами системы, а так же внешними интеграциями.
Детально работа действий будет рассмотрена в одной из следующих статей.
Обработчики (Handlers) это объект пакета, который служит для обработки событий классов.
Обработчик предназначен для выполнения каких-либо действий во время операций insert/modify/delete в любых классах (в том числе из других пакетов, включая системные). Если обработчик возвращает строковое сообщение об ошибке либо false, операция отменяется.
Включенные обработчики активных пакетов выполняются в порядке заданного приоритета после родных методов класса (заданных в свойствах класса beforeInsertCode, beforeModifyCode, beforeDeleteCode).
Детальному обзору обработчиков посвящена следующая статья курса.
В рамках платформы, допускается разработка в файловой системе '''сервисов''' пакета.
После создания сервиса и переактивации пакета, система сгенерирует исходный код и обвязку для сервиса. В разделе '''Services''', в колонке ''sourceCode'' можно скачать архив исходных кодов для разработки сервиса.
Архив будет содержать набор классов-обёрток всех пакетов системы, а так же исходные коды сервиса.
Так как все классы-обёртки генерируются системой автоматически, не рекомендуется вносить в них изменения, кроме как для отладки при запуске сервиса на компьютере разработчика. Данный функционал используется для удобства разработки сервисов и применения функционала современных IDE.
Для разработки и отладки сервисов, необходимо наличие на компьютере разработчика NodeJS v14 и npm v6.
В качестве среды разработки подходит Visual Studio Code или любая другая современная IDE.
Разработке сервисов в дальнейшем курсе будет посвящено несколько отдельных статей.
Инструкцию по запуску сервисов можно всегда найти в справке раздела Services.
Общий подход к работе с сервисами на локальной машине следующий:
# Создать в пакете серверный сервис
# Активировать пакет
# Отключить микросервис в приложении Настройки, раздел Прочее. Данное действие необходимо для того, чтобы запущенный сервис не конфликтовал с системным. На время разработки, сервис поднимаемый платформой отключается, и его будет замещать отладочный экземпляр сервиса разработчиком
# Включить в таблице Services отображение столбца sourceCode
# Скачать и распаковать zip-архив
# [[Файл:Микросервисы в приложении Настройки.png|мини|Микросервисы в приложении Настройки]]Установить на компьютер NodeJS v14 и npm v6, Visual Studio Code либо аналогичную IDE
# В файле package.json в строке build:live указать актуальные адрес сервера, имя домена и токен. Доступы настраиваются в приложении Настройки, раздел Прочее, Каналы интеграции. Для отладки можно использовать доступ product_layer, однако рекомендуется создать отдельный токен доступа с необходимыми правами.
# Выполнить npm ci
# Выполнить npm start
# Открыть папку src в IDE
Запущенный сервис контролируется утилитой nodemon, и при изменении исходных кодов, сервис будет автоматически перезапускаться, применяя необходимые изменения.
Более подробно про отладку и работу сервисов будет расказанно в дальнейших статьях курса.
Следующая статья курса: [[Обработчики данных]]
Следующая статья курса: [[Обработчики данных]]
Предыдущая статья курса: ''[[Задание 7. Создание служебного сценария]]''
Предыдущая статья курса: ''[[Задание 7. Создание служебного сценария]]''
Дальнейшие статьи курса расчитаны на наличие опыта в разработке приложений и сервисов. Крайне желательно наличие опыта разработки на языке TypeScript и работе с NodeJS.
Общая информация
Любое приложение на платформе эра состоит из набора пакетов. При переходе от No-Code разработки к разработке с помощью кода этот подход не меняется.
Все объекты пакета, созданные с помощью No-Code редакторов, преобразуются механизмами платформы в набор классов. Большинство классов не доступно для редактирования внешними средствами. Исключение составляют сервисы пакета, для них доступно полное изменение исходного кода и его замена.
Разработка приложений на платформе эра выполняется с помощью языка TypeScript. В большинстве случаев, можно выбрать контекст исполнения кода - он может быть клиентский (в браузере) или серверный (на сервере приложений продуктового слоя). В случае использования серверного контекста, код будет исполняться при помощи NodeJS версии 14.Х.
В рамках платформы, при разработке, применяется принцип разделения интерфейсов (см. SOLID).
Для применения изменений, связанных с серверным кодом, необходимо применять изменения в пакете. В отличии от изменений классов, контролов и остальных сущностей, требуется деактивация и повторная активация пакета в приложении Builder. При использовании функции Apply, сервисы и некоторые другие элементы пакета не будут перезапущены, соответственно в таком случае изменения не будут применены.
Применение TS-кода в No-Code редакторах
Переопределение методов в редакторе класса
Переопределение методов
Платформа предлагает широкие возможности по модификации логики объектов с помощью переопределения некоторых TypeScript-методов в редакторах объектов. Переопределен может быть как серверный, так и клиентский код.
В случае использования данного инструмента, в соответствующие поля необходимо вносить тело метода, платформа при применении изменений в пакете автоматически создаст всю необходимую обвязку данного метода и задаст указанный код в качестве его тела.
Переопределенные клиентские методы будут автоматически применены в сгенерированном системой контроле.
Методы, доступные для переопределения в редакторах:
Методы, доступные для переопределения
Имя объекта
Имя метода
Контекст исполнения
Комментарий
Класс
afterApplyUpdatesCode
Серверный
Метод вызывается после применения изменений в данных объекта класса
beforeInsertCode
Серверный
Метод вызывается перед добавлением нового объекта класса
beforeModifyCode
Серверный
Метод вызывается перед изменением данных объекта класса
beforeDeleteCode
Серверный
Метод вызывается перед удалением объекта класса
autoCalcCondition
Серверный
doubleClickCode
Клиентский
autoFocusConditionCode
Клиентский
beforeInitCode
Клиентский
Метод вызывается перед инициализацией контрола в браузере
afterInitCode
Клиентский
Метод вызывается после инициализации контрола в браузере
Класс/DataProperty
beforeSetCode
Серверный
Метод вызывается перед установкой нового значения в свойство объекта класса
afterSetCode
Серверный
Метод вызывается после установки нового значения в свойство объекта класса
dynamicEditorCode
Клиентский
visibilityConditionCode
Клиентский
Метод, определяющий видимость свойства класса. Должен возвращать true или false
readOnlyConditionCode
Клиентский
Метод, определяющий доступность свойства класса для редактирования. Должен возвращать true или false
dynamicFilterCode
Клиентский
afterValueChangedCode
Клиентский
Метод вызывается после измнеения значения свойства класса (на клиенте)
validationCode
Клиентский
Метод вызывается после изменения значения свойства, для его валидации. Должен возвращать true или false
Действия классов
Действие класса
Одна из важных возможностей реализации бизнес-логики объектов - это действия классов. Набор действий задается в коллекции Actions каждого класса.
Действие может выполняться как в серверном так и в клиентском контексте. Платформа не накладывает ограничений на логику работы действий, таким образом в действии может быть заложена сложная логика обработки данных класса, взаимодействий с другими модулями и сервисами системы, а так же внешними интеграциями.
Детально работа действий будет рассмотрена в одной из следующих статей.
Обработчики классов
Редактор обработчика
Обработчики (Handlers) это объект пакета, который служит для обработки событий классов.
Обработчик предназначен для выполнения каких-либо действий во время операций insert/modify/delete в любых классах (в том числе из других пакетов, включая системные). Если обработчик возвращает строковое сообщение об ошибке либо false, операция отменяется.
Включенные обработчики активных пакетов выполняются в порядке заданного приоритета после родных методов класса (заданных в свойствах класса beforeInsertCode, beforeModifyCode, beforeDeleteCode).
Детальному обзору обработчиков посвящена следующая статья курса.
Разработка в файловой системе
Сервисы. Исходный код
В рамках платформы, допускается разработка в файловой системе сервисов пакета.
После создания сервиса и переактивации пакета, система сгенерирует исходный код и обвязку для сервиса. В разделе Services, в колонке sourceCode можно скачать архив исходных кодов для разработки сервиса.
Архив будет содержать набор классов-обёрток всех пакетов системы, а так же исходные коды сервиса.
Так как все классы-обёртки генерируются системой автоматически, не рекомендуется вносить в них изменения, кроме как для отладки при запуске сервиса на компьютере разработчика. Данный функционал используется для удобства разработки сервисов и применения функционала современных IDE.
Для разработки и отладки сервисов, необходимо наличие на компьютере разработчика NodeJS v14 и npm v6.
В качестве среды разработки подходит Visual Studio Code или любая другая современная IDE.
Разработке сервисов в дальнейшем курсе будет посвящено несколько отдельных статей.
Запуск TS-модулей и отладка
Справка сервисов
Инструкцию по запуску сервисов можно всегда найти в справке раздела Services.
Общий подход к работе с сервисами на локальной машине следующий:
Создать в пакете серверный сервис
Активировать пакет
Отключить микросервис в приложении Настройки, раздел Прочее. Данное действие необходимо для того, чтобы запущенный сервис не конфликтовал с системным. На время разработки, сервис поднимаемый платформой отключается, и его будет замещать отладочный экземпляр сервиса разработчиком
Включить в таблице Services отображение столбца sourceCode
Скачать и распаковать zip-архив
Микросервисы в приложении НастройкиУстановить на компьютер NodeJS v14 и npm v6, Visual Studio Code либо аналогичную IDE
В файле package.json в строке build:live указать актуальные адрес сервера, имя домена и токен. Доступы настраиваются в приложении Настройки, раздел Прочее, Каналы интеграции. Для отладки можно использовать доступ product_layer, однако рекомендуется создать отдельный токен доступа с необходимыми правами.
Выполнить npm ci
Выполнить npm start
Открыть папку src в IDE
Запущенный сервис контролируется утилитой nodemon, и при изменении исходных кодов, сервис будет автоматически перезапускаться, применяя необходимые изменения.
Более подробно про отладку и работу сервисов будет расказанно в дальнейших статьях курса.