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 3 Next »

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

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

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

  • hbw_url – адрес HOMS(http://localhost:3002);

  • hbw_assets_path – адрес статичесаких файлов HOMS;

  • hbw_login – fs (user@example.com);

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

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

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

  • bp_code – код заказа;

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

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

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

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

  • методы, которые делают GET, POST и PUT запросы в бэкенд HOMS:
    • параметры, которые передаются в GET запросы должны задаваться в заголовке запроса;
    • параметры, которые задаются в 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:      App[:config]['system']['hbw_url'],
            login:    App[:config]['system']['hbw_login'],
            password: App[:config]['system']['hbw_token']
}

  • метод, в котором ко всем параметрам запросов будут добавляться идентификатор пользователя
def with_user_identifier(parameters)
        parameters.merge(
          'user_identifier' => Lib::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
BPMConnector.call.get_request_bpm_backend('buttons', allow_params('entity_class', 'entity_type', 'entity_code'))

 

 

    • метод, который начинает бизнес-процесс 

 

 

post /widget/buttons
BPMConnector.call.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
BPMConnector.call.get_request_bpm_backend('tasks', allow_params('entity_class', 'entity_code'))


    • получение формы текущего заказа –  GET запрос c параметрами entity_classid:
get /widget/tasks/:id/form
BPMConnector.call.get_request_bpm_backend("tasks/#{params[:id]}/form", allow_params('entity_class', 'id'))

 

    • обновление формы текущего заказа – put запрос с параметрами entity_classform_dataid
put /widget/tasks/:id/form
BPMConnector.call.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
BPMConnector.call.get_request_bpm_backend("tasks/#{params[:id]}/lookup", allow_params('entity_class', 'name', 'q', 'id'))


 

  • метод для проверки прав пользователя.
/widget/users
BPMConnector.call.get_request_bpm_backend('users/check')

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

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

 

<script type="text/javascript" src="<%= '\<\%\= hbw_assets_path \%\>' %>assets/hbw.js"></script>
<link rel="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