Как из внешней обработки быстро сделать расширение?

Несколько популярных вопросов:

  1. Для чего это нужно? Для того, чтобы начать зарабатывать в нашем сервисе.
  2. Почему нельзя использовать обработку, а нужно именно расширение? Обработку нужно устанавливать в каждую область данных и контролировать обновление при выходе новой версии. Мы в своем сервисе используем подключение расширений на всю базу данных, т.е. расширение устанавливается один раз и действует сразу для всех пользователей. 
  3. Если расширение устанавливается сразу для всех пользователей, то как контролировать то, чтобы его возможности использовали только те пользователи, которые произвели оплату? Все просто. Для этого мы реализовали методы биллинга, которые возвращают ответ, допустимо пользователю использовать ваш функционал или нет. Вам остается встроить эти вызовы в необходимые места. Это мы рассмотрим ниже.

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

Здесь файл начальной обработки.

Переходим к созданию расширения. Будет всего 5 простых шагов.

Создаем новое расширение. 

Обязательно задаем имя и префикс расширения, который используем для всех новых (не заимствованных) объектов метаданных расширения. Они должно быть уникальными, чтобы не могли пересечься с другими расширениями. Например, недопустимо:  имя Расширение1 или префикс расш1 и т.д. Корректно: имя ExampleExtention, префикс EE_.

Например,


Обязательно заполняем версию расширения и информацию о поставщике. Также желательно заполнить краткую и подробную информацию.


Режим совместимости расширения должен быть такой же, как и у основной конфигурации.

Встраиваем обработку в расширение. 

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


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


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




Либо в существующую подсистему



При вызове форм обработки рекомендуем получать префикс имени форм при открытии основной формы обработки и обращаться к формам по префиксу.

Пример: ОткрытьФорму(ПрефиксИмениФорм + ИмяФормы);


&НаКлиенте

Функция ПолучитьПрефиксИмениФорм()

СимволТочка = ".";

ПозицияТочки = СтрДлина(ЭтаФорма.ИмяФормы);

Пока Сред(ЭтаФорма.ИмяФормы, ПозицияТочки, 1) <> СимволТочка Цикл 

ПозицияТочки = ПозицияТочки - 1; 

КонецЦикла; 

ПрефиксИмениФорм = Лев(ЭтаФорма.ИмяФормы, ПозицияТочки);

Возврат ПрефиксИмениФорм;

КонецФункции 

Встраиваем в расширение функции проверки биллинга. 

Это самый важный шаг. Это позволит Вам контролировать запуск обработки пользователями, оплатившими функционал. Пример функций можно взять в примере расширения, опубликованного в данной статье. Шаблон расширения можно скачать ( Скачать Шаблон расширения, CFE, 36.0 КБ ).

Скопируем модуль EE_Биллинг из примера расширения и поменяем в нем префикс. Также для выполнения вспомогательных функций нам понадобится модуль EE_УниверсальныеФункцииКлиентСервер. Также меняем у него префикс на префикс, используемый в нашем расширении.


Также для проверки работы биллинга скопируем обработку EE_Биллинг и также поменяем префикс.


В скопированном модуле QE_Биллинг заменим вызовы общего модуля  EE_УниверсальныеФункцииКлиентСервер на QE_УниверсальныеФункцииКлиентСервер. Также в форме обработки поменяем функции вызова биллинга, т.к. у нас поменялся префикс общего модуля


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

Если кратко, то идентификаторы для проверки можно получить в ЛК в разделе партнерам при редактировании сервиса:


Проверка подключения услуги:


Обработка приведена для примера. Вызова из модуля QE_Биллинг мы можете использовать по своему усмотрению. Допустим, мы можем использовать вызовы перед запуском обработки в процедуре ПриСозданииНаСервере и устанавливать Отказ = Истина в случае, если сервис или услуга не активированы.

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

Если Метаданные.ОбщиеМодули.Найти ("CTSM_EfsolУниверсальныеФункцииКлиентСервер") <> Неопределено Тогда

ОбщийМодуль_CTSM_EfsolУниверсальныеФункцииКлиентСервер = ОбщегоНазначения.ОбщийМодуль("CTSM_EfsolУниверсальныеФункцииКлиентСервер");

ТокенCore = ОбщийМодуль_CTSM_EfsolУниверсальныеФункцииКлиентСервер.ПолучитьТокенПоЛогину(Логин);

Возврат ТокенCore;

КонецЕсли;

Т.к. модуль CTSM_EfsolУниверсальныеФункцииКлиентСервер  доступен только в продукционной среде, то в тестовом примере для получения токена используется дополнительная пара логин и пароль, по которым и получается токен. 

Далее по логину (при использовании токена) мы получаем необходимые данные по биллингу.

Таким образом, получается, что в тестовой среде мы должны в процедурах проверки биллинга использовать 5 параметров: ИД сервиса или услуги, Логин, ТекстОшибки, ЛогинДляПолученияТокена, ПарольДляПолученияТокена.


А в продукционной среде мы должны использовать всего 3 параметра: ИД сервиса или услуги, Логин, ТекстОшибки. Например, в процедуре ПриСозданииНаСервере :


либо перед выполнением какой-либо процедуры или функции


Реализуем функции автотестирования нашего решения. 

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

Для этого скопируем модуль EE_AutoTest, обработку EE_Тестирование  и http-сервис EE_AutoTest (он нужен для вызова функций автотеста через интернет) из шаблона. Аналогично заменим префиксы этих объектов на префиксы расширения и поменяем внутри вызовы процедур. Количество и состав выполняемых тестов вы определяете сами. Обработка показывает лишь пример реализации. Если вам тесты не нужны, то достаточно в процедурах запуска тестов возвращать ОК.

Отправляем расширение на аудит. 

После проведения аудита пользователи смогут использовать Ваш функционал.

Пример готового расширения можно скачать ( Скачать Шаблон расширения, CFE, 36.0 КБ ).

Комментарии для сайта Cackle