Page tree

Versions Compared

Key

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

...

Данные параметры используются для подключения приложения к HydraOMS:

  • hbw_url – адрес HOMS адрес HydraOMS (например, http://localhost:3000);

  • hbw_assets_path – адрес статических файлов HOMS файлов HydraOMS (обычно совпадает с hbw_assets_pathurl);

  • hbw_login – логин (например, user@example.com);

  • hbw_token – токен (например, renewmeplease).

...

  • entity_code – уникальный идентификатор или код сущности;

  • initial_variables – дополнительные параметры, с которыми создается будет запущен бизнес-процесс.

Хелперы

Методы, которые выполняют отправку GET, POST  POST и PUT запросов PUT запросов к бэкенду HOMSHydraOMS:

Code Block
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, добавляя к ним заголовок аутентификации и другие данные, необходимые для работы стыковки.

 

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'))
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 и CSS из HydraOMS выполняется инициализация виджета данными приложения и сущности, после чего вызывается функция render().

 

Code Block
languagexml
titleПример HTML page exampleстраницы
<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 id='hbw-container'></div>
  <script type="text/javascript">
    var config = {
      entity_class: 'crm_account',
      entity_type: 'customer',
      container_id: 'hbw-container', // Совпадает с идентификатором <div> контейнера
      locale: 'en'
    };
    var entityId = ...; // SetЗдесь hereдолжен idбыть orуказан otherуникальный uniq value of entityидентификатор сущности, likeнапример 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: { // YouТакже canвозможно passустановить otherдополнительные usefulпараметры, informationкоторые toбудут processпереданы initialпри variablesстарте процесса
            value: 'initialValue',
            type: 'string'
          }
        }
      }
    });

    window.hbw_widget.render();

    // IfЕсли youвиджет useвстраивается someв kindSPA ot SPA(Single Page Appllication), callнеобходимо thisвызвать beforeследующую pageфункцию unmount:перед закрытием текущей страницы.
    // window.hbw_widget.unmountWidget();
  </script>
</body>
</html>

...