This article is in English HBW widget integration manual
Конфигурируемые параметры
Данные параметры используются для подключения приложения к 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>
<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>