Исправьте Баг в коннекторе AlfaDirect
Разбирался с тестовым примером SampleAlfaDirect. Не приходят события связанные с Portfolio и как следствие не получается определить размер открытой позиции по инструменту на момент начала торгов.
Стал смотреть код и вроде бы нашел причину.
В файле AlfaTables.cs есть такая функция:
public string[] GetLocalDbData(string where = null)
{
if (where == null)
where = _filtered && _activeFilter.Any() ?
"paper_no in ({0})".Put(string.Join(",", _activeFilter)) : string.Empty;
var res = _ad.GetLocalDBData(Name, _strFields, where);
Log("GetLocalDbData {0}: {1}", where, res);
// сразу после старта терминала АД может вернуть null (баг в терминале)
return res == null ? ArrayHelper.Empty<string>() : res.ToRows();
}
причем сами разработчики написали, что баг в терминале присутствует.
Мне кажется, что проще поправить баг Вам, чем ждать пока его исправят разработчики АД.
Наверное есть смысл поставить "заплатку" и если возвращается пустой res сделать еще несколько попыток, например вот так
public string[] GetLocalDbData(string where = null)
{
if (where == null)
where = _filtered && _activeFilter.Any() ?
"paper_no in ({0})".Put(string.Join(",", _activeFilter)) : string.Empty;
var res = _ad.GetLocalDBData(Name, _strFields, where);
for (int i = 0; i < 10; i++)
{
if (res != null) break;
System.Threading.Thread.Sleep(500);
res = _ad.GetLocalDBData(Name, _strFields, where);
}
Log("GetLocalDbData {0}: {1}", where, res);
// сразу после старта терминала АД может вернуть null (баг в терминале)
return res == null ? ArrayHelper.Empty<string>() : res.ToRows();
}
Поправьте, please!)