![]() ![]() |
° Начало ° Ответить ° Статистика ° Регистрация ° Поиск ° 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 с двумя параметрами принимают на вход ид. версии объекта + ид. объекта (версия вверху связи, объект - внизу). Но есть дополнительные методы с тремя и более параметрами, в которых можно указать, что для нижнего связанного объекта вы также передали ид. версии объекта. |
На форуме сейчас: гостей - 1 пользователей - 0 |
Наибольшее количество посетителей: 87 [1 Янв 2017 02:23:26] гостей - 87 / пользователей - 0 |
miniВВ © 2001-2023 |