Как импортировать новые поля из LDAP в ELMA

Импортировать новые поля LDAP (Active Directory в Microsoft) в ELMA BPM, сложная задача — если вы новичок.

Не отчаивайтесь, на деле одно единственно верное решение. (о нем расскажу ниже)

Cинхронизировать дополнительную информацию в  ELMA, чтобы не напрягать пользователей — плюс в карму проекта

Теперь подробнее:

  • LDAP — хранилище данных о сотрудниках — пользователях
    • хранит логины и пароли, плюс служебную информацию. (Например город пользователя)
  • Active Directory — реализация протокола LDAP от Microsoft.

Перед началом

  • Допустим ELMA BPM подключена к LDAP (это стандартный функционал)
  • Синхронизация стандартных полей настроена

 

Если не удается подключить Active Directory к ELMA

Не понимаете в чем проблема

  • Подключение не удается
  • Пользователей нет в списке — не удается построить фильтр (условие для синхронизации пользователей из LDAP)
  • Вы не понимаете что происходит..

Тогда действуйте последовательно

  1. Скачайте Ad Explorer (приложение для просмотра Active Directory)
  2. Подключитесь к Active Directory с настройками — как в ELMA BPM
  3. Настройте фильтры(фильтр авторизации — например чтобы ELMA BPM видела только отдел продаж)
  4. Изучите поля — в каких что хранится (логин, пароль, email)
  5. Настройте как в ELMA BPM

Готово!

 

Задача — импортировать новое поле в ELMA BPM из LDAP

Коллегам от бизнеса потребовались дополнительные поля в пользователе для бизнес процесса ELMA BPM.

Популярные поля:

  • Должность
  • Город
  • Номер телефона
  • и другие (даже настроенные вручную техподдержкой)

я расскажу на примере города, остальные настраиваются также

Зная как такое провернуть — решение займет 10 минут.

Краткая инструкция

  1. Найдите название поля в Active Directory (поле город)
    • Из документации Microsoft
    • или заглянуть в AD explorer — найдите поле там (обязательно — если оно добавлено в Active Directory вручную)
  2. Изучите как и где синхронизируется пользователь (этого нет в документации)
  3. Дополните синхронизацию полем город по примеру с полями из настроек
    • Переопределите стандартный сервис синхронизации LDAP — ELMA BPM

Звучит несложно, но

  • Нет документации (спасет декомпилятор)
  • Непонятно как переопределить сервис синхронизации (тут вам придется погуглить на английском языке или читайте дальше — ответ поймете)

Если вы новичок прочтите об архитектуре ELMA и Autofac

Добавляем новые поля в ELMA BPM из LDAP по инструкции

Ищем название поля

  1. Поле город ищем в документации Microsoft — поле City это «L» в Active Directory
  2. На всякий случай проверьте в Active Directory что оно заполняется (c помощью AD Explorer)

Ищем как синхронизируется пользователь

  1. Ищем в папке ELMA\Web\bin — серверную часть модуля интеграции с LDAP (в названии содержит слово LDAP)
  2. Открываем с помощью декомпилятора IlSpy и ищем там сервис по словам (по слову Ldap и полям которые уже синхронизируются, Firstname, email)
  3. Нашли — метод ReadUserParams (заодно видим пример)
    • метод приватный — значит его не переопределить — ищите кто вызывает ReadUserParams
  4. Нашли — метод Sync (даже подписано — считывание данных о пользователе), он публичный — нам подходит

Добавляем новое поле в синхронизацию LDAP

Доработайте логику синхронизации

  • два варианта и оба переопределение сервиса LdapService (класс помеченный атрибутом Service)
  • варианты костылей мы не рассматриваем)

Чтобы переопределить сервис в Autofac достаточно

  1. Реализовать интерфейс ILdapService (создать в глобальном модуле ELMA BPM — класс реализующий ILdapService )
  2. Пометить класс атрибутом Service (так Autofac поймет что это сервис)

Соответственно в ELMA 2 сервиса по типу ILdapService, но используется последний зарегистрированный.

  • сервисы регистрируются автоматически

Унаследовав класс от интерфейса ILdapService — нужно описать методы интерфейса (реализовать интерфейс)

  • нам нужен только метод Sync
  • метод заполнения пользователя ReadUserParam вызывается там

Итак у нас два варианта

Первый вариант — лёгкий

  • В конструкторе получить через локатор сервисов стандартный LdapService и в новом сервисе в методах (кроме Sync) вызывать стандартный сервис
  • Метод Sync и ReadUserParams скопировать из IlSpy.
  • В метод ReadUserParams на примере email — добавить поле l (город)

С LdapService лёгкий способ не подойдёт, класс LdapService помечен internal — доступен только внутри сборки (файла .dll)

Второй вариант — сложный

Отличается от легкого тем что

  • придется полностью переносить класс LdapService
  • могут возникнуть проблемы с переводом кода ( но если есть Google или знаете C# — разберётесь)

За дело:

  • Копируйте весь класс (хорошо что он не обфусцирован) и приведите к состоянию — «чтобы ELMA не ругалась» (точнее компилятор)
  • В метод ReadUserParams по аналогии с email добавьте поле l (город) 

Дальше одинаково для обоих способов

  • Публикуете глобальный модуль с сервисом, перезапускаете ELMA
  • Импортируете пользователей

Что получилось смотрите тут (поля типа message2, text3 и подобные я оставил — они после декомпилятора, разработчики так не пишут)

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

%d такие блоггеры, как:

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: