Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: beautify

Для интеграции виджета 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

...

...

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

       

...

titleget /widget/buttons

...

передаются в 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_classentity_code:

...

titleget /widget/tasks

...


end


# Tasks controller
# GET /widget/tasks
def list_tasks(params)
  return get_bpm_backend('tasks', allow_params('entity_class', 'entity_code'))

...

    • получение формы текущего заказа –  GET запрос c параметрами entity_classid:

...


end

# GET /widget/tasks/:id/form

...


def fetch_task_form(params)
  return get_

...

bpm_backend(

...

'tasks/#{params[:id]}/form

...

', allow_params('entity_class', 'id'))

...

    • обновление формы текущего заказа – put запрос с параметрами entity_classform_dataid

...


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'))

...

    • получение информации для лукапов – GET запрос с параметрами entity_class, name, qid

...


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

Необходимо включить в HTML страницы внешней системы Ниже приведен пример встраивания виджета в веб-страницу. После загрузки JS и CSS виджета: из HydraOMS выполняется инициализация виджета данными приложения и сущности, после чего вызывается функция render().

 

Code Block
language
js
xml
titleHTML page example
<html>
<head>
  <title>HydraOMS Widget</title>
  <script type="text/javascript" src="
<%= '\<\%\=
${hbw_assets_path
\%\>' %>assets/
}/assets/hbw.js"></script>
  <link 
reluser_identifier
rel="stylesheet" type="text/css" href="
<%= '\<\%\=
${hbw_assets_path
\%\>' %>assets/
}/assets/hbw.css">

 

Добавить на страницу <div> с уникальным ID, например, bpmWidgetContainer, чтобы в нём отрендерился виджет.

 

Вызвать функцию render у объекта виджета:
  Code Block
languagejs
titlejs code
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'))({
      
widgetContainer: `#${
this
config.
widgetContainerId
container_id}`,
      
widgetPath: '/widget',
      
entity_class: 
'your_
config.entity_class
'
,
      
entity_type: 
'operator'
config.entity_type,
      
entity_code: `${
id
entityId}`,
      
locale: 
i18n
config.
language
locale,
      
payload: {
        
token
variables: 
cookies.get('token'),
{
          
variables
someInitialVariable: { // You can pass other useful information to process initial variables
 
id:
 
{
          
value: 
`${id}`
'initialValue',
            
type: 'string'
,

          }
        }
,

      }
    }
,
);

    window.hbw_widget.render();

 
}
   // If you use some kind ot SPA, call this before page unmount:
 
});
  
this.
 // window.hbw_widget.
render
unmountWidget();
  </script>
</body>
</html>