• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Использование GetDataSet в C#

Автор Алексей Стуков, 13.03.18, 14:44:32

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

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

Алексей Стуков

Доброго дня! Я совсем новенький в написании кода с использованием ЛОЦМАН API, просьба не бить за возможно туповатый вопрос :)

Итак, я пишу некое подобие поиска. Мне надо получить объекты, у которых определенный атрибут равен значению, которое вводит пользователь.

Вот я подключаюсь, все ок. Подключение к БД проходит.
Guid loodsmanGuid = new Guid("392BA982-A82F-44AB-BA8A-69BE25199F73");
            MainSystem loodsman = (MainSystem)Activator.CreateInstance(Type.GetTypeFromCLSID(loodsmanGuid, "serverlocman", true));
            loodsman.ConnectToDB("DBLocman", out inReturnCode, out stError);

Вот тут я задаю параметры для метода:

object[] Par = {"104",XMLSearchString,0};

104 - идентификатор родительского объекта ЛОЦМАН, в котором и буду искать
XMLSearchString - строка поиска, которую я сформировал в самом ЛОЦМАНе, сохранил и выставил в код. Она точно работает и правильно.

А вот дальше уже вопросы...

DataSet ds = new DataSet();
ds = (DataSet)PluginCall.GetDataSet("FindObjectsInContext",Par, out IDataSet);

ругается на null.

ds = (DataSet)PluginCall.RunMethod("FindObjectsInContext",Par);
аналогично

Как правильно воспользоваться GetDataSet  и FindObjectsInContext? И самое главное - какой тип данных возвращается? И как правильно в итоге найти объект(ы) с указанным значением атрибута, принадлежащие родительскому объекту с указанным идентификатором (в данном случае 104)?

Буду благодарен за любую помощь :)


Chaa

GetDataSet возвращает объект, реализующий интерфейс IDataSet.
То есть должно быть примерно так:

IDataSet ds = PluginCall.GetDataSet("FindObjectsInContext", Par) as IDataSet;

dosymep

Это для C#.

Если используешь IMainSystem, тогда требуется у этого интерфейса вызвать нужный метод и передать параметры/
Методы IMainSystem возвращают object (до .NET 4.0) или dynamic (после .NET 4.0), полученное значение требуется передать в свойство DATA интерфейса IDataSet.

Примерно должно получится следующее:

object oErrorCode;
object oErrorMessage;

var data = mainSystem.FindObjectsInContext(stContext, stShemeSearch, 0, out oErrorCode, out oErrorMessage);
if(oErrorCode != 0) // Проверка выполнения метода на свое усмотрение
   throw new Exception(Convert.ToString(oErrorCode));

IDataSet ds = new DataSet() { DATA = data };



Если используешь IPluginCall, тогда требуется у этого интерфейса вызвать GetDataSet с нужными параметрами.

Примерно должно получится следующее:
IDataSet ds = (IDataSet) pluginCall.GetDataSet("FindObjectsInContext", new object[] { stContext, stShemeSearch, 0 });

Алексей Стуков

Спасибо большое! Все получилось!