Клиентский API > AdirConnector

Разработка с использованием клиентского API
mihinator
Сообщения: 1
Зарегистрирован: 14 апр 2020, 14:28

Re: AdirConnector

Непрочитанное сообщение mihinator » 14 июн 2020, 12:59

У меня один вопрос, чтобы не задавать кучу других. Откуда вы знаете, какие именно классы, методы, константы и т.д. из DLL библиотек АД нужно использовать для тех или иных целей? Вы один из их программистов? Или эта информация есть где-то помимо вашей головы?

bead
Сообщения: 1
Зарегистрирован: 17 сен 2020, 00:10
Поблагодарили: 1 раз

Re: AdirConnector

Непрочитанное сообщение bead » 17 сен 2020, 00:21

piyyy писал(а):Вызов OrderSendManager.Instance.Init() не имеет смысла, т.к. он ничего не делает. Единственный результат это создание объекта OrderSendManager (см. паттерн Singleton). Что эквивалентно:

Код: Выделить всё

var _orderSendManager = OrderSendManager.Instance;


Однако, до вызова OrderSendManager.CreateClientOrderEntity() он и так создается в рантайме.

Не знаю где он создается, но если не инициализировать OrderSendManager.ClientOrderNum, то заявка успешно будет отклонена по причине нулевого значения этого параметра.
В процессе создания OrderSendManager() происходит как раз получение этого актуального номера заявки, который затем приклеивается через дефис к ConnectionManager.Instance.UserCredentials.OrderPrefix, и составляет полный номер заявки.

Код: Выделить всё

ConnectionManager.Instance.OnLoginLastExtNum += Instance_OnLoginLastExtNum;

private static void Instance_OnLoginLastExtNum(uint loginLastExtNumEntity)
{
   ClientOrderNum = loginLastExtNumEntity;
}


Если не хочется вызывать Init(), можно тупо повесить обработчик после получения Authorized

Код: Выделить всё

ConnectionManager.Instance.OnLoginLastExtNum += Instance_OnLoginLastExtNum;

        private void Instance_OnLoginLastExtNum(uint num)
        {
            OrderSendManager.ClientOrderNum = num;
        }


И уже для создания заявки заполнять этот номер. Причем в get для ClientOrderNum стоит автоинкремент, поэтому его только один раз надо читать для заявки.

Код: Выделить всё

 
                clientOrder.ClientOrderNum = OrderSendManager.ClientOrderNum;


Для округления цен к делителю нашел шикарный метод в интернете:

Код: Выделить всё

        double RoundToNearest(double n, double x)
        {
            return Math.Round(n / x) * x;
        }]


Но этого все равно недостаточно, поэтому уже при генерации заявки делаю так:

Код: Выделить всё

int roundNums = step_val.Length - 2; // step_val содержит шаг цены в текстовом виде
            if (roundNums < 1)
                roundNums = 0;
clientOrder.LimitPrice = Math.Round(limitPrice, roundNums);

:thumbs_up:

Для тестирования создания ордеров можно пользоваться следующим методом, затем визуально сравнить текст заявки и внести исправления. Может пригодится кому.
Нужно добавить в проект ADir.Templates.dll, и using Templates;

Код: Выделить всё

        private String MakeOrderText(ClientOrderEntity clientOrder)
        {
            UserCredentialsEntity credentials = ConnectionManager.Instance.UserCredentials;
            clientOrder.SignTime = ConnectionManager.Instance.GetServerTime();
            TemplateAdditionalParams additionalParams = default(TemplateAdditionalParams);
            additionalParams.ClientNumEDocument = TextOrder.CreateClientNumEDocument(credentials.OrderPrefix, clientOrder.ClientOrderNum);
            DateTime serverTime = ConnectionManager.Instance.GetServerTime(FrontEndType.OperServer);
            additionalParams.SystemTime = serverTime;
            additionalParams.SysName = credentials.Login;
            additionalParams.ManagerName = credentials.FullName;
            TextOrder.CreateTextDocument(TextOrder.DataStorage, clientOrder, additionalParams, out string textOrder, out string errorMessage);
            return textOrder;
           
        }


mihinator писал(а):У меня один вопрос, чтобы не задавать кучу других. Откуда вы знаете, какие именно классы, методы, константы и т.д. из DLL библиотек АД нужно использовать для тех или иных целей? Вы один из их программистов? Или эта информация есть где-то помимо вашей головы?

Информация есть в ILSpy и бесцельно проведенных часах)


Вернуться в «Клиентский API»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя