Форумы Интермех
 ° Начало ° Ответить ° Статистика ° Регистрация ° Поиск ° RSS ° Wiki °

Форумы Интермех / API и разработка модулей расширения / Получение информации по объектам
Автор Сообщение
LLirik
Участник
НПО "Автоматика"

Дата: 9 Апр 2013 12:48:41 ° Поправил: LLirik


Всем день добрый.

Итак рассматриваем варианты работы с IPS.
Самые простые примеры по получению информации из IPS.
В данном примере рассмотрим вариант подключения из нашего приложения к IPS и получения количества типов объектов зарегистрированных в системе. Нам не требуется интерфейс универсального клиента, так что создаем просто консольное приложение. Код будет на С#.
В Reference(Ссылки) подключаем Intermech.Interfaces.dll
Для подключения требуется получить клиентскую сессию подключения IUserSession.

static IUserSession Connect(string Name, string pass)
{
var servURL = @"tcp://virtual-server:8008/IntermechRemoting/Server.rem";
//данная строка это адрес для подключения, подсмотреть её можно например в IMClient.exe.config разделах configuration->system.runtime.remoting->application->client параметр url
//возможен вариант получения адреса подключения, из самого конфигурационного файла, этот вариант вы можете увидеть в руководстве программиста
//но так как у нас программа считай на один запуск то и использую статическую строку

//Далее подключаемся,получаем свою сессию, выполняем авторизацию как и в примере в руководстве
IMServer serv = (IMServer)Activator.GetObject(typeof(IMServer), servURL);
IUserSession sess = serv.Session;
TimeSpan ts = DateTime.Now - time.ToUniversalTime();

sess.Login(Name,pass,Environment.MachineName,ts,0);
return sess;
}

static void Main(string[] args)
{
//подключаемся
var my_session=Connect("логин","пароль");
//формируем коллекцию типов объектов
var collection_of_type=session.GetRelationTypeCollection();
//выводим количество
Console.WriteLine("Количество зарегистрированных типов объектов:{0}",collection_of_type.Count);


Вот и все.
Может стоит продолжить? Возвращаемая коллекция типов ведь годится на что-то большее? Например, распечатаем поля этой коллекции у первых 5 типов.
PrintData(collection_of_type.Select(""), 5);
//Реализация PrintData
//maxcount- ограничение по максимуму, если 0 или меньше то печатать все
static void PrintData(DataTable data, int maxcount)
{
for (var q=0;((q<data.Row.Count)&&((q<maxcount)||(maxcount<1)));q++)
{
Console.WriteLine("row={0}",q);
for (var i=0;i<data.Columns.Count;i++)
{
Console.WriteLine("{0}={1}",data.Columns[i].ColumnName,data.Row[q][i]. ToString());
}
}

LLirik
Участник
НПО "Автоматика"

Дата: 9 Апр 2013 13:50:59


Интермех

Напишите как по типу объекта получить возможные типы связей для него.
Затем по экземпляру объекта получить возможные типы связей, назначенные экземпляры связей и связанные объекты.

После прочтения руководства ощущение что можно получить связь можно только если знаете оба связанных объекта.

Дмитрий
Участник
НПП ИНТЕРМЕХ

Дата: 10 Апр 2013 10:53:36


Цитата: LLirik
Напишите как по типу объекта получить возможные типы связей для него.


Допустимые типы связей между объектами можно получить следующими способами:

1. Через методы класса MetadataHelper в пространстве имён Intermech.Interfaces. Класс описан в п. 2.11 Руководства программиста IPS. Методы получения допустимых связей описаны в п. 2.11.5 и 2.11.6. Класс статический, поэтому к его методам можно обращаться напрямую (без получения служб и создания экземпляров класса).

2. Через методы класса IDBRelationsApplicabilityCollection в пространстве имён Intermech.Interfaces. Этот класс получается через пользовательскую сессию методом session.GetRelationsApplicabilityCollection(). Работа с допустимыми связями описана в п. 2.10 Руководства программиста IPS.

Продолжение следует...

Дмитрий
Участник
НПП ИНТЕРМЕХ

Дата: 10 Апр 2013 17:07:57 ° Поправил: Дмитрий


<div class="quoting">Цитата: LLirik
Затем по экземпляру объекта получить возможные типы связей, назначенные экземпляры связей и связанные объекты.</div>

Получение возможных типов связей у экземпляра делается просто - получаете у экземпляра тип объекта, а дальше смотри пост выше.

Для получения собственно связей объекта существуют следующие способы:

1. Получаете через сессию коллекцию связей Intermech.Interfaces.IDBRelationCollection и вызываете у неё методы типа ConsistFrom() (связи вниз), EntersIn (связи вверх) или Select() (просто набор связей). Работа со связями описана в главе 5 Руководства программиста IPS (книга первая). Сама коллекция IDBRelationCollection описана в п. 5.2.1 того же руководства. Желательно типизировать коллекцию не только типом связей, но и типом объектов, которые вы хотите получить - тогда поиск состава/применяемости работает быстрее.

2. При необходимости получить состав/применяемость объекта на все уровни вложенности можно воспользоваться службой ICompositionLoadService, которая объявлена в пространстве имён Intermech.Interfaces.Compositions. Служба работает на сервере, но её можно получить и на клиенте через сессионный метод GetCustomService. Служба описана в п. 5.2.5 Руководства программиста часть 1. Пример работы со службой можно посмотреть на инсталляционном диске IPS в файлах Files\Examples\Client\Intermech.Samples.Client\Sample_015_LoadComposit ion\Sample_015_LoadComposition.cs и Files\Examples\Client\Intermech.Samples.Client\Sample_019. Techcard\TechcardSampleWindow.cs

3. Если известны идентификаторы обоих связанных объектов, то можно получить непосредственно обработчик связи у сессии соответствующим методом GetRelation().

При работе с составом/применяемостью версионных объектов учитывайте механизмы автоматического подбора версий объектов. Помните, что связи в IPS идут от версии объекта ObjectID (она вверху связи) к объекту ID (он внизу связи). Обращайте внимание, каким идентификатором вы располагаете - ид. объекта или ид. версии объекта. Например, методы GetRelation с двумя параметрами принимают на вход ид. версии объекта + ид. объекта (версия вверху связи, объект - внизу). Но есть дополнительные методы с тремя и более параметрами, в которых можно указать, что для нижнего связанного объекта вы также передали ид. версии объекта.

Ваш ответ

Bold Style  Italic Style  Underlined Style  Image Link  Insert URL 
...



Перед отправкой "нелатинского" текста проверьте кодировку броузера!
 » Логин  » Пароль 
 

На форуме сейчас: гостей - 1
пользователей - 0
Наибольшее количество посетителей: 87 [1 Янв 2017 02:23:26]
гостей - 87 / пользователей - 0


miniВВ © 2001-2023