...
- сделать прокси-контроллеры, через который встроенный виджет будет делать запросы в бэкенд 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
запросы должны задаваться в тело запроса.
- параметры, которые передаются в
Code Block |
---|
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 |
где
Code Block |
---|
configuration: {
url: App[:config]['system']['hbw_url'],
login: App[:config]['system']['hbw_login'],
password: App[:config]['system']['hbw_token']
} |
- метод, в котором ко всем параметрам запросов будут добавляться идентификатор пользователя
Code Block |
---|
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
(идентификатор интеграции),entity_type
(),entity_code
– уникальный код для создания заказа
(ссылка)
делать запрос (ссылка)
tasks
get tasks (ссылка)
получать форму – get 'tasks/
Code Block | ||
---|---|---|
| ||
BPMConnector.call.get_request_bpm_backend('buttons', allow_params('entity_class', 'entity_type', 'entity_code')) |
- метод, который начинает бизнес-процесс
Code Block | ||
---|---|---|
| ||
BPMConnector.call.post_request_bpm_backend('buttons', allow_params('entity_class', 'entity_type', 'entity_code', 'bp_code', 'initial_variables'))
|
методы для работы с формами заказа
- получение всех заказов –
GET
запрос c параметрамиentity_class
,entity_code
:
Code Block | ||
---|---|---|
| ||
BPMConnector.call.get_request_bpm_backend('tasks', allow_params('entity_class', 'entity_code'))
|
- получение формы текущего заказа –
GET
запрос c параметрамиentity_class
,id
:
- получение формы текущего заказа –
Code Block | ||
---|---|---|
| ||
BPMConnector.call.get_request_bpm_backend("tasks/#{params[:id]}/form", allow_params(' |
...
entity_class
id
(ссылка)
...
entity_class', 'id'))
|
- обновление формы текущего заказа – put запрос с параметрами
entity_class
,form_data
,id
- обновление формы текущего заказа – put запрос с параметрами
Code Block | ||
---|---|---|
| ||
BPMConnector.call.put_request_bpm_backend("tasks/#{params[:id]}/form |
...
", allow_params('entity_class |
...
', 'form_data', 'id')) |
получение информации для лукапов –
GET
запрос с параметрамиentity_class
, name,q
,id
(ссылка)
...
Code Block | ||
---|---|---|
| ||
BPMConnector.call.get_request_bpm_backend("tasks/#{params[:id]}/lookup |
...
(ссылка)
...
users
проверять пользователя (ссылка)
...
", allow_params('entity_class', 'name', 'q', 'id'))
|
- метод для проверки прав пользователя.
Code Block | ||
---|---|---|
| ||
BPMConnector.call.get_request_bpm_backend('users/check') |
Встраивание JS
Включить в HTML страницы внешней системы JS и CSS виджета:
Code Block | ||
---|---|---|
| ||
<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">
|
render
у объекта виджета:Code Block | ||||
---|---|---|---|---|
| ||||
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();
|