Разработка компонента импорта настроек организации из системы оператора ЭДО

Компонент импорта предоставляет модулю зависящий не от оператора ЭДО слой получения списка подразделений организации, контрагентов и ящиков, зарегистрированных в системе оператора ЭДО. Информация, предоставляемая данным компонентом, требуется для определения связей между контрагентами, зарегистрированными в системе 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 Часть кода пропущена.