Лоцман ServerApi результат возврата методов

Автор DL, 21.01.22, 11:27:44

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

DL

Здравствуйте. В лоцмане есть dll Ascon.Plm.ServerApi.dll. Она реализует подключение к серверу приложений и выполнение всех необходимых функций, которые есть в api. Преимущество ее в том что нет необходимости работать через com, есть интерфейс IDisposable, не надо делать создание нетипизированных инстансов и потом приводить к нужному типу. Подключение на c# проходит великолепно, отрабатывает тоже все нормально. Единственная проблема - результат возврата функций, например GetProjectList, GetAttributeList и любых других, которые возвращают коллекцию выдает массив байт. Вопрос - к какому типу и каким образом впоследствии все это приводить? Если преобразовать массив к строке через Encoding или просто сохранить в файл массив байт, то там видны и заголовки таблиц и строковые значения атрибутов, но это явно какой-то тип какого-то датасета. Вопрос в том, что это за дататсет и как к нему привести этот массив байт?

Chaa

Это формат MIDAS (Multi-tier Distributed Application Services Suite).

Из дотнета можно попробовать подключить сборку Ascon.Plm.DataPacket.dll из комплекта Лоцмана и использовать из нее DataPacketReader.

Примерно так:
public DataTable GetProjects()
{
  byte[] data = (byte[]) c.GetProjectList();
  DataTable dataTable = new DataTable();
  using (DataPacketReader dataPacketReader = new DataPacketReader(data))
    dataTable.Load((IDataReader) dataPacketReader);
  return dataTable;
}
+ Благодарностей: 1

DL

Цитата: Chaa от 24.01.22, 08:26:11Из дотнета можно попробовать подключить сборку Ascon.Plm.DataPacket.dll из комплекта Лоцмана и использовать из нее DataPacketReader.

Спасибо. Я уже сделал через DataProvider, сначала переведя в IDataSet:
DataProvider.DataSet ds = new DataProvider.DataSet();
ds.Data = bytes;

а потому уже через функционал самого IDataSet уже можно привести куда угодно.
Для этого пришлось подключить COM объект DataProvider. Но ваш вариант лучше, можно обойтись полностью без COM. Спасибо