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

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

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

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

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

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

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

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

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

  • entity_class – тип интеграции (например, billing_customer, crm_account, self_care_customer, customer_care_portal или любое другое строковое значение);

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

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

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

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

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

Хелперы

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

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

  return response(params)
end

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

  return response(params)
end

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

  return response(params)
end

private

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

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

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

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

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

def with_user_identifier(parameters)
  return parameters.merge(
    user_identifier: session[:email] # email of current user
  )
end     
  
def allow_params(*allowed_params)
  return 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) запроса.

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

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

 

# Buttons controller
# GET /widget/buttons
def list_buttons(params)
  return get_bpm_backend('buttons', allow_params('entity_class', 'entity_type', 'entity_code'))
end

# POST /widget/buttons
def start_process(params)
  return post_bpm_backend('buttons', allow_params('entity_class', 'entity_type', 'entity_code', 'bp_code', 'initial_variables'))
end


# Tasks controller
# GET /widget/tasks
def list_tasks(params)
  return get_bpm_backend('tasks', allow_params('entity_class', 'entity_code'))
end

# GET /widget/tasks/:id/form
def fetch_task_form(params)
  return get_bpm_backend('tasks/#{params[:id]}/form', allow_params('entity_class', 'id'))
end

# PUT /widget/tasks/:id/form
def save_task_form(params)
  return put_bpm_backend('tasks/#{params[:id]}/form', allow_params('entity_class', 'form_data', 'id'))
end

# GET /widget/tasks/:id/lookup
def fetch_lookup_value(params)
  return get_bpm_backend('tasks/#{params[:id]}/lookup', allow_params('entity_class', 'name', 'q', 'id'))
end


# Users controller
# GET /widget/users/check
def check_user_access(params)
  return get_bpm_backend('users/check')
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 = {
      entity_class: 'crm_account',
      entity_type: 'customer',
      container_id: 'hbw-container', // Совпадает с идентификатором <div> контейнера
      locale: 'en'
    };
    var entityId = ...; // Здесь должен быть указан уникальный идентификатор сущности, например customerId

    window.hbw_widget = new (modulejs.require('HBW'))({
      widgetContainer: `#${config.container_id}`,
      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