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

This article is in English HBW widget integration manual

Конфигурируемые параметры

Данные параметры используются для подключения приложения к HydraOMS:

  • hbw_url – адрес HydraOMS (например, http://homs:3000);

  • hbw_assets_path – адрес статических файлов HydraOMS (обычно совпадает с hbw_url);

  • hbw_login – логин (например, user@example.com);

  • hbw_token – токен (например, renewmeplease).

Фиксированные параметры

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

  • entity_class – тип интеграции (например, billing_customer (интеграция с ООС Гидры), self_care_customer (интеграция с ЛК Гидры), customer_care_portal (интеграция с Порталом обслуживания абонентов Гидры) или любое строковое значение, используемое в сторонней системе);

  • entity_type – тип сущности (например, customer, account, operator или любое другое строковое значение).

Динамические параметры

Данные параметры описывают запускаемый бизнес-процесс:

  • entity_code – уникальный идентификатор или код сущности;

  • user_identifier - email пользователя, от имени которого запускается бизнес-процесс (обычно совпадает с hbw_login);
  • initial_variables – дополнительные параметры, с которыми будет запущен бизнес-процесс.

Хелперы

Методы, которые выполняют отправку GET, POST и PUT запросов к бэкенду HydraOMS:

def request_bpm_backend(path, method=:get, parameters={})
  request_params = {
      method:   method,
      url:      build_bpm_widget_path(path),
      user:     bpm_config.login,
      password: bpm_config.password
  }

  if method == :get
    request_params.merge!({headers: {params: parameters.merge(bpm_parameters)}})
  else
    request_params.merge!({payload: parameters.merge(bpm_parameters)})
  end

  response(params)
end

private

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

  {
    code: response.code,
    headers: response.headers,
    body: response.body
  }
end

def request_params(path)
  {
    url:      build_bpm_widget_path(path),
    user:     configuration[:login],
    password: configuration[:password],
    headers: {
      'Content-Type': 'application/json'
    }
  }
end

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

def configuration
  {
    url:      "http://homs:3000", # hbw_url
    login:    "user@example.com", # hbw_login
    password: "renewmeplease"     # hbw_token
  }
end

def with_user_identifier(parameters)
  parameters.merge(
    user_identifier: session[:email] # email of current user
  )
end     
  
def allow_params(*allowed_params)
  with_user_identifier(params.slice(*allowed_params))
end

Параметры GET запросов должны передаваться в query-части url, например: 

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

Параметры POST и PUT запросов должны задаваться в теле (body) запроса. Тело запроса передается с content-type = application/json.

Результат из HydraOMS приходит с content-type = application/json.

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

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

 

# ANY match 'widget/*path'
def proxy
  method = request.method.downcase.to_sym
  result = request_bpm_backend(params[:path], method, permitted_params)

  if method == :put
    if result
      head :no_content
    else
      head :bad_request
    end
  else
    render json: result
  end
end

private

def permitted_params
  params.symbolize_keys.except(*service_params)
end

def service_params
  %i[controller action path format]
end

 

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

Ниже приведен пример встраивания виджета в веб-страницу. После загрузки JS и CSS из HydraOMS выполняется инициализация виджета данными приложения и сущности, после чего вызывается функция render().

 

Пример HTML страницы
<html>
<head>
  <title>HydraOMS Widget</title>
  <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">
</head>
<body>
  <div class="hbw-styles">
   <div id='hbw-container'>
   </div>
  </div>
  <script type="text/javascript">
    var config = {
      widgetURL: 'http://url.to.homs:port', // required to establish WebSocket connection
      entity_class: 'crm_account',
      entity_type: 'customer',
      container_id: 'hbw-container', // Совпадает с идентификатором <div> контейнера
      locale: {
		code: 'en', // locale code
		dateTimeFormat: 'MM/DD/YYYY' // date-fns fomat
	  }
    };
    var entityId = ...; // Здесь должен быть указан уникальный идентификатор сущности, например customerId

    window.hbw_widget = new (modulejs.require('HBW'))({
      widgetContainer: `#${config.container_id}`,
	  widgetURL: config.widgetURL,
      widgetPath: '/widget',
      entity_class: config.entity_class,
      entity_type: config.entity_type,
      entity_code: `${entityId}`,
      locale: config.locale,
      payload: {
        variables: {
          someInitialVariable: { // Также возможно установить дополнительные параметры, которые будут переданы при старте процесса
            value: 'initialValue',
            type: 'string'
          }
        }
      }
    });

    window.hbw_widget.render();

    // Если виджет встраивается в SPA (Single Page Appllication), необходимо вызвать следующую функцию перед закрытием текущей страницы.
    // window.hbw_widget.unmountWidget();
  </script>
</body>
</html>


 

  • No labels