Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Info

This article is in English HBW widget integration manual

Общая схема

Image Added

  1. При открытии страницы приложения с виджетом, приложение-хост, используя public_url из конфига, запросит фронт виджета. Для аутентификации используются логин и токен из конфига
  2. Когда загрузится фронт виджета, он будет посылать запросы с url вида '/widget/...' в ЛК, запросы такого вида принимаются прокси-контроллером (hbw_controller.rb) и перенаправляются в бекэнд виджета.

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

...

Code Block
languageruby
def request_bpmwidget_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
 
 response(params) end

private

def response(params)
  response = RestClient::Request.execute(request_params)
end
 
{private
 
  code: response.code,
    headers: response.headers,
    body: response.body
  }
end

def request_params(path)def bpm_parameters
  {
    urluser_identifier:      build_bpm_widget_path(path)config[:hbw_login],
    userentity_type:     configurationparams[:loginentity_type],
    passwordentity_code: configuration    params[:passwordentity_code],
    headersentity_class: {       'Content-Type': 'application/json'
    }
  }
end

params[:entity_class]
  }
end
 
def build_bpm_widget_path(path = '')
  URI.join(configuration[:url]bpm_config.url, '/widget/', path)
end

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

def with_user_identifier(parameters)
  parameters.merge(
    user_identifier: session[:email] # email of current user
  )
end     
  
def allow_params(*allowed_params)
  with_user_identifier(params.slice(*allowed_params)).to_s
end
 
def bpm_config
  YourApplication::Config.widgets.bpm
end

Параметры GET и DELETE запросов должны передаваться в query-части url, например: 

...

 

Code Block
languageruby
# 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().

...