Настроил интеграцию. Пользователи создаются, всё хорошо, но хочется большего. В дополнении к существующим полям, нужно включить ещё пару-тройку полей. В частности требуется тянуть название подразделения. Подскажите как модифицировать текущий список атрибутов для синхронизации?
BPMO Service Enterprise, версия 7.14.0.597
Нравится
Логика интеграции конкретных полей реализована в схеме LDAPUtilities, там есть структуры LdapUser и LdapGroup:
public struct LdapUser { #region Fields: Public public string Id; public string Name; public string FullName; public string Company; public string Email; public string Phone; public string JobTitle; public bool IsActive; public string Dn; public DateTime ModifiedOn; #endregion } public struct LdapGroup { #region Fields: Public public string Id; public string Name; public string Dn; public DateTime ModifiedOn; #endregion #region Constructors: Public public LdapGroup(string id, string name, string dn) { Id = id; Name = name; Dn = dn; ModifiedOn = DateTime.MinValue; } #endregion }
И дальше есть методы, с ними работающие. Например:
private LdapUser CreateLdapUser(SearchResultEntry entry, string attributeDefValue) { LdapUser ldapUser = new LdapUser(); ldapUser.Id = GetEntryIdentityAttribute(entry, _ldapUserIdentityAttribute); ldapUser.Name = GetEntryRequiredAttributeStringValue(entry, _ldapUserLoginAttribute); ldapUser.FullName = GetEntryAttributeStringValue(entry, _ldapUserFullNameAttribute, attributeDefValue); ldapUser.Company = GetEntryAttributeStringValue(entry, _ldapUserCompanyAttribute, attributeDefValue); ldapUser.Email = GetEntryAttributeStringValue(entry, _ldapUserEmailAttribute, attributeDefValue); ldapUser.Phone = GetEntryAttributeStringValue(entry, _ldapUserPhoneAttribute, attributeDefValue); ldapUser.JobTitle = GetEntryAttributeStringValue(entry, _ldapUserJobTitleAttribute, attributeDefValue); string accountControlAttributeValue = GetEntryAttributeStringValue(entry, LdapUserAccountControlAttributeName, string.Empty); ldapUser.IsActive = string.IsNullOrEmpty(accountControlAttributeValue) || IsActive(accountControlAttributeValue); bool useLoginUserLDAPEntryDN = _userConnection.AppConnection.UseLoginUserLDAPEntryDN; ldapUser.Dn = useLoginUserLDAPEntryDN ? entry.DistinguishedName : attributeDefValue; ldapUser.ModifiedOn = GetEntryDateTimeAttributeValue(entry, _ldapEntryModifiedOnAttribute); return ldapUser; } private LdapGroup CreateLdapGroup(SearchResultEntry entry) { LdapGroup ldapGroup = new LdapGroup(); ldapGroup.Id = GetEntryIdentityAttribute(entry, _ldapGroupIdentityAttribute); ldapGroup.Name = GetEntryRequiredAttributeStringValue(entry, _ldapGroupNameAttribute); ldapGroup.Dn = entry.DistinguishedName; ldapGroup.ModifiedOn = GetEntryDateTimeAttributeValue(entry, _ldapEntryModifiedOnAttribute); return ldapGroup; }
Для добавления новых атрибутов потребуется дорабатывать по аналогии с существующими. Сами названия атрибутов, а также параметры подключения к LDAP не жёстко зашиты, а хранятся в системных настройках (все можно найти по «LDAP» в их коде) и считываются на ходу тут же в конструкторе класса LdapUtilities.
Зверев Александр,
А можно ли замещать исходный код c#, который касается интеграции Ldap, в случае, если требуется добавить несколько новых атрибутов?
Или потребуется на уровне БП "Синхронизировать данные о пользователях с LDAP" переключаться на дублирующую логику с расширенным числом атрибутов?
Можно создать UsrLdapUtilities, скопировать базовую логику, внести свои доработки, а затем найти все использования оригинальной LdapUtilities и подменить.
Зверев Александр,
Я верно понимаю, что замена будет идти в БП и js, а коробочный C# заменять таким образом нельзя (можно только создавать свое рядом)?
В БП можно создавать изменённые версии стандартных, они попадут с таким же именем в пакет Custom (или другой свой). Для JS есть ограничения, схемы-модули замещать нельзя.