Настроил интеграцию. Пользователи создаются, всё хорошо, но хочется большего. В дополнении к существующим полям, нужно включить ещё пару-тройку полей. В частности требуется тянуть название подразделения. Подскажите как модифицировать текущий список атрибутов для синхронизации?
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 есть ограничения, схемы-модули замещать нельзя.