Разработка компонента импорта настроек организации из системы оператора ЭДО
Компонент импорта предоставляет модулю зависящий не от оператора ЭДО слой получения списка подразделений организации, контрагентов и ящиков, зарегистрированных в системе оператора ЭДО. Информация, предоставляемая данным компонентом, требуется для определения связей между контрагентами, зарегистрированными в системе Docsvision, и контрагентами организации в системе оператора ЭДО.
Данный компонент должен реализовывать программный интерфейс IImportService. Методы реализуемого интерфейса вызываются из компонента Справочника настроек операторов ЮЗДО при загрузке подразделений и ящиков организации, контрагентов и ящиков контрагентов.
Реализация данного компонента, получающего информацию от оператора Диадок, содержится в сборке DocsVision.Edi.Runtime.Diadoc.dll
(добавляется при установке Коннектор к Диадок).
Фактическая реализация компонента импорта сильно зависит от метода взаимодействия с оператором ЭДО и предоставляемого им API.
Далее приведена часть исходного кода (только публичные методы) примера реализации интерфейса ImportService
для работы с оператором Диадок.
public class ImportService : IImportService
{
private DiadocSession DiadocSession (1)
{
get
{
if (diadocSession != null && !diadocSession.IsAlive())
diadocSession = null;
if (diadocSession == null)
{
if (!settings.ContainsKey(DiadocSettings.ApiUrl))
throw Error.InvalidOperation(Resources.NoConnectionData);
if (!settings.ContainsKey(DiadocSettings.Login))
throw Error.InvalidOperation(Resources.NoConnectionData);
diadocSession = new DiadocSession(
settings[DiadocSettings.ApiUrl],
settings[DiadocSettings.Login],
settings[DiadocSettings.Password],
settings.ContainsKey(DiadocSettings.ProxyUrl) ? settings[DiadocSettings.ProxyUrl] : null,
settings.ContainsKey(DiadocSettings.ProxyLogin) ? settings[DiadocSettings.ProxyLogin] : null,
settings.ContainsKey(DiadocSettings.ProxyPassword) ? settings[DiadocSettings.ProxyPassword] : null);
}
return diadocSession;
}
}
(2)
public void Initialize(Dictionary<string, string> settings) (3)
{
this.settings = settings; (4)
}
public ItemCollection<Unit> ImportUnits() (5)
{
return DiadocSession.ImportUnits();
}
public ItemCollection<Partner> ImportPartners() (6)
{
return DiadocSession.ImportPartners();
}
}
1 | Точка подключения к API Диадок. |
2 | Реализация интерфейса IImportService . |
3 | Реализация метода инициализации компонента. |
4 | Загрузка настроек. |
5 | Реализация метода получения от оператора ЭДО списка организаций. |
6 | Реализация метода получения от оператора ЭДО списка контрагентов. |
Далее приведена часть исходного кода класса DiadocSession
, показывающая принцип взаимодействия с оператором ЭДО через его API на примере загрузки данных организации.
internal class DiadocSession {
private readonly DiadocApi diadocApi;
private readonly string authToken;
public DiadocSession(string apiUrl, string login, string password) {
(1)
WinApiCrypt diadocCrypt = new WinApiCrypt();
diadocApi = new DiadocApi(DefaultClientId, apiUrl, diadocCrypt);
authToken = diadocApi.Authenticate(login, password);
}
(2)
public ItemCollection<Unit> ImportUnits() {
ItemCollection<Unit> units = new ItemCollection<Unit>();
(3)
units.AddRange(diadocApi.GetMyOrganizations(authToken).Organizations.Select(GetUnit));
return units;
}
(4)
}
1 | Подключаемся и авторизуемся в Диадок. |
2 | Получаем данные подразделений организации. |
3 | Получаем подразделения организации с помощью метода GetMyOrganizations API Диадок метод. |
4 | Часть кода пропущена. |