Расширенные методы загрузки внешних библиотек в http-сервисах OneScript

Публикация № 836133 25.05.18

Разработка - OneScript

web http-сервисы OneScript 1Scroipt

В статье описаны расширенные методы загрузки внешних библиотек в http-сервисах OneScript на примере механизма фоновых заданий.

Введение

Наверное, нет смысла описывать преимуществ использования библиотек в программировании, а также выгод получаемых от использования переносимого кода, поэтому приступим к делу.

В настоящее время и OneScript и 1С:Предприятия имеют развитые средства для обеспечения повторного использования кода, однако они недостаточно совместимы между собой, что приводит к необходимости редактирования кода при переносе между этими платформами. Первым шагом, для улучшения переносимости кода между платформами, стала реализация концепции общих модулей в http-сервисах OneScript, однако опыт, полученный мною при написании демонстрационных конфигураций показал, что периодически возникают ситуации, когда различия в реализации концепции библиотек дают о себе знать, что приводит к непроизводительной трате ресурсов на адаптацию кода под разные платформы. В качестве примера, можно привести фрагмент кода, иллюстрирующий использование библиотеки фоновых заданий из этой статьи.

Вроде бы все неплохо, однако для доступа к менеджеру фоновых заданий, сначала необходимо создать экземпляр объекта соответствующего типа, в то время, как в 1С:Предприятие уже существует глобальное свойство с именем ФоновыеЗадания. Эти различия приводят к примерно следующим конструкциям:

 
// Создаем объект менеджера фоновых заданий. Только для OneScript

//<OneScript>

ФоновыеЗадания = Новый МенеджерФоновыхЗаданийWeb;

//<!OneScript>

 

В принципе ничего страшного, однако при активном использовании фоновых заданий это становится неудобным.

Дабы сократить количество подобных конструкций, в новой версии библиотеки, расширяющей возможности штатного механизма http-сервисов OneScript, был реализован механизм загрузки библиотек, выполненных по технологии внешних компонент OneScript, в глобальные свойства.

О том, что из этого получилось – читайте ниже.  

Как это работает

Процесс загрузки внешних библиотек происходит при начальной инициализации “движка” OneScript, который в дальнейшем будет выполнять Ваш код, поэтому рассмотрим его подробнее.

Инициализация происходит в несколько этапов:

Создание и инициализация “движка”

На этом этапе создается экземпляр среды выполнения, которая содержит стандартные функции OneScript и не содержит каких-либо внешних библиотек или компонентов.

Загрузка сборок внешних библиотек

Данный этап необходим, чтобы среда выполнения “увидела” типы, реализуемые внешними компонентами и могла их в дальнейшем использовать при компиляции и выполнении.

Создание глобальных свойств для общих модулей

На этом этапе, в экземпляре среды выполнения создаются пустые глобальные свойства с именами, соответствующими именам общих модулей. Данный этап необходим для разрешения зависимости между модулями при их дальнейшей компиляции.

Создание глобальных свойств для внешних библиотек

Собственно данный этап как и предыдущий необходим для того, чтобы среда выполнения могла скомпилировать код общих модулей и других частей приложения с учетом межмодульных и прочих зависимостей.

Компиляция и установка значений глобальных свойств общих модулей

На данном этапе происходит компиляция исходного кода общих модулей и скомпилированные объекты присваиваются соответствующим глобальным свойствам.

Создание и установка глобальных свойств внешних библиотек

На данном этапе производится создание экземпляров классов внешних библиотек и установка значений соответствующих глобальных свойств.

Сразу хочу отметить, что механизм загрузки общих модулей по большому счету является частным случаем загрузки внешних библиотек, однако с сцелью обеспечения обратной совместимости пока оставлен как есть.

Реализация

Как можно увидеть, для успешной загрузки необходимо обеспечить две функции - возврат списка имен свойств, а также функцию собственно создания экземпляров объектов, и установка значений соответствующих свойств.

Поскольку у нас могут быть уже готовые компоненты, написанные ранее, нам необходимо создать класс-загрузчик, который должен реализовывать нижеследующий интерфейс:

   

 
public interface ILibraryAsPropertiesLoader

{
    // Метод возвращает список имен глобальных свойств, которые будут созданы
    List<string> GetPropertiesNamesForInjecting(string info);
    // Метод создает экземпляры свойств и присваевает свойствам соответствующие значения
    void AssignPropertiesValues(HostedScriptEngine engine);

}

 

 

В случае фоновых заданий, код класса-загрузчика выглядит следующим образом:

  

 
public class BackgroundJobs : ILibraryAsPropertiesLoader
{
    public List<string> GetPropertiesNamesForInjecting(string info)
    {
        List<string> propNames = new List<string>();
        propNames.Add("ФоновыеЗадания");
        
        return propNames;
    }

    public void AssignPropertiesValues(HostedScriptEngine engine)
    {
        engine.EngineInstance.Environment.SetGlobalProperty("ФоновыеЗадания", new WebBackgroundJobsManagerImpl());
    }
}

Собственно все, что он делает – это создает экземпляр класса МенеджерФоновыхЗаданийWeb (WebBackgroundJobsManager) и устанавливает значение свойства ФоновыеЗадания равным ссылке на экземпляр класса.

В данном конкретном случае, класс-загрузчик был добавлен непосредственно в сборку, реализующую механизм фоновых заданий, однако, при отсутствии такой возможности (откомпилированный бинарный файл), Вы можете создать отдельную сборку для загрузки и использовать данный метод без изменения кода компоненты. Также следует отметить, что в сборках может быть несколько классов-загрузчиков.

Настройка и использование

Для использования внешних библиотек, а также возможности их загрузки, соответствующие сборки необходимо поместить в папку Bin, Вашего приложения. В дальнейшем предположим, что мы имеем две сборки (dll). Одну – содержащую внешнюю компоненту и вторую, которая реализует класс-загрузчик.

Сначала, необходимо включить сборку, которая содержит внешнюю компоненту в список сборок, которые будут загружены в среду выполнения. Это можно сделать, добавив нижеследующую строку в раздел appSettings, файла web.config Вашего web-приложения:

<add key="ИмяСборки" value="attachAssembly" />

Далее, нам необходимо дать приложению информацию о классах-загрузчиках. Это можно сделать, добавив строки следующего вида:

<add key="propertiesInjector;WebBackgroundJobs;OneScript.HTTPService.BackgroundJobs" value="" />

Где:

propertiesInjector – признак того, что информация относится к загрузчику свойств.

WebBackgroundsJob – имя сборки-загрузчика (в нашем конкретном случае загрузчик находится в сборке внешней компоненты).

OneScript.HTTPService.BackgroundJobs – имя типа класса-загрузчика.

value – произвольная строка, которая передается в функцию получения списка свойств.

После подключения сборки WebBackgroundJobs вышеуказанным способом, код использования этого механизма в OneScript становится практически идентичным коду платформы 1С:Предприятие:

 

 
// Запускаем фоновые задания на выполнение

МассивПараметров = Новый Массив;
МассивПараметров.Добавить(1);
МассивПараметров.Добавить("1.txt");

ФоновыеЗадания.Execute("Тестовый.ТестовоеФЗ", МассивПараметров, "Ключ1", "Описание1");

МассивПараметров = Новый Массив;
МассивПараметров.Добавить(1);
МассивПараметров.Добавить("2.txt");

ФоновыеЗадания.Execute("Тестовый.ТестовоеФЗ", МассивПараметров);

// Получаем все выполняющиеся задания
МассивЗаданий = ФоновыеЗадания.ПолучитьФоновыеЗадания();

// Ожидаем завершения выполнения запущеных заданий
ФоновыеЗадания.ОжидатьЗавершения(МассивЗаданий);

// Продолжаем выполнение

 

 То есть по сути он стал полностью переносимым на уровне синтаксиса. Поскольку определение класса внешней компоненты также известно системе, код в старом стиле будет также работоспособным.

Заключение

С использованием данного подхода можно реализовать модульное добавление необходимых объектов платформы 1С:Предприятие в OneScript, при этом обеспечив переносимость кода. В следующей статье планируется описать механизм обработок, созданный по данной схеме. Также, при необходимости, реализацию этих компонентов можно поменять (скажем, не нравится Вам текущая реализация механизма фоновых заданий), без необходимости пересборки остальных частей web-приложения.

P.S.

Хочу выразить благодарность Андрею Овсянкину за помощь при адаптации библиотек к платформе 1.0.20.

Специальные предложения

Оставьте свое сообщение

См. также

Получаем статистику по git-репозиторию в разрезе разработчиков

DevOps и автоматизация разработки Групповая разработка (Git, хранилище) OneScript Бесплатно (free)

Итак! Представим, что наступил момент, когда разработка через исходный код реализована на предприятии в полном объеме. Мы разрабатываем в EDT или конфигураторе (но выгружаем конфигурацию в исходный код), версионируем внешние отчеты и обработки и расширения, собираем релизы, проверяем код статическим анализом, в разработке царит гармония и мир. Красота! Но менеджерам этого мало, всегда хочется чего-то еще, и вот мне прилетает задача - дай статистику по вкладу в код каждого разработчика.

13.03.2023    1129    ardn    3    

25

Прокси хранилища 1С (IIS, OneScript)

Групповая разработка (Git, хранилище) OneScript DevOps и автоматизация разработки Платформа 1С v8.3 Россия Бесплатно (free)

Избавляемся от версионной зависимости, проверяем комментарии, вызываем веб-хуки, делаем красивые пути. И все это на привычном IIS и понятном OneScript.

08.12.2022    5389    kamisov    31    

84

OneScript на страже порядка на сервере тестовых баз данных

Администрирование СУБД OneScript Бесплатно (free)

Наводим порядок на сервере тестовых баз с помощью любимого инструмента - OneScript. Находим заброшенные базы на сервере MS SQL, определяем кандидатов на удаление.

14.06.2022    2372    ardn    23    

35

Графический интерфейс для сценарного языка OneScript и дизайнер форм в придачу

Работа с интерфейсом OneScript Бесплатно (free)

Графический интерфейс расширяет возможности и область применения скриптового языка. Перед вами ещё один вариант GUI для уже широко используемого и отлично зарекомендовавшего себя инструмента автоматизации OneScript. С доступным комплектом контролов можно написать полноценное приложение, со множеством форм и диалогов. Большое внимание уделено документации, есть примеры на каждое свойство/метод. И в придачу к формам написан дизайнер форм. Без него работу над GUI считал не законченной. Всё это для того, чтобы тратить минимум усилий для получения максимального результата.

08.03.2022    3140    ahyahy    4    

56

Мониторинг свободного места на диске с помощью OneScript

OneScript Мониторинг Бесплатно (free)

Скрипт, который проверяет объем свободного места на каждом диске и оповещает на почту о нехватке места.

30.05.2021    3398    info1i    19    

16

reperr - автоматическая регистрация ошибок для 8.3.17+

OneScript Управление проектом (PMO, EPM) Платформа 1С v8.3 Бесплатно (free)

Представляю вашему вниманию приложение для автоматической регистрации и обработки ошибок, которые возникают при работе в информационных базах на платформе 1С:Предприятие 8.3.17+

04.02.2021    7423    ovcharenko.di    11    

88

Смена паролей всем локальным пользователям Windows с помощью OneScript

OneScript Пароли Бесплатно (free)

Скрипт, который меняет пароли всем локальным пользователям Windows и сохраняет их в файле. Есть функция генерации пароля, можно задать длину пароля.

18.08.2020    2194    info1i    7    

4

Swagger для 1С.

OneScript WEB-интеграция Бесплатно (free)

Решение для формирования Swagger спецификаций, описывающих HTTP сервисы конфигураций 1С.

21.10.2019    24136    botokash    54    

233

Автоматическое сравнение-объединение баз данных с мини-конфигурацией

OneScript Платформа 1С v8.3 Бесплатно (free)

Представляю вашему вниманию скрипт на OneScript для автоматического сравнения-объединения по правилам ("мержевания") конфигураций нескольких баз с мини-конфигурацией.

14.10.2019    4252    artkor    2    

5

АИТП. Подсистема взаимодействия с рабочими серверами OneScript

OneScript Платформа 1С v8.3 Бесплатно (free)

В статье описан механизм взаимодействия конфигурации АИТП с рабочими серверами OneScript.

22.05.2019    6207    blackhole321    33    

21

Создание высокодоступной фермы рабочих серверов OneScript в ОС Centos 7

OneScript Бесплатно (free)

В статье описана методика создания высокодоступной фермы рабочих серверов OneScript, для конфигурации АИТП.

14.05.2019    5635    blackhole321    0    

13

Разворачиваем рабочий сервер OneScript для конфигурации АИТП

OneScript Платформа 1С v8.3 Бесплатно (free)

В статье описана методика развертывания рабочего сервера OneScript для конфигурации АИТП, на ОС CentOS 7.

09.05.2019    7254    blackhole321    0    

26

Хостим OneScript.Web приложение (heroku)

OneScript Бесплатно (free)

Развертывание oscript.web в heroku.

19.12.2018    7453    pallid    6    

19

Хостим OneScript.Web приложение

OneScript Бесплатно (free)

Удобная возможность для размещения своего OneScript.Web приложение, это завернуть его в docker. Остается вопрос: где разместить контейнер, сделать это можно на vscale или DO, но хочется упростить и не делать установку самого docker на хосте. Один из вариантов - это сервис now https://zeit.co/.

04.07.2018    8546    pallid    3    

29

Автоматизируй это!

OneScript Инструменты администратора БД Бесплатно (free)

Здравствуйте. Меня зовут Виталий Онянов. Я работаю в компании ФТО. Мы занимаемся внедрением и поддержкой ERP-систем, в том числе и на 1С. Сегодня я хотел бы поделиться нашим опытом автоматизации своих задач и рассказать о том, какие регламентные задания мы настраиваем на серверах наших клиентов. Возможно, кому-то покажется, что это совсем простые и очевидные вещи, но я в своей работе периодически вижу разработчиков, которые делают какие-то задачи руками изо дня в день, и мне бы хотелось донести до них мысль о том, что многие из этих задач можно и нужно автоматизировать.

02.07.2018    25388    Tavalik    12    

167

Добавляем онлайн-чат в web-приложение OneScript

OneScript Платформа 1С v8.3 Бесплатно (free)

В статье рассмотрено подключение онлайн-чата к web-приложению на основе http-сервисов OneScript

24.06.2018    8367    blackhole321    1    

19

Сказ про то, как я DevOps-ом занимался (OneScript, Deployka, Jenkins)

OneScript DevOps и автоматизация разработки Платформа 1С v8.3 Конфигурации 1cv8 ИТ-компания Бесплатно (free)

Решаем задачу: автоматизировать обновление тестовых баз 1С из хранилища конфигурации при появлении в нём новых изменений. Данная статья родилась в муках хождения по граблям и поиска безопасного форватора среди подводных камней. Изложение постарался представить в виде инструкции для новичка, в которой собрал всё, с чем пришлось столкнуться. Сам я не DevOps-ер, ни на что не претендую, просто делюсь опытом :)

17.06.2018    28211    stas_ganiev    37    

138

Макеты в http-сервисах OneScript

OneScript Платформа 1С v8.3 Бесплатно (free)

В статье описана библиотека, реализующая механизм макетов в http-сервисах OneScript, аналогично платформе 1С:Предприятие.

03.06.2018    9250    blackhole321    1    

10

Перечисления в http-сервисах OneScript

OneScript Платформа 1С v8.3 Бесплатно (free)

В статье описывается библиотека, реализующая механизм перечислений в http-сервиах OneScript, аналогичный механизму платформы 1С:Предприятие

03.06.2018    8696    blackhole321    13    

7

Обработки в http-сервисах OneScript

OneScript Бесплатно (free)

В статье описана библиотека, реализующая механизм обработок в http-сервисах OneScript.

25.05.2018    8291    blackhole321    0    

11

Сборка, тестирование, доставка приложения на onescript с помощью gitlab-ci

OneScript Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Сборка, тестирование, доставка приложения на onescript с помощью gitlab-ci на примере портирования на onescript функции daСклонение.

14.05.2018    15052    pallid    7    

38

OneScript в облаке или Развертываем http-сервис OneScript на хостинге

OneScript Бесплатно (free)

В статье описан процесс развертывания web-приложения, созданного на базе http-сервисов OneScript на бесплатном хостинге.

05.05.2018    10626    blackhole321    0    

24

TMSSQL - работа с базами данных MS SQL Server в скриптах на OneScript и из командной строки

OneScript Платформа 1С v8.3 Бесплатно (free)

Представляю вашему вниманию библиотеку TMSQL для работы с базами данных на MS SQL Server. Библиотека подключается в качестве модуля или класса в скрипты, написанные на OneScript, а также может работать как независимое консольное приложение.

26.04.2018    17099    Tavalik    22    

66

Развертывание http-сервиса OneScript на Raspberry Pi

OneScript Бесплатно (free)

В статье описан процесс настройки, а также процесс развертывания http-сервиса (web-приложения) OneScript на Raspbian (Raspberry Pi 2).

23.04.2018    12137    blackhole321    10    

27

Создаем свою библиотеку для OneScript

OneScript Платформа 1С v8.3 Бесплатно (free)

Как упаковать свою библиотеку в пакет? Что такое загрузчик и зачем он нужен? Как вообще создать свою библиотеку? Разбираемся на примере.

06.03.2018    27120    nixel    38    

183

Развертывание http-сервиса (web-приложения) OneScript на Ubuntu Server 16.04

OneScript Бесплатно (free)

В статье описан процесс настройки сервера, а также процесс развертывания http-сервиса (web-приложения) OneScript на Ubuntu Server 16.04

04.03.2018    17357    blackhole321    14    

46

Обзор имеющихся библиотек OneScript

OneScript Платформа 1С v8.3 Бесплатно (free)

Экосистема OneScript активно развивается. Количество пользователей данного интерпретатора и имеющихся библиотек неуклонно растет, количество решаемых проблем - тоже. Однако остро встает вопрос некоторой разобщенности и размазанности информации по имеющимся библиотекам, их функциональности и проблемам, которые они решают. Данная статья призвана навести порядок в этой теме.

14.11.2017    58495    nixel    89    

378

Начало работы с OneScript

OneScript Бесплатно (free)

Краткая инструкция по установке и начале работы с OneScript. Пишу потому что сам много шишек набил, пока нашел все инструменты. В статье рассмотрены: 1) Установка OneScript. 2) Установка редактора кода. 3) Настройка редактора кода под OneScript. 4) Запуск скриптов из редактора кода 5) Полезные ссылки

18.10.2017    66109    DmitrySinichnikov    55    

192

С чего начать разработку скриптов на OneScript? Первые шаги

OneScript Бесплатно (free)

После моего доклада на INFOSTART 2017 EVENT COMMUNITY ко мне многие обращались с таким вопросом: с чего начать разработку скриптов на OneScript? В этой статье привожу набор ссылок и некий порядок действий (как его вижу я) для людей, не знакомым с этим инструментом.

11.10.2017    39542    Tavalik    15    

165

Вебинтерфейс для OneScript и 1С

OneScript Платформа 1С v8.3 Россия Бесплатно (free)

Пример создания вебинтерфейса для OneScript с использованием библиотеки UfaScript.osb

30.06.2017    14891    andreosh    7    

27

OneScript и Ajax. POST-запрос и мои дальнейшие планы с фантазиями о будущем

OneScript Платформа 1С v8.3 Россия Бесплатно (free)

Моя библиотека для OneScript (версия 3.0 от 09.06.2017 см.GitHab UfaScript) https://github.com/andreosh/UfaScript теперь позволяет посылать POST-запросы на сервер без использования сторонних библиотек типа jquery.

09.06.2017    18579    andreosh    3    

12

Как сделать OneScript объектно-ориентированным

OneScript Россия Бесплатно (free)

Описание метода создания объектов на OneScript и метода передачи функции в качестве параметра.

16.04.2017    9102    andreosh    7    

10

Формы для 1script

OneScript Бесплатно (free)

В последнее время для задач, связанных с администрированием 1С или расширением возможностей конфигуратора, стал использовать 1script (onescript). Движок оказался очень удобным и приятным, но чего-то не хватало, а именно работы с формами. В ряде скриптов использовать GUI было бы предпочтительней параметров командной строки, тем более если с этим работать конечному пользователю.

01.08.2016    31644    ret-Phoenix    103    

152