Разработка коннекторов

Документация Avanpost IDM 7 : 9.1. Разработка коннекторов

Навигатор по разделу:

Разработка коннектора к кадровой системе

Общая методика разработки кадрового коннектора:

  • Спроектировать способ интеграции и взаимодействия коннектора с кадровым источником. Определить архитектурную схему подключения коннектора к кадровому источнику и протокол взаимодействия.
  • Если для взаимодействия с кадровым источником требуется доработка или настройка на стороне кадровой системы — произвести данную доработку.
  • Реализовать все методы интерфейса кадрового коннектора.
  • При необходимости автономного тестирования (без подключения к кадровому источнику) разработать интеграционные тесты на методы коннектора.
  • Задокументировать установку и настройку параметров кадрового коннектора.

Все методы основного интерфейса коннектора должны быть реализованы и возвращать данные из кадровой системы в установленном интерфейсом формате.

Коннектор получает от кадровой системы и возвращает в реализованных методах интерфейса следующие сведения:

  • Список подразделений, запись подразделения;
  • Список сотрудников, запись сотрудника;
  • Список должностей.

HR-коннектор представляет собой .NET Core сборку, содержащую публичный класс, реализующий интерфейс Avanpost.Idm.HrConnectors.Api.IHrConnector.

Ниже приведён интерфейс коннектора:

public interface IHrConnector : IDisposable
{
    IEnumerable<Division> GetDivisions(string parentId);
    Division GetDivision(string divisionId);
    Employee GetEmployee(string employeeId);
    IEnumerable<Employee> GetEmployees(string divisionId);
    IEnumerable<Position> GetPositions();
}

Методы интерфейса

Метод GetDivisions

Получение подразделений – ближайших потомков указанного.

Сигнатура:

IEnumerable<Division> GetDivisions(string parentId);

Параметр parentId содержит идентификатор родительского подразделения, потомки которого должны быть возвращены. Указано родительское подразделение или null для получения подразделений верхнего уровня. Метод должен возвращать коллекцию экземпляров класса Division (см. Класс Division).

Метод GetDivision

Получение подразделения.

Сигнатура:

Division GetDivision(string divisionId);

Принимает параметр divisionId – идентификатор подразделения. Метод должен возвращать экземпляр класса Division (см. Класс Division).

Метод GetEmployees

Получение сотрудников подразделения.

Сигнатура:

IEnumerable<Employee> GetEmployees(string divisionId)

Принимает параметр divisionId – идентификатор подразделения, не может быть null. Метод должен возвращать коллекцию экземпляров класса Employee (см. Класс Employee).

Метод GetEmployee

Получение сотрудника.

Сигнатура:

Employee GetEmployee(string employeeId);

Принимает параметр employeId. Должен возвращать единичный экземпляр класса Employee (см. Класс Employee).

Метод GetPositions

Получение всех доступных должностей.

Сигнатура:

IEnumerable<Position> GetPositions();

Должен возвращать коллекцию экземпляров класса Position (см. Класс Position).

Интерфейсные классы

Данные классы используются в качестве аргументов и ожидаемого результата методов. Ссылки на них приведены в описаниях методов основного интерфейса коннектора к кадровой системе.

Класс Division

Экземпляр класса Avanpost.Idm.HrConnectors.Api.Division должен содержать значения следующих свойств:

  • Id — строка, идентификатор подразделения;
  • Name — человекочитаемое наименование подразделения;
  • ParentId — идентификатор родительского подразделения (null для корневого);
  • ManagerId — идентификатор пользователя, являющегося владельцем данного подразделения  (опционально);
  • AdditionalProperties — коллекция вида ключ-значение, для описания дополнительных свойств подразделения (опционально).

Класс Employee

Экземпляр класса Avanpost.Idm.HrConnectors.Api.Employee должен содержать значения следующих свойств:

  • Id  уникальный идентификатор сотрудника;
  • PersonId  идентификатор физического лица, которого представляет сотрудник (опционально);
  • PersonnelNumber  табельный номер сотрудника (опционально);
  • LastName  фамилия;
  • FirstName  имя;
  • Patronymic  отчество (опционально);
  • BirthDate  дата рождения, экземпляр DateTime (опционально);
  • EmailAddress  E-mail сотрудника (опционально);
  • PositionId  идентификатор должности сотрудника;
  • DivisionId  идентификатор подразделения сотрудника;
  • Status  статус (описывается Idm.HrConnectors.Api.EmployeeStatus);
  • AdditionalProperties  коллекция дополнительных свойств сотрудника в виде пар ключ-значение (опционально).

Класс Position

Экземпляр класса Avanpost.Idm.HrConnectors.Api.Position должен содержать значения следующих свойств:

  • Id — идентификатор должности;
  • Name — человекочитаемое наименование должности. (опционально)

Разработка коннектора к управляемой системе

Общая методика разработки коннектора к целевой системе:

  • Спроектировать способ интеграции и взаимодействия коннектора с целевой системой. Определить архитектурную схему подключения коннектора к целевой системе (подключение к базе данных, передача файлов, удалённый вызов процедуры, обмен сообщениями и т.д.) и протокол взаимодействия.
  • Если для взаимодействия с целевой системой требуется доработка либо настройка на стороне целевой системы — спроектировать и произвести доработку.
  • Если для подключения коннектора требуется создание сессии – реализовать методы CreateSession и Dispose.
  • Реализовать обязательные методы интерфейса коннектора к целевой системе: методы GetAllProperties, GetAllRights, SearchRights, GetRightIdByName, AddUserRights, DropUserRights, GetActiveUsers.
  • Если требуется создание учётной записи пользователя в целевой системе – реализовать метод CreateUser. Если не требуется, реализовать данный метод возвращающим существующую учётную запись, соответствующую указанному сотруднику.
  • Если предполагается управление свойствами учётных записей пользователей в целевой системе – реализовать методы SetUserProperties, GetUserProperties, GetAllProperties. Если не предполагается, реализовать методы возвращающими пустые коллекции.
  • Если предполагается управление сложными многозначными свойствами учётных записей пользователей (установка нескольких значений для одного свойства) – реализовать метод GetPropertyOptions. Если не требуется — реализовать метод возвращающим пустую коллекцию.
  • Если требуется управление блокировкой и разблокировкой учётной записи пользователя – реализовать методы LockUser и UnlockUser. Если не требуется, реализовать методы без логики.
  • Если требуется управление паролями учётной записи пользователя – реализовать методы SetUserPassword и ResetUserPassword. Если не требуется — реализовать методы без логики.
  • При потребности в автономном тестировании (без подключения к целевой системе) разработать интеграционные тесты на методы коннектора.
  • Задокументировать установку и настройку коннектора.
Описанный выше алгоритм определения методов для реализации не стоит трактовать так, что какие-то методы из интерфейса коннектора можно не разрабатывать. Для полноценной и корректной работы Avanpost IDM с целевой системой необходимо реализовать все методы основного интерфейса коннектора. Исключение допустимо делать только тогда, когда нет технической возможности реализовать какие-либо из методов, и с учётом того, что часть функций IDM по взаимодействию с целевой системой не будет доступна.

IDM коннектор представляет собой .NET Standard сборку, содержащую публичный класс, реализующий интерфейс Avanpost.Idm.Connectors.Api.IProvisioningConnector.

Ниже приведен интерфейс коннектора (наследуется от System.IDisposable):

public interface IProvisioningConnector : IDisposable
{
    void CreateSession(string connectionString);
    ILog Log { get; set; }
    IEnumerable<Right> GetAllRights();
    string GetRightIdByName(string name);
    IEnumerable<Right> SearchRights(string searchString);
    IEnumerable<Property> GetAllProperties();
    User GetUser(string userId);
    IEnumerable<Right> GetUserRights(string userId);
    IEnumerable<PropertyValue> GetUserProperties(string userId, IEnumerable<string> propertyIds);
    User CreateUser(NewUser user, string password);
    void AddUserRights(string userId, IEnumerable<string> rightIds);
    void DropUserRights(string userId, IEnumerable<string> rightIds);
    void SetUserProperties(string userId, IEnumerable<PropertyValue> propertyValues);
    void LockUser(string userId);
    void UnlockUser(string userId);
    void SetUserPassword(string userId, string password);
    void ResetUserPassword(string userId);
    IEnumerable<string> GetActiveUsers();
    PropertyOption GetPropertyOption(string propertyId);
    void Dispose();
}

Как видно из названий методов и типов параметров, интерфейс и объектная модель коннектора сфокусированы на управлении доступом и атрибутами учетных записей.

Логирование действий коннектора производится посредством объекта класса, реализующего интерфейс ILog. Этот объект передается в коннектор в свойство Log.

При формировании в методах коннектора исключения Avanpost.Idm.Connectors.Api.ConnectionAbortedException, производится автоматическое повторное создание сессии коннектора посредством вызова метода IProvisioningConnector.CreateSession.

Если взаимодействие коннектора с управляемой системой предполагает формирование продолжительного по времени подключения (с формированием сессии в управляемой системе и т.д.), тогда коннектор должен в обязательном порядке реализовывать закрытие сессии в методе коннектора Dispose.

Аргументы и возвращаемые значения

Основные объекты ресурса, передаваемые в методы коннектора и возвращаемые ими: свойства, права, учётные записи, – имеют уникальные строковые идентификаторы. Идентификаторы не могут быть null, пустой строкой или состоять только из пробельных символов. Длина идентификаторов не ограничивается. Передача в метод некорректного идентификатора в общем случае должна вызывать исключение.

Сравнение идентификаторов всегда регистронезависимое. Для систем, где эти идентификаторы регистрозависимые, коннектор должен всё равно обеспечивать регистронезависимость на уровне интерфейса (например, с помощью специального кодирования символов в верхнем регистре).

Во всех методах, возвращающих списки объектов, при пустом результате нужно возвращать пустой список вместо null (если не указано другое). Также, в общем случае, в аргументах метода пустые списки, как правило, не должны передаваться. Если специально не указано, в этом случае допускается вернуть пустой результат, но лучше бросить исключение.  

Некоторые объекты – аргументы и возвращаемые значения (такие как учётная запись) − могут содержать списки других вложенных объектов (свойства, права учётных записей) и образовывать дерево. Когда аргумент или возвращаемое значение может определять как дерево, так и плоский объект, если явно не указано, метод использует только корневой объект и его свойства. В этом случае списки вложенных объектов должны игнорироваться (для аргументов) или оставаться пустыми (для возвращаемых значений). В противном случае, метод явно указывает, какие вложенные объекты должны передаваться в метод или будут заполнены при возврате.

Описание методов основного интерфейса

Метод CreateSession

Метод предназначен для установки соединения, либо проверки возможности соединения с управляемой системой.

Сигнатура:

void CreateSession(string connectionString);

Параметр connectionString представляет собой строку подключения к ресурсу. Требования к виду строки определяются коннектором.

Рекомендуемый формат — список ключ = значение, разделенный знаком “;”.

Метод GetAllRights

Метод возвращает список прав — групп, ролей или других незначимых атрибутов пользователей возможных в управляемой системе.

Сигнатура метода:

IEnumerable<Right> GetAllRights();

Должен возвращать коллекцию объектов класса Right (см. Класс Right).

Метод SearchRights

Метод используется для поиска прав из интерфейса IDM по имени (если есть) или идентификатору права.

Сигнатура:

IEnumerable<Right> SearchRights(string searchString);

Параметр searchString задаёт подстроку имени или идентификатора искомого права. В ответ метод возвращает коллекцию экземпляров объекта Right (см. Класс Right).

Метод GetAllProperties

Метод возвращает список значимых атрибутов пользователей

Сигнатура метода:

IEnumerable<Property> GetAllProperties();

Метод должен возвращать коллекцию объектов класса Property (см. Класс Property). Свойства, указание значений которых обязательно при создании пользователя в системе, должны иметь значение атрибута Required=true. Обязательные свойства должны передаваться коннектору при создании учётных записей в методе CreateUser (см. Метод CreateUser).

Метод GetUser

Метод получает экземпляр учётной записи по имени. Если запись не существует, возвращает null. Вложенные объекты — права и свойства заполнять не требуется.

Сигнатура:

User GetUser(string userId);

Параметр userId имя — искомой учётной записи. Должен вернуть экземпляр класса User (см. Класс User).

Метод CreateUser

Метод создает учетную запись пользователя в системе с указанными правами и значениями свойств.

Сигнатура:

User CreateUser(NewUser user, string password); 

Логин пользователя должен быть равен user.Id. Пароль может быть null.

Дополнительные параметры пользователей передаются через список свойств user.Properties.

Коннектор может бросить исключение, если создание учётной записи пользователя без пароля невозможно.

Возвращает экземпляр созданной учётной записи (см. 3.3.4), который может отличаться от переданного в метод экземпляра (например, с дополнительными свойствами, автоматически созданными или сгенерированными коннектором).

Метод AddUserRights

Метод добавляет права пользователю.

Сигнатура:

void AddUserRights(string userId, IEnumerable<string> rightIds);

Пользователь определяется по логину, заданному в userId, метод должен добавить пользователю права с идентификаторами из списка rightIds. Если учётная запись не найдена, или не удалось добавить хотя бы одно право (в т.ч. из-за неверного идентификатора права) бросает исключение. Добавление уже существующих прав не является ошибкой (вызов должен завершаться успешно, даже если все или часть прав уже есть).

Метод DropUserRights

Метод отнимает права у пользователя.

Сигнатура:

void DropUserRights(string userId, IEnumerable<string> rightIds);

Метод аналогичен AddUserRights.

Метод LockUser

Предназначен для блокировки учетной записи пользователя.

Сигнатура:

void LockUser(string userId);

Если учётная запись не существует, бросать исключение.

Метод UnlockUser

Предназначен для разблокировки учетных записей пользователей.

Сигнатура:

void UnlockUser(string userId);

Аналогично LockUser.

Метод ResetUserPassword

Предназначен для сброса пароля пользователя. После вызова данного метода пользователю при входе будет выводиться требование ввода нового пароля.

Сигнатура:

void ResetUserPassword(string userId);


userId   имя существующей учётной записи (не null).

Метод GetActiveUsers

Возвращает все активные учётные записи в ресурсе. Предназначен для поиска активных записей в ресурсе, незарегистрированных в IDM. Под активными понимается незаблокированные, включённые и т.п. записи – те, под которыми можно работать в системе. Реализация может выбирать активные учётные записи по своему усмотрению, не привязываясь к статусам учётных записей, определённых в интерфейсе. Реализация может передать вызывающему точный или приблизительный размер списка через реализацию списком.

Сигнатура:

IEnumerable<string> GetActiveUsers();

Метод должен возвращать коллекцию строк с логинами пользователей.

Метод GetPropertyOption

В случае, если планируется использование готового набора значений свойства, позволяет получить список этих значений. Если список значений не задан, возвращает null.

Сигнатура:

PropertyOption GetPropertyOption(string propertyId);

propertyId  идентификатор свойства.

Метод должен возвращать экземпляр класса PropertyOption (см. 3.3.5).

Метод GetRightIdByName

Предназначен для разрешения человекочитаемого имени правила в его идентификатор.

Сигнатура:

string GetRightIdByName(string name);

name  человекочитаемое имя правила (например «administrator»).

Если имя правила задано неоднозначно, коннектор должен вызывать исключение. Например, искомое правило «Operator», в системе зарегистрирован некий набор правил: “Administrator”, “Database Operator”, “IDM Operator” – в данном случае должно вызываться исключение, так как имя соответствует нескольким наборам данных.

Метод GetUserProperties

Предназначен для получения значений свойств пользователя по идентификатору пользователя и группы идентификаторов свойств.

Сигнатура:

IEnumerable<PropertyValue> GetUserProperties(string userId, IEnumerable<string> propertyIds);

userId  непустой идентификатор пользователя;

propertyIds  непустой список идентификаторов свойств.

Метод возвращает значения только присущих пользователю свойств. 

Метод GetUserRights

Предназначен для получения прав указанной учетной записи.

Сигнатура:

IEnumerable<Right> GetUserRights(string userId);

userId – непустой идентификатор пользователя.

Должен быть возвращён экземпляр класса Right (см. Класс Right). В случае, если учетной записи не назначены права, будет возвращен пустой список прав..

Метод SetUserPassword

Предназначен для назначения пароля пользователю.

Сигнатура:

void SetUserPassword(string userId, string password);

userId – непустой идентификатор существующего пользователя;

password – пароль пользователя, может быть любым значением, реализация может самостоятельно определять правильность пароля и бросать исключение.

Метод SetUserProperties

Предназначен для задание значений свойств в существующей учётной записи.

Сигнатура:

void SetUserProperties(string userId, IEnumerable<PropertyValue> propertyValues);
  • userId – непустой идентификатор пользователя;
  • propertyValues − имена и значения задаваемых свойств, коллекция экземпляров класса PropertyValue (см. Класс PropertyValue).

Описание классов основного интерфейса

Данные классы используются в качестве аргументов и ожидаемого результата методов. Ссылки на них приведены в описаниях методов основного интерфейса коннектора к целевой системе.

Класс Right

Описывает право в ресурсе. Объект Avanpost.Idm.Connectors.Api.Right может содержать в себе следующие свойства:

  • Id – строковый идентификатор права;
  • Name – необязательное человекочитаемое название права;
  • Description – необязательное описание права.

Класс Property

Описывает свойство учётных записей в ресурсе. Объект Avanpost.Idm.Connectors.Api.Property может содержать в себе следующие свойства:

  • Id – строковый идентификатор свойства;
  • Description – описание свойства;
  • Required – признак обязательности свойства.

Класс PropertyValue

Описывает значение свойства учётной записи в ресурсе.

Объект Avanpost.Idm.Connectors.Api.PropertyValue может содержать в себе следующие свойства:

  • PropertyId – строковый идентификатор свойства;
  • Value – значение свойства.

Класс User

Описывает пользователя в ресурсе. Объект Avanpost.Idm.Connectors.Api.User может содержать в себе следующие свойства:

  • Id – логин пользователя;
  • Status – описание свойства, из перечисления UserStatus.

Сигнатура перечисления UserStatus:

public enum UserStatus : short
{
    Working = 0, // активный
    Locked = 1, // заблокированный
    Disabled = 2 // выключенный
}

Класс PropertyOption

Описывает значение свойства (опции). Объект Avanpost.Idm.Connectors.Api.PropertyOption может содержать в себе следующие свойства:

  • AllowCustomValues  допускается ли использование вводимых с клавиатуры значений;
  • Type  тип свойства, перечисление OptionsType: List – плоский список;
  • Tree  древовидное свойство;
  • MultipleSelection  можно ли задавать несколько вариантов значений;
  • Choices  набор готовых вариантов.

Поля типа PropertyOptionValue:

  • Name — заголовок значения;
  • Value  само значение;
  • Children  список вложенных значений (для древовидного списка).

Дополнительные интерфейсы

В пространстве имен Avanpost.Idm.Connectors.Api содержатся дополнительные интерфейсы: IObjectAccessControl, IAccountRemover и IAccountRenamer.

Интерфейс IObjectAccessControl

Расширенный интерфейс коннектора, поддерживающего обработку и управление объектными правами.

Чтобы зарегистрировать объектное право нужно знать идентификатор (URI) объекта доступа и режим доступа. Идентификатор вводится вручную и затем проверяется на наличие/корректность через коннектор, после чего можно выбрать режим доступа из списка, сформированным коннектором для указанного объекта. Конкретный формат идентификатора в рамках URI (например, схема) и режимы доступа определяются коннектором.

Примеры объектных прав:

  • https://devenv.avanpost.ru/idm/  web-ресурс.
  • file:///C:/Windows  папка или файл в файловой системе.
  • //fileserver/documents  общая папка на сервере.

Сигнатура интерфейса:

public interface IObjectAccessControl
{
    bool ObjectExists(Uri objectUri);
    IEnumerable<ObjectRight> GetObjectRights(Uri objectUri);
    void AddUserObjectRight(string login, Uri objectUri, string rightId);
    void DropUserObjectRight(string login, Uri objectUri, string rightId);
    bool UserHasObjectRight(string login, Uri objectUri, string rightId);
}

Интерфейс оперирует понятием URI, являющимся уникальным признаком объекта в ресурсе. URI задаётся классом System.Uri. Может использоваться как абсолютный, так и относительный URI. Для создания экземпляра Uri с относительным URI можно использовать флаг UriKind.Relative (например, new Uri("path",UriKind.Relative).

Метод ObjectExists

Предназначен для проверки существования объектного права в ресурсе.

Сигнатура метода:

bool ObjectExists(Uri objectUri);

Принимает на вход атрибуты:

  • objectUri  URI ресурса в виде экземпляра класса System.Uri; может быть передан в виде абсолютного либо относительного URI.

Метод GetObjectRights

Предназначен для получения возможных прав объекта с указанным URI. 

Сигнатура метода:

IEnumerable<ObjectRight> GetObjectRights(Uri objectUri);

Принимает на вход экземпляр класса System.Uri. Метод должен возвращать коллекцию экземпляров класса прав в объекте Avanpost.Idm.Connectors.Api.ObjectRight.

Класс ObjectRight содержит свойства:

  • Id  идентификатор режима доступа к объекту;
  • Name  человекочитаемое название режима доступа к объекту, которое выводится в интерфейсе.

Метод AddUserObjectRight

Предназначен для добавления пользователю права на объект с указанным URI.

Сигнатура метода:

void AddUserObjectRight(string login, Uri objectUri, string rightId);

Принимает на вход атрибуты:

  • login  логин учётной записи пользователя в управляемой системе;
  • objectUri  экземпляр класса System.Uri, к которому добавляется право;
  • rightId  строковый идентификатор права, которое добавляется учётной записи пользователя в объекте.

Метод DropUserObjectRight

Предназначен для удаления у пользователя права на объект с указанным URI.

Сигнатура метода:

void DropUserObjectRight(string login, Uri objectUri, string rightId);

Принимает на вход атрибуты:

  • login  логин учётной записи пользователя в управляемой системе;
  • objectUri  экземпляр класса System.Uri, к которому добавляется право;
  • rightId  строковый идентификатор права, которое удаляется у учётной записи пользователя в объекте.

Метод HasUserObjectRight

Предназначен для проверки наличия право на объект у учётной записи пользователя.

Сигнатура метода:

bool UserHasObjectRight(string login, Uri objectUri, string rightId);

Принимает на вход атрибуты:

  • login  логин учётной записи пользователя в управляемой системе;
  • objectUri  экземпляр класса System.Uri, к которому добавляется право;
  • rightId  строковый идентификатор права, которое удаляется у учётной записи пользователя в объекте.

Интерфейс IAccountRemover

Предназначен для удаления учётных записей.

Сигнатура:

public interface IAccountRemover
{
    void Remove(string login);
}

Метод принимает на вход атрибуты:

  • login  идентификатор пользователя.

Интерфейс IAccountRenamer

Расширенный интерфейс коннектора, поддерживающего переименование учётных записей.

Сигнатура:

public interface IAccountRenamer
{
    void RenameAccount(string oldName, string newName);
}

Метод принимает на вход атрибуты:

  • oldName — имя существующей учетной записи;
  • newName — новое имя для переименования, не должно пересекаться с существующей записью.

Разработка коннектора к источнику юнитов

Общая методика разработки коннектора к источнику юнитов:

  • Спроектировать способ интеграции и взаимодействия коннектора с источником юнитов. Определить архитектурную схему подключения коннектора к источнику юнитов и протокол взаимодействия.
  • Если для взаимодействия с источником юнитов требуется доработка либо настройка на стороне системы юнитов — произвести данную доработку.
  • Реализовать все методы интерфейса коннектора к источнику юнитов.
  • При необходимости автономного тестирования (без подключения к источнику юнитов) разработать интеграционные тесты на методы коннектора.
  • Задокументировать установку и настройку параметров коннектора к источнику юнитов.

Все методы основного интерфейса коннектора должны быть реализованы и должны возвращать данные из системы юнитов в установленном интерфейсом формате.

Коннектор получает от системы юнитов и возвращает в реализованных методах интерфейса следующие сведения:

  • Список типов юнитов;
  • Список юнитов, запись юнита;

Юнит-коннектор представляет собой .NET Core сборку, содержащую публичный класс, реализующий интерфейс Avanpost.Iga.Connectors.Api.Units.IUnitConnector

Ниже приведён интерфейс коннектора:

public interface IUnitConnector: IDisposable
{    
    ILogger Log { get; set; }
    void Initialize(string connectionString);  
    IEnumerable<UnitTypeInfo> GetSupportedUnitTypes();
    IEnumerable<Unit> GetUnits(string unitId);
    Unit GetUnit(string unitId);
}

Методы интерфейса

Свойство Log

Логгер юнит-коннектора

Сигнатура:

ILogger Log { get; set; }

Используется внутри коннектора для логирования работы коннектора.

Метод Initialize

Инициализация конфигурации коннектора 

Сигнатура:

void Initialize(string connectionString);

Параметр connectionString является строкой с параметрами для подключения коннектора к источнику юнитов.

Метод GetSupportedUnitTypes

Получение поддерживаемых типов системой юнитов

Сигнатура:

IEnumerable<UnitTypeInfo> GetSupportedUnitTypes();

Должен возвращать коллекцию экземпляров класса UnitTypeInfo.

Метод GetUnits

Получение юнитов — ближайших потомков указанного.

Сигнатура:

IEnumerable<Unit> GetUnits(string unitId);

Параметр unitId содержит идентификатор родительского юнита, потомки которого должны быть возвращены. Указан родительский юнит или null для получения юнитов верхнего уровня. Метод должен возвращать коллекцию экземпляров класса Unit.

Метод GetUnit

Получение юнитов – ближайших потомков указанного.

Сигнатура:

Unit GetUnit(string unitId);

Принимает параметр unitId — идентификатор юнита. Метод должен возвращать экземпляр класса Unit.

Интерфейсные классы

Данные классы используются в качестве аргументов и ожидаемого результата методов. Ссылки на них приведены в описаниях методов основного интерфейса коннектора к системе юнитов.

Класс Unit

Экземпляр класса Avanpost.Iga.Connectors.Api.Units.Unit должен содержать значения следующих свойств:

  • Id — строка, идентификатор юнита;
  • Name — имя юнита (уникальное для одного родителя);
  • TypeInfo — экземпляр класса UnitTypeInfo, информация о типе юнита;
  • Properties — коллекция экземпляров класса UnitProperty, коллекция свойств юнита;
  • Links — коллекция экземпляров класса UnitLink, коллекция ссылок юнита;
  • Responsibles  — коллекция экземпляров класса UnitResponsible, коллекция ответственных юнита.

Экземпляр класса Avanpost.Iga.Connectors.Api.Units.UnitLink должен содержать значения следующих свойств:

  • UnitId — строка, идентификатор юнита, на который ссылаются;
  • Info — экземпляр класса UnitLinkInfo, информация о ссылке.

Класс UnitLinkInfo

Экземпляр класса Avanpost.Iga.Connectors.Api.Units.UnitLinkInfo должен содержать значения следующих свойств:

  • ChildTypeName — строка, имя типа юнита, на который ссылаются;
  • Name — строка, название ссылки.

Класс UnitProperty

Экземпляр класса Avanpost.Iga.Connectors.Api.Units.UnitProperty должен содержать значения следующих свойств:

  • Value — строка, значение свойства, сериализованное в json (сериализация происходит в конструкторе класса);
  • Info — экземпляр класса UnitPropertyInfo, информация о свойстве.

Класс UnitPropertyInfo

Экземпляр класса Avanpost.Iga.Connectors.Api.Units.UnitPropertyInfo должен содержать значения следующих свойств:

  • Name — строка, имя свойства (уникальное для типа);
  • ValueType — элемент перечисления UnitPropertyValueType, тип значения свойства.
public enum UnitPropertyValueType
{
    String = 0,
    Boolean = 1,
    Integer = 2,
    Double = 3,
    Time = 4,
    Date = 5,
    DateTime = 6,
    Uri = 7,
    File = 8
}

Класс UnitResponsible

Экземпляр класса Avanpost.Iga.Connectors.Api.Units.UnitResponsible должен содержать значения следующих свойств:

  • Id — строка, идентификатор сотрудника в кадровом источнике;
  • Function — строка, функция ответственного;
  • DataSource  строка, имя кадрового источника в Idm.

Класс UnitTypeInfo

Экземпляр класса Avanpost.Iga.Connectors.Api.Units.UnitTypeInfo должен содержать значения следующих свойств:

  • Name — строка, имя типа юнита;
  • PropertyInfos  коллекция экземпляров UnitPropertyInfo, информация о свойствах типа;
  • LinkInfos — коллекция экземпляров UnitLinkInfo, информация о ссылках типа.

Обсуждение