...
Info |
---|
This article is in English HBW widget integration manual |
Общая схема
- При открытии страницы приложения с виджетом, приложение-хост, используя public_url из конфига, запросит фронт виджета. Для аутентификации используются логин и токен из конфига
- Когда загрузится фронт виджета, он будет посылать запросы с url вида '/widget/...' в ЛК, запросы такого вида принимаются прокси-контроллером (hbw_controller.rb) и перенаправляются в бекэнд виджета.
Конфигурируемые параметры
...
Code Block | ||
---|---|---|
| ||
def request_widget_backend(path, method = :get, parameters = {}) request_params = { method: method, url: build_bpm_widget_path(path), user: bpm_config.hbw_login, password: bpm_config.passwordhbw_token } if method == :get request_params.merge!({headers: {params: parameters.merge(bpm_parameters)}}) else request_params.merge!({payload: parameters.merge(bpm_parameters)}) end RestClient::Request.execute(request_params) end private def bpm_parameters { user_identifier: user_identifierbpm_config[:hbw_login], entity_type: params[:entity_type], entity_code: params[:entity_code], entity_class: params[:entity_class] } end def build_bpm_widget_path(path = '') URI.join(bpm_config.url, '/widget/', path).to_s end def request_params(path) { url: build_bpm_widget_path(path), user: configuration[:login], password: configuration[:password], headers: { 'Content-Type': 'application/json' } } end def bpm_config YourApplication::Config.widgets.bpm end |
...
Code Block | ||
---|---|---|
| ||
# 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()
.
...