Примеры реализации

Импорт данных из Excel в Citeck

Пример простой

Пример подходит для простых случаев, когда данные для импорта не содержат ассоциаций, не требуется маппинг и для вас подходит упрощенный формат файла.

  1. В Разделе Администратора → Интеграция → Camel DSL нажмите «+» :

  2. В форме заполните поля:

  • id: import-from-excel (можно задать свой. главное чтобы id был уникален среди всех Camel DSL)

  • Тип: Yaml

  • Состояние: Stopped

  • Файл: здесь будет необходимо загрузить excel файл с данными (пример см. ниже). Можно это сделать позднее.

  • Содержимое контекста:

- beans:
    - name: "excelProcessor"
      type: ru.citeck.ecos.camel.processor.reader.ExcelToListOfDataProcessor
- route:
    from:
      uri: "file-from-camel-dsl:import"
      steps:
        - process:
            ref: excelProcessor
        - split:
            simple: "${body}"
            steps:
              - to: "ecos-records-mutate:?sourceId=emodel/import-test"
../../_images/simple_xls_01.png

В содержимом нужно поменять только import-test на sourceId для вашего типа. По умолчанию sourceId равен id типа.

  1. Сохраните.

  2. Если файл с данными уже приложен, то остается только запустить через действие в журнале или через изменение состояния Stopped -> Started на форме редактирования:

../../_images/simple_xls_02.png ../../_images/simple_xls_03.png

Пример файла с данными

В файле:

  • Первая строка - id атрибутов.

  • Остальные строки - данные, которые необходимо импортировать.

Пример сложнее

Пример подходит для сложных случаев (добавления маппинга, работы с ассоциациями, работы с нетривиальными форматами excel файла).

В данном примере будет показан пример роута с использованием следующих camel-элементов:

Допустим в системе есть два пользовательских типа данных - Работник и Позиция

Работник:

../../_images/XLS_import_01.png

Позиция (справочный тип, является ассоциацией в типе Работник):

../../_images/XLS_import_02.png

Необходимо импортировать следующие данные из Excel-файла (xlsx):

../../_images/XLS_import_03.png

Комментарии к столбцам таблицы:

  1. Работник - никакая дополнительная обработка не требуется. Значение будет записано в виде строки

  2. Должность - тут видно, что в таблице используется свойство «Наименование» (системное название name) ассоциации с типом Должность. Для корректного сохранения в систему нужно будет определить RecordRef должности

  3. Работает больше года - логическое значение которое перед сохранением в систему надо преобразовать в соответствующие true - false

  4. Зарплата - числовое значение. Показаны разные варианты записи: с разрядностью, точкой и запятой в качестве разделителя, отрицательные числа (просто ради примера). Текст заголовка намекает на то, что он может периодически редактироваться. Кроме работы с заголовком никакая дополнительная обработка числовых значений не потребуется. Они корректно запишутся как соответствующие числовые значения

  5. Дата приема - данный столбец в таблице имеет тип Дата и для примера показаны разные типы форматирования. Никакая дополнительная обработка значений не потребуется

Для импорта данных необходимо будет прикрепить Excel файл на форму Camel DSL и прописать следующую конфигурацию:

- beans:
    - name: "excelProcessor"
      type: ru.citeck.ecos.camel.processor.reader.ExcelToListOfDataProcessor
      properties:
          sheetName: Таблица персонала
          tableStartCellReference: C4
          customAttNames:
              F: salary
    - name: "mappingProcessor"
      type: ru.citeck.ecos.camel.processor.data.MappingProcessor
      properties:
        keysMapping:
          Работник: name
          Должность: position
          Работает больше года: moreThenYear
          Дата приема: startDate
        valuesMapping:
          moreThenYear:
             Да: true
             Нет: false
    - name: "assocRefByAttributeProcessor"
      type: ru.citeck.ecos.camel.processor.data.AssocRefByAttributeProcessor
- route:
     from:
         uri: "file-from-camel-dsl:randomName"
         steps:
             - process:
                   ref: excelProcessor
             - process:
                   ref: mappingProcessor
             - setHeader:
                   name: AssocRefByAttributeConfig
                   constant:
                     sourceId: "emodel/camel-example-position"
                     findByAttribute: "name"
                     attributeKey: "position"
             - process:
                    ref: assocRefByAttributeProcessor
             - split:
                  simple: "${body}"
                  steps:
                      - to: ecos-records-mutate:?sourceId=emodel/camel-example-employee

Комментарии:

../../_images/XLS_import_04.png

После импорта получаем:

../../_images/XLS_import_05.png

Синхронизация Bitrix24 – CRM

Конфиги Camel DSL

В Разделе Администратора → Интеграция → Camel DSL были написаны 2 Camel DSL конфига:

../../_images/bitrix_01.png

bitrix24-crm-in-sync - Входящая интеграция. Из Bitrix24 в Citeck CRM.

Для Входящей интеграции создан вебхук bitrix24-webhook, через который принимаются запросы от Bitrix24 на создание или изменение Сделок. Входящая интеграция в Сделках использует атрибут bitrixId для определения какую сделку обновлять.

При создании сделки из Bitrix24 этот атрибут задается сразу. При обновлении в Bitrix24 если в Citeck CRM нет сделки с таким id, то она создается как новая.

bitrix24-crm-out-sync - Исходящая интеграция. Из Citeck CRM в Bitrix24.

Исходящая интеграция синхронизирует в Bitrix24 создание и обновление сделок.

Атрибуты, которые синхронизируются в текущей реализации:

Атрибут в deal Citeck CRM

Атрибут в Bitrix24

Комментарий

bitrixId

ID

name

TITLE

amount

OPPORTUNITY

dateReceived

DATE_CREATE

company

crm.company.get?id=COMPANY_ID -> TITLE

В COMPANY_ID хранится ID связанной со Сделкой Компанией.

manager

user.get?id=ASSIGNED_BY_ID

В ASSIGNED_BY_ID хранится ID менеджера сделки.
Получаем email пользователя из Bitrix24, и если по этому значению найден пользователь в системе, задаем его как менеджера.

contacts

Контакты в Bitrix24 хранятся в отдельных сущностях.
Получаем список id контактов и по каждому id получаем данные контакта

contactFio

LAST_NAME NAME SECOND_NAME

Формируется из нескольких полей в Bitrix24

contactPhone

contact.PHONE

contactEmail

contact.EMAIL

Настройка синхронизации с Bitrix24

Для работы синхронизаций необходимо настроить Bitrix24, Конечные точки, Секреты и Входящий вебхук:

  1. В Bitrix24 создать Исходящий вебхук (для входящей интеграции). См. подробно как

1.1 В URL указать адрес до Входящего вебхука, созданного в Citeck, вида

http://host/gateway/integrations/pub/webhook/bitrix24-webhook?token=testAuthToken

  • bitrix24-webhook – id, указанный при создании вебхука.

  • token - параметр, который был задан на форме

  • testAuthToken - сам токен, который был задан в Секрете

1.2 В События необходимо указать Создание сделки (ONCRMDEALADD), Обновление сделки (ONCRMDEALUPDATE)

../../_images/bitrix_02.png

1.3 В Citeck перейти в Раздел Администратора → Модель → Секреты в bitrix24-webhook-token указать Токен приложения.

../../_images/bitrix_03.png
  1. В Bitrix24 создать Входящий вебхук (для запросов в Birix24).

2.1 Указать Настройку прав crm и user

../../_images/bitrix_04.png

2.2 В Citeck перейти в Раздел Администратора → Модель → Конечные точки в bitrix24-rest-endpoint указать URL Входящего вебхука Bitrix24 вида https://XXXX.bitrix24.ru/rest/

../../_images/bitrix_05.png

2.3 В Citeck перейти в Раздел Администратора → Модель → Секреты в bitrix24-rest-credentials указать Имя пользователя и Пароль (значения из URL Входящего вебхука Bitrix24 …./rest/{имя пользователя}/{пароль})

../../_images/bitrix_06.png
  1. В Citeck перейти в Раздел Администратора → Модель → Конечные точки в bitrix24-rabbitmq-endpoint указать URL до Rabbitmq по AMQP:

../../_images/bitrix_07.png
  1. В Citeck перейти в Раздел Администратора → Модель → Секреты в bitrix24-rabbitmq-credentials указать Имя пользователя и Пароль для аутентификации в rabbitmq. Пользователь должен быть с правами администратора.

../../_images/bitrix_08.png
  1. Запустить в Camel DSL синхронизации bitrix24-crm-in-sync, bitrix24-crm-out-sync.