Для интеграции виджета HBW во внешние системы необходимо:
- сделать прокси-контроллеры, через которые встроенный виджет будет делать запросы в бэкенд HOMS с базовой аутентификацией (используя пароль и логин из конфига);
- встроить JS виджета и отрендерить.
...
Конфигурируемые параметры
Данные параметры используются для подключения к HydraOMS:
hbw_url
– адрес HOMS (например, http://localhost:3002, указывается в конфиге3000);
hbw_assets_path
– адрес статичесаких статических файлов HOMS (указывается в конфигеобычно совпадает с hbw_assets_path
);
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
– уникальный идентификатор или код для создания заказасущности;
bp_code
– код типа бизнес-процесса;
initial_variables
– дополнительные параметры, с которыми создается бизнес-процесс.
Прокси-контроллеры
Прокси-контроллер служит прослойкой между внешней системой и HOMS, где задаются необходимые параметры для работы с заказами и идентификации пользователя.
Необходимо разработать следующие методы:
...
Хелперы
Методы, которые выполняют отправку GET,
POST и PUT
...
запросов к бэкенду HOMS:
...
...
...
Code Block |
---|
def get_request_bpm_backend(path, parameters = {})
params = request_params(path).merge(
method: :get,
headers: {
params: payload: parameters
}
)
rest_rack_return response(params)
end
def post_request_bpm_backend(path, parameters = {})
params = request_params(path).merge(
method: :post,
payload: parameters
)
rest_rack_return response(params)
end
def put_request_bpm_backend(path, parameters = {})
params = request_params(path).merge(
method: :put,
payload: parameters
)
rest_rack_return response(params)
end
private
def rest_rack_response(params)
response = RestClient::Request.execute(params)
return {
[code: response.code,
headers: response.headers,
[response.body]] body: response.body
end }
end
def request_params(path)
return {
url: build_bpm_widget_path(path),
user: configuration[:login],
password: configuration[:password],
headers: {
} 'Content-Type': 'application/json'
end }
}
end
def build_bpm_widget_path(path = '')
return URI.join(configuration[:url], '/widget/', path).to_s
end
def configuration
end |
где
Code Block |
---|
configuration:return {
url: "http://localhost:3002/3000", (# hbw_url),
login: "user@example.com", login: # user@example.com (hbw_login),
password: "renewmeplease" password: renewmeplease ( # hbw_token)
} |
- метод, в котором ко всем параметрам запросов будет добавляться идентификатор пользователя, который взаимодействует с HOMS
Code Block |
---|
}
end
def with_user_identifier(parameters)
return parameters.merge(
'user_identifier' => GetSession.(params[:payload][:token])[:session]: session[:email] # email of current user
)
end
def allow_params(*allowed_params)
return with_user_identifier(params.slice(*allowed_params))
end |
...
Параметры, которые
...
метод, который делает запрос для получения (GET) кнопок для начала бизнес-процесса, необходимые параметры: entity_class, entity_type, entity_code
...
...
передаются в GET
запросы должны задаваться в url запроса, например:
GET /widget/tasks?user_identifier=user@example.com&entity_type=&entity_code=ORD-6&entity_class=billing_customer
;
Параметры, которые задаются в POST и PUT
запросы должны задаваться в теле (body) запроса.
Прокси-контроллеры
Прокси-контроллеры служитат прослойкой между внешней системой и виджетом HydraOMS. Они проверяют параметры, переданные из виджета, и передает их в бэкенд HydraOMS, добавляя к ним заголовок аутентификации и другие данные, необходимые для работы стыковки.
Code Block |
---|
# 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')) |
...
- методы для работы с формами заказа
- получение всех заказов –
GET
запрос c параметрами entity_class
, entity_code
:
...
...
end
# Tasks controller
# GET /widget/tasks
def list_tasks(params)
return get_bpm_backend('tasks', allow_params('entity_class', 'entity_code')) |
...
- получение формы текущего заказа –
GET
запрос c параметрами entity_class
, id
:
...
end
# GET /widget/tasks/:id/form |
...
def fetch_task_form(params)
return get_ |
...
...
'tasks/#{params[:id]}/form |
...
', allow_params('entity_class', 'id')) |
...
- обновление формы текущего заказа – put запрос с параметрами
entity_class
, form_data
, id
...
end
# PUT /widget/tasks/:id/form |
...
def save_task_form(params)
return put_ |
...
...
'tasks/#{params[:id]}/form |
...
', allow_params('entity_class', 'form_data', 'id')) |
...
...
end
# GET /widget/tasks/:id/lookup |
...
def fetch_lookup_value(params)
return get_ |
...
...
'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
Необходимо включить в HTML страницы внешней системы Ниже приведен пример встраивания виджета в веб-страницу. После загрузки JS и CSS виджета: из HydraOMS выполняется инициализация виджета данными приложения и сущности, после чего вызывается функция render().
js | xml | title | HTML page example |
---|
|
<html>
<head>
<title>HydraOMS Widget</title>
<script type="text/javascript" src=" |
<%= '\<\%\= \%\>' %>assets/}/assets/hbw.js"></script>
<link |
reluser_identifierrel="stylesheet" type="text/css" href=" |
<%= '\<\%\= \%\>' %>assets/
Добавить на страницу <div> с уникальным ID, например, bpmWidgetContainer
, чтобы в нём отрендерился виджет.
Вызвать функцию render
у объекта виджета:
Code Block |
---|
|
this.</head>
<body>
<div id='hbw-container'></div>
<script type="text/javascript">
var config = {
entity_class: 'crm_account',
entity_type: 'customer',
container_id: 'hbw-container',
locale: 'en'
};
var entityId = ...; // Set here id or other uniq value of entity, like customerId
window.hbw_widget = new (modulejs.require('HBW'))({
|
thiswidgetContainerId 'your_' 'operator' id i18nlanguage tokencookies.get('token'),variablessomeInitialVariable: { // You can pass other useful information to process initial variables
|
id:{ `${id}` ,,,);
window.hbw_widget.render();
|
} // If you use some kind ot SPA, call this before page unmount:
|
});this.renderunmountWidget();
</script>
</body>
</html>
|