Страница 1 из 1

Интеграция

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

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

СообщениеДобавлено: 07 дек 2007 11:38
green_fx
Конечно есть :)
Если речь идет о web-editor'e одно, если об обычном другое. Для какого?

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

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

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

СообщениеДобавлено: 24 дек 2007 12:20
Геройчиковый
Поддерживаю автора! +1
Интеграцию в студию...
Можно на любом языке, лишь бы простенький и понятный пример. Хочеться "пощупать" взаимодействие программ..

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

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

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

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

Просто Грин показывается на форуме периодически редко, когда зайдет - тогда и ответит, надеюсь...

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

СообщениеДобавлено: 24 янв 2008 11:13
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"?
Если нет, как получить её расположение в системе для текущего пользователя?

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.

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

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

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

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

СообщениеДобавлено: 01 фев 2008 12:17
Геройчиковый
apufidom писал(а): Просто не хочется, чтобы повсюду валялись смартимовские файлы.

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

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

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

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


Разьве ТекущийПользователь.МоиДокументы + "\SmarTeam\Work\" не есть Смартим.РабочаяПапкаТекущегоПользователя?
МоиДокументы\SmarTeam\Work - это есть папка для сохранения временных файлов пользователя и т.п. Т.е. это - его "рабочая папка". Я чего-то вообще запутался в чем вопрос собственно... :%)

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

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

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)
и среди них ищи все, что тебе надо.

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

СообщениеДобавлено: 18 фев 2008 11:21
apufidom
Hero писал(а): Уже немного отступаем от темы интеграции.. оффтоп и все такое.

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

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

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

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

Что такое FirstPara?
Как взять View?

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

СообщениеДобавлено: 19 фев 2008 16:28
Геройчиковый
Хочешь получать объекты без СТ? - Бери СКЛ.
ФестПар - это Рекорд лист, содержащий множество аттрибутов, в т.ч. об объекте, который передаеться в скрипт и от кооторого будут плисать все Твои программы, без использования постороннего ковдинга конецно же 8)

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

СообщениеДобавлено: 26 фев 2008 10:51
apufidom
Пробую через ObjectStore.GetTopMostObjects(MainObject As ISmObject, Definition As ISmQueryDefinition, SpecClassId As Integer)

Зачем методу GetTopMostObjects все эти параметры? Что туда передавать?

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

СообщениеДобавлено: 26 фев 2008 17:51
Геройчиковый
Эм.. Ну этот метод - Top most or Desktop objects are objects that indicate the beginning or the top of the specific composition tree.
Это именно то, что надо? просто если хочеться получить главный объект проекта, вроде бы это не тот метод.
Зачем все эти пар-ры? Не знаю, с этим методом не работал. Потыкайте в них - там все написано что они делают и для чего они.

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

СообщениеДобавлено: 03 мар 2008 11:19
apufidom
Потыкайте в них - там все написано что они делают и для чего они

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

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

А какой метод?
Повторюсь, хочется получить список проектов верхнего уровня (я не знаю, что такое главный объект проекта)

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

СообщениеДобавлено: 25 май 2008 11:22
Smike
Есть несколько вариантов написания интеграции к 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.