Page tree
Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 7 Next »

Для интеграции виджета HBW во внешние системы необходимо:

  • сделать прокси-контроллеры, через которые встроенный виджет будет делать запросы в бэкенд HOMS с базовой аутентификацией (используя пароль и логин из конфига);
  • встроить JS виджета и отрендерить.

Значение параметров запросов:

  • hbw_url – адрес HOMS (http://localhost:3002, указывается в конфиге);

  • hbw_assets_path – адрес статичесаких файлов HOMS (указывается в конфиге);

  • hbw_login – логин (user@example.com, указывается в конфиге);

  • hbw_token – токен (renewmeplease, указывается в конфиге);
  • entity_class – идентификатор интеграции (указывается в конфиге);

  • entity_type – тип заказа (указывается в конфиге или в месте монтирования);

  • entity_code – уникальный код для создания заказа;

  • bp_code – код бизнес-процесса;

  • initial_variables – параметры, с которыми создается бизнес-процесс.

Прокси-контроллеры

Прокси-контроллер служит прослойкой между внешней системой и HOMS, где задаются необходимые параметры для работы с заказами и идентификации пользователя.

Необходимо разработать следующие методы:

  • методы, которые делают GET, POST и PUT запросы в бэкенд HOMS:
    • параметры, которые передаются в GET запросы должны задаваться в url запроса, например,

      GET /widget/tasks?user_identifier=user@example.com&entity_type=&entity_code=ORD-6&entity_class=billing_customer; 

    • параметры, которые задаются в POST и PUT запросы должны задаваться в теле запроса.
      def get_request_bpm_backend(path, parameters = {})
        params = request_params(path).merge(
          method:  :get,
          headers: {
            params: parameters
          }
        )

        rest_rack_response(params)
      end

      def post_request_bpm_backend(path, parameters = {})
        params = request_params(path).merge(
          method:  :post,
          payload: parameters
        )

        rest_rack_response(params)
      end

      def put_request_bpm_backend(path, parameters = {})
        params = request_params(path).merge(
          method:  :put,
          payload: parameters
        )

        rest_rack_response(params)
      end

      private

      def rest_rack_response(params)
        response = RestClient::Request.execute(params)

        [response.code, response.headers, [response.body]]
      end

      def request_params(path)
        {
          url:      build_bpm_widget_path(path),
          user:     configuration[:login],
          password: configuration[:password]
        }
      end

 
      def build_bpm_widget_path(path = '')
        URI.join(configuration[:url], '/widget/', path).to_s
      end

где 

configuration: {
            url:      "http://localhost:3002/" (hbw_url),
            login:    user@example.com (hbw_login),
            password: renewmeplease (hbw_token)
}
  • метод, в котором ко всем параметрам запросов будет добавляться идентификатор пользователя, который взаимодействует с HOMS
def with_user_identifier(parameters)
        parameters.merge(
          'user_identifier' => GetSession.(params[:payload][:token])[:session][:email]
        )
end      
 
def allow_params(*allowed_params)
        with_user_identifier(params.slice(*allowed_params))
end
  • методы, которые работают с кнопками начала бизнес-процесса
    • метод, который делает запрос для получения (GET) кнопок для начала бизнес-процесса, необходимые параметры: entity_class, entity_type, entity_code

       

get /widget/buttons
get_request_bpm_backend('buttons', allow_params('entity_class', 'entity_type', 'entity_code'))
    • метод, который начинает бизнес-процесс 
post /widget/buttons
post_request_bpm_backend('buttons', allow_params('entity_class', 'entity_type', 'entity_code', 'bp_code', 'initial_variables'))

 

  • методы для работы с формами заказа
    • получение всех заказов – GET запрос c параметрами entity_classentity_code:
get /widget/tasks
get_request_bpm_backend('tasks', allow_params('entity_class', 'entity_code'))
    • получение формы текущего заказа –  GET запрос c параметрами entity_classid:
get /widget/tasks/:id/form
get_request_bpm_backend("tasks/#{params[:id]}/form", allow_params('entity_class', 'id'))
    • обновление формы текущего заказа – put запрос с параметрами entity_classform_dataid
put /widget/tasks/:id/form
put_request_bpm_backend("tasks/#{params[:id]}/form", allow_params('entity_class', 'form_data', 'id'))
    • получение информации для лукапов – GET запрос с параметрами entity_class, name, qid

get /widget/tasks/:id/lookup
get_request_bpm_backend("tasks/#{params[:id]}/lookup", allow_params('entity_class', 'name', 'q', 'id'))
    • метод для проверки прав пользователя.
/widget/users
get_request_bpm_backend('users/check')

Встраивание JS

Необходимо включить в HTML страницы внешней системы JS и CSS виджета:

 

<script type="text/javascript" src="<%= '\<\%\= hbw_assets_path \%\>' %>assets/hbw.js"></script>
<link reluser_identifier="stylesheet" type="text/css" href="<%= '\<\%\= hbw_assets_path \%\>' %>assets/hbw.css">

 

Добавить на страницу <div> с уникальным ID, например, bpmWidgetContainer, чтобы в нём отрендерился виджет.

 

Вызвать функцию render у объекта виджета:
 
js code
this.widget = new (modulejs.require('HBW'))({
        widgetContainer: `#${this.widgetContainerId}`,
        widgetPath: '/widget',
        entity_class: 'your_entity_class',
        entity_type: 'operator',
        entity_code: `${id}`,
        locale: i18n.language,
        payload: {
          token: cookies.get('token'),
          variables: {
            id: {
              value: `${id}`,
              type: 'string',
            },
          },
        },
      });

this.widget.render();


  • No labels