Интеграция

Программирование для SmarTeam.

Интеграция

Сообщение apufidom » 23 ноя 2007 12:50

Существуют ли какие-либо рекомендации к написанию интеграций к смартиму?
Хочется почитать комментарии людей, которые писали интеграцию и знают, как это делается.
apufidom
Новичок
Новичок
 
Сообщения: 16
Зарегистрирован: 23 ноя 2007 12:35

Re: Интеграция

Сообщение green_fx » 07 дек 2007 11:38

Конечно есть :)
Если речь идет о web-editor'e одно, если об обычном другое. Для какого?
Аватара пользователя
green_fx
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 28 сен 2007 10:46

Re: Интеграция

Сообщение apufidom » 07 дек 2007 13:27

Для обычного.
Хотелось бы посмотреть пример исходного кода простой готовой интеграции (желательно на C#) чтобы понять, как правильно её делать.
Те "примеры", что приведены в COM API, совсем не похожи на рекомендации (например, там используется тестовый юзер joe без пароля)
apufidom
Новичок
Новичок
 
Сообщения: 16
Зарегистрирован: 23 ноя 2007 12:35

Re: Интеграция

Сообщение Геройчиковый » 24 дек 2007 12:20

Поддерживаю автора! +1
Интеграцию в студию...
Можно на любом языке, лишь бы простенький и понятный пример. Хочеться "пощупать" взаимодействие программ..
Будь у героев время подумать - героизма не было бы вовсе...
Все люди, занятые истинно важным делом, всегда просты, потому что не имеют времени придумывать лишнее. (Лев Николаевич Толстой)
Делай, что можешь, с тем, что имеешь, там, где ты есть. (Теодор Рузвельт)
Аватара пользователя
Геройчиковый
Участник
Участник
 
Сообщения: 170
Зарегистрирован: 25 сен 2007 08:52
Откуда: Балашиха

Re: Интеграция

Сообщение apufidom » 24 дек 2007 12:24

Похоже, green_fx - единственный, у кого есть такой пример. Только его самого тут с десятого декабря не видно. Может, личное сообщение написать?
apufidom
Новичок
Новичок
 
Сообщения: 16
Зарегистрирован: 23 ноя 2007 12:35

Re: Интеграция

Сообщение Egor_K » 24 дек 2007 13:55

Похоже, green_fx - единственный, у кого есть такой пример. Только его самого тут с десятого декабря не видно. Может, личное сообщение написать?

Просто Грин показывается на форуме периодически редко, когда зайдет - тогда и ответит, надеюсь...
Что не жни и что не куй, все равно CATIA руль... :Yahoo!:
Аватара пользователя
Egor_K
Forum Manager
 
Сообщения: 225
Зарегистрирован: 11 сен 2007 18:50
Откуда: Красноярск

Re: Интеграция

Сообщение apufidom » 24 янв 2008 11:13

Теперь конкретные вопросы.
Как определить папку смартима по умолчанию (которая по умолчанию Мои документы\SmarTeam\Work)? Если я всё правильно понимаю, нужно сначала сохранить туда документ, а потом передать диалогу сохранения:
Код: Выделить всё
  ISmGUIServices smGUIServices = (ISmGUIServices)smSession.GetService("SmGuiSrv.SmGUIServices");
  ISmSaveAsDialog dialog = (ISmSaveAsDialog)smGUIServices.GUIStore.NewSaveAsDialog();
  dialog.FileName = document.Filename;

Так вот, документ document нужно сначала сохранить в Мои документы\SmarTeam\Work.
Вопрос: папка Work всегда называется "Work" и лежит в папке "Мои документы\SmarTeam"?
Если нет, как получить её расположение в системе для текущего пользователя?
apufidom
Новичок
Новичок
 
Сообщения: 16
Зарегистрирован: 23 ноя 2007 12:35

Re: Интеграция

Сообщение Геройчиковый » 25 янв 2008 11:12

apufidom писал(а):Теперь конкретные вопросы.
Как определить папку смартима по умолчанию (которая по умолчанию Мои документы\SmarTeam\Work)? Если я всё правильно понимаю, нужно сначала сохранить туда документ, а потом передать диалогу сохранения:
Код: Выделить всё
  ISmGUIServices smGUIServices = (ISmGUIServices)smSession.GetService("SmGuiSrv.SmGUIServices");
  ISmSaveAsDialog dialog = (ISmSaveAsDialog)smGUIServices.GUIStore.NewSaveAsDialog();
  dialog.FileName = document.Filename;

Так вот, документ document нужно сначала сохранить в Мои документы\SmarTeam\Work.
Вопрос: папка Work всегда называется "Work" и лежит в папке "Мои документы\SmarTeam"?
Если нет, как получить её расположение в системе для текущего пользователя?


Я не совсем понял, что вам надо, но попытаюсь ответить...
Во-первых, папка Work в Моих документах создаеться автоматически для всех пользователей Едитора. Есть еще какой-то Ворк в самой папке СТ. В чем их разница, пока что не задумывался 8)
Во-вторых: Если хочеться изменить место сохранения файла по-умолчанию(для сейв эз диалога) - то в мане и в правду, не нашел такого параметра, есть тока файл нейм... Могу посоветовать тоолько попробовать в файлнейме явно указать имя, т.е. типа "C:\STwork\MyDoc". Ну или полазить в ControlsProperties\OptionsProperties.
Будь у героев время подумать - героизма не было бы вовсе...
Все люди, занятые истинно важным делом, всегда просты, потому что не имеют времени придумывать лишнее. (Лев Николаевич Толстой)
Делай, что можешь, с тем, что имеешь, там, где ты есть. (Теодор Рузвельт)
Аватара пользователя
Геройчиковый
Участник
Участник
 
Сообщения: 170
Зарегистрирован: 25 сен 2007 08:52
Откуда: Балашиха

Re: Интеграция

Сообщение apufidom » 01 фев 2008 09:03

Hero, вопрос не в том, как сохранить файл из определённого места. Просто не хочется, чтобы повсюду валялись смартимовские файлы. Имхо, они все должны быть в одном месте - в Мои документы\SmarTeam\Work (по умолчанию). Но не факт, что это место нельзя изменить. То есть я не могу писать в интеграции
Код: Выделить всё
Документ.Сохранить(ТекущийПользователь.МоиДокументы + "\SmarTeam\Work\" + Документ.ИмяФайла)

Я должен написать что-то типа
Код: Выделить всё
Документ.Сохранить(Смартим.РабочаяПапкаТекущегоПользователя + Документ.ИмяФайла)
apufidom
Новичок
Новичок
 
Сообщения: 16
Зарегистрирован: 23 ноя 2007 12:35

Re: Интеграция

Сообщение Геройчиковый » 01 фев 2008 12:17

apufidom писал(а): Просто не хочется, чтобы повсюду валялись смартимовские файлы.

Эм, ну дык они и не валяются где попало.. они в папке Ворк(это так сказать временные файлы, остальные в хранилище(Волт)
apufidom писал(а):Но не факт, что это место нельзя изменить.

ааа, вроде бы начинаю понимать,что вам хочется... 8) В смыле вы хотите, чтобы пользователь не мог менять место куда сохраняються файлы? в смысле чтобы от него зависело только имя, а папка уже была определена и не менялась?

А вод здесь я вообще в ступоре :Search: :
apufidom писал(а): То есть я не могу писать в интеграции
Код: Выделить всё
Документ.Сохранить(ТекущийПользователь.МоиДокументы + "\SmarTeam\Work\" + Документ.ИмяФайла)

Я должен написать что-то типа
Код: Выделить всё
Документ.Сохранить(Смартим.РабочаяПапкаТекущегоПользователя + Документ.ИмяФайла)


Разьве ТекущийПользователь.МоиДокументы + "\SmarTeam\Work\" не есть Смартим.РабочаяПапкаТекущегоПользователя?
МоиДокументы\SmarTeam\Work - это есть папка для сохранения временных файлов пользователя и т.п. Т.е. это - его "рабочая папка". Я чего-то вообще запутался в чем вопрос собственно... :%)
Будь у героев время подумать - героизма не было бы вовсе...
Все люди, занятые истинно важным делом, всегда просты, потому что не имеют времени придумывать лишнее. (Лев Николаевич Толстой)
Делай, что можешь, с тем, что имеешь, там, где ты есть. (Теодор Рузвельт)
Аватара пользователя
Геройчиковый
Участник
Участник
 
Сообщения: 170
Зарегистрирован: 25 сен 2007 08:52
Откуда: Балашиха

Re: Интеграция

Сообщение apufidom » 08 фев 2008 12:11

Ладно, не важно :) Попроще срошу что-нибудь
Вот есть у меня сессия smSession, как для неё получить список проектов, а для каждого проекта - список подпроектов и документов?
apufidom
Новичок
Новичок
 
Сообщения: 16
Зарегистрирован: 23 ноя 2007 12:35

Re: Интеграция

Сообщение Геройчиковый » 15 фев 2008 18:43

apufidom писал(а):Ладно, не важно :) Попроще срошу что-нибудь
Вот есть у меня сессия smSession, как для неё получить список проектов, а для каждого проекта - список подпроектов и документов?

Уже немного отступаем от темы интеграции.. оффтоп и все такое. Но на вопрос отвечу:
Есть 2 варианта получения всяких вещей из дерева объектов:
1ый- если у тебя хоть что-то там выделено в СТ, с чем ты работешь, то из FirstPara(или из второго) доставай обджектАЙДИ и классАЙДИ и уже от этого объекта бери родителей, детей и его связанные и т.п.
2ой - через ГУИсервис... берешь View и то, что у тебя там щас отображаеться - и ужеиз вида вытягиваешь объект, ну а потом его детей/родителей и все, что тебе надо.
А вот как это получить - детей - Set Childrens = Obj.RetrieveChildren(myQueryDef)
где КвериДеф возьми пустое
Родителей - Set Parents= Obj.RetrieveParents(myQueryDef)
и все... вот и среди них переберай до нужного тебе...
А ссвязаные объекты и т.п. :
Set Relations = Obj.RetrieveRelations(myQueryDef)
и среди них ищи все, что тебе надо.
Будь у героев время подумать - героизма не было бы вовсе...
Все люди, занятые истинно важным делом, всегда просты, потому что не имеют времени придумывать лишнее. (Лев Николаевич Толстой)
Делай, что можешь, с тем, что имеешь, там, где ты есть. (Теодор Рузвельт)
Аватара пользователя
Геройчиковый
Участник
Участник
 
Сообщения: 170
Зарегистрирован: 25 сен 2007 08:52
Откуда: Балашиха

Re: Интеграция

Сообщение apufidom » 18 фев 2008 11:21

Hero писал(а): Уже немного отступаем от темы интеграции.. оффтоп и все такое.

Ну почему... Видел интеграции, которые отображают дерево объектов

Итак, всё в смартиме сделано через одно место - через гуи?
По идее, дерево объектов должно существовать отделно от графического интерфейса. И я хотел бы получить его независимо от того, что там у меня выделено или что отображается. Что у меня выделено - это другой вопрос.
Конечно, израильские программисты могли думать по-другому :)

Итак, у меня ничего не выделено и ничего не отображается.
Код: Выделить всё
$smApp.Visible = $false

Нужно получить список корневых проектов. Как? (Как получить детей я понял, спасибо)

Что такое FirstPara?
Как взять View?
apufidom
Новичок
Новичок
 
Сообщения: 16
Зарегистрирован: 23 ноя 2007 12:35

Re: Интеграция

Сообщение Геройчиковый » 19 фев 2008 16:28

Хочешь получать объекты без СТ? - Бери СКЛ.
ФестПар - это Рекорд лист, содержащий множество аттрибутов, в т.ч. об объекте, который передаеться в скрипт и от кооторого будут плисать все Твои программы, без использования постороннего ковдинга конецно же 8)
Будь у героев время подумать - героизма не было бы вовсе...
Все люди, занятые истинно важным делом, всегда просты, потому что не имеют времени придумывать лишнее. (Лев Николаевич Толстой)
Делай, что можешь, с тем, что имеешь, там, где ты есть. (Теодор Рузвельт)
Аватара пользователя
Геройчиковый
Участник
Участник
 
Сообщения: 170
Зарегистрирован: 25 сен 2007 08:52
Откуда: Балашиха

Re: Интеграция

Сообщение apufidom » 26 фев 2008 10:51

Пробую через ObjectStore.GetTopMostObjects(MainObject As ISmObject, Definition As ISmQueryDefinition, SpecClassId As Integer)

Зачем методу GetTopMostObjects все эти параметры? Что туда передавать?
apufidom
Новичок
Новичок
 
Сообщения: 16
Зарегистрирован: 23 ноя 2007 12:35

Re: Интеграция

Сообщение Геройчиковый » 26 фев 2008 17:51

Эм.. Ну этот метод - Top most or Desktop objects are objects that indicate the beginning or the top of the specific composition tree.
Это именно то, что надо? просто если хочеться получить главный объект проекта, вроде бы это не тот метод.
Зачем все эти пар-ры? Не знаю, с этим методом не работал. Потыкайте в них - там все написано что они делают и для чего они.
Будь у героев время подумать - героизма не было бы вовсе...
Все люди, занятые истинно важным делом, всегда просты, потому что не имеют времени придумывать лишнее. (Лев Николаевич Толстой)
Делай, что можешь, с тем, что имеешь, там, где ты есть. (Теодор Рузвельт)
Аватара пользователя
Геройчиковый
Участник
Участник
 
Сообщения: 170
Зарегистрирован: 25 сен 2007 08:52
Откуда: Балашиха

Re: Интеграция

Сообщение apufidom » 03 мар 2008 11:19

Потыкайте в них - там все написано что они делают и для чего они

Если ты про STComRefGuide, то тыканье по параметрам (точнее, по их типам) не даст описания назначения параметров в данном методе. В описании метода GetTopMostObjects описания параметров пустые (параметры просто ещё раз перечислены)

просто если хочеться получить главный объект проекта, вроде бы это не тот метод

А какой метод?
Повторюсь, хочется получить список проектов верхнего уровня (я не знаю, что такое главный объект проекта)
apufidom
Новичок
Новичок
 
Сообщения: 16
Зарегистрирован: 23 ноя 2007 12:35

Re: Интеграция

Сообщение Smike » 25 май 2008 11:22

Есть несколько вариантов написания интеграции к ST:

1) С использованием уже упомянутого ISmSaveAsDialog dialog = (ISmSaveAsDialog)smGUIServices.GUIStore.NewSaveAsDialog();
2) С использованием ISmCAD, там есть много готовых разработок
3) Делать Save самому, используя более низкий API, это особенно помогает, когда нужно делать batch-load.

В качестве примеров:

1) Пришлось делать некий отход от стандартной имплементации CATIA-integration, для этого очень помогла System-Configuration setting CATIA.CALL_SCRIPT
2) Сделали свой Design-Copy, пока интеграция только с SolidWorks. По дороге поняли, что реализации работы с деревом в ST таки-нет. Сделали свою хитрую рекурсивную штуку, параллельно создав нечто вроде алтернативы для ISmObjects.
Smike
Новичок
Новичок
 
Сообщения: 32
Зарегистрирован: 24 май 2008 22:13


Вернуться в Программирование

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron