Добрый день. Захотелось попробовать создавать свои компоненты для TS CRM. Для разработки использую Delphi 7 и TS CRM 3.3.2. Создал свой COM объект подключил интерфейсы IWindowComponent, ICoreCollectionItem, ICoreObject. Указал родительский интерфейс для своего компонента IWindowComponent. Скомпилировал, зарегистрировал dll. Добавил компонент в файл WindowSettings.xml. В результате после создания окна в Администраторе TS появился мой компонент,
но при попытки добавить его в дерево объектов возникает ошибка:
Объект MyComponent.MyComponent ({095C50B4-37FD-4653-9ECE-6D8D9C718AD8}) не поддерживает интерфейс {12498E9F-2F20-4491-AAF8-F258E72BEF5B} ({12498E9F-2F20-4491-AAF8-F258E72BEF5B}).
Был бы очень благодарен если бы подсказали в чем может быть ошибка или дали ссылку на простейший пример разработки компонентов для TS.
Нравится
Спасибо за Ваше обращение. Мы зарегистрировали его в Службе технической поддержки и назначили специалиста, который сможет Вас компетентно проконсультировать по данному вопросу.
Добрый день. А можно узнать когда примерно Ваш специалист проконсультирует меня ?:smile:
Добрый день!
Обращение находится в департаменте разработки, решение вопроса будет предоставлено до 03.02.2014.
Добрый день, Сергей!
По этой ссылке статья о работе с оконными компонентами в Terrasoft: Работа с окнами (Window)
Проверьте пожалуйста, все ли обязательные поля вы определили в своем компоненте?
Так же необходимо проверить правильно ли объявлен класс компонента, вот пример:
TCalculatorControl = class(TFrameItem, ICalculatorControl, IConnectionPointContainer)
Вы создаёте элемент управления или оконный компонент?
С ув. Величко Максим, разработчик Terrasoft 3.x
Здравствуйте Максим. Спасибо за ссылку, но работать с компонентами Terrasoft я умею.
В классе компонента интерфейсы я объявил по примеру компонентов Terrasoft.
Свойства я унаследовал от IWindowComponent.
Я пробовал создавать и элементы управления и оконный компонент.
Не понятно, что это за интерфейс {12498E9F-2F20-4491-AAF8-F258E72BEF5B}, в реестре системы он не зарегистрирован.
Пробовал создавать компонент на С# та же история.
Был бы очень благодарен за простейший пример на любом языке программирования, можно создания пустого компонента.
Добрый день, Сергей!
{12498E9F-2F20-4491-AAF8-F258E72BEF5B} - это ID интерфейса IInternalWindowComponent
Попробуйте подключить этот интерфейс, он реализован в библиотеке TSWindowLibrary.dll
Добрый день, Сергей!
Хочу поинтересоваться как у Вас успехи с компонентом? Получилось ли добавить его в дерево? Ошибка исчезла?
Здравствуйте Максим. К сожалению у меня не получилось. При подключении интерфейса IInternalWindowComponent, пишет что необъявленный идентификатор.
TMyComponent = class(TAutoObject, IMyComponent, ICoreCollectionItem, ICoreObject, IWindowComponent, IInternalWindowComponent)
У меня такое ощущение, что я пошел не в том направлении, наверно все сложнее чем мне показалось на первый взгляд. Без явного примера с одним TLB файлом тяжело реализовать компонент. Будет свободное время продолжу попытки:smile:
Спасибо за помощь.
Дмитрий, Вы можете выложить пример на Delphi для создания простого оконного компонента? Это очень актуально.
Это действительно актуально. У меня есть много полезных COM библиотек, написаных на разных языках, в том числе и для телефонии, все они прекрасно работаю в Террасофт, но хотелось бы сделать их компонентами системы.
Дмитрий если разработчики согласятся выложить простейший пример создания компонента на любом из языков программирования, прошу Вас сообщить мне :smile:.
Добрый день!
Вот пример создания COM-контрола FloatDataControl:
Объявление класса контроал
TFloatDataControl = class(TDataControl, IFloatDataControl, IDataControl, IBaseDataControl, IFrameItem, IFrameBaseItem, IWindowControl, IWindowComponent, ICoreCollectionItem, ICoreObject, IInternalControlWithButtons) ... protected function Get_Buttons(): IActionMenu; safecall; procedure Set_Buttons(const AValue: IActionMenu); safecall; function Get_ButtonsName(): WideString; safecall; procedure Set_ButtonsName(const AValue: WideString); safecall; ... protected property Buttons: IActionMenu read Get_Buttons write Set_Buttons; property ButtonsName: WideString read Get_ButtonsName write Set_ButtonsName; public procedure Initialize(); override; destructor Destroy(); override; end;
Объявление интерфейса IFloatDataControl
IFloatDataControl = interface(IDataControl) ['{E2B975D4-6C8D-4FCA-8C80-46AB6DCECD36}'] function Get_Buttons: IActionMenu; safecall; procedure Set_Buttons(const Value: IActionMenu); safecall; property Buttons: IActionMenu read Get_Buttons write Set_Buttons; end;
Определение контрола в IDL-файле
// ------------------------------------------------------------------ // ILookupDataControl (2043XX) // ------------------------------------------------------------------ [ odl, uuid(8670BB97-7134-4FED-A3E8-79EE08E25B6F), version(1.0), helpstring("Dispatch interface for LookupDataControl Object"), dual, oleautomation ] interface ILookupDataControl : IDataControl { [id(204301), propget] HRESULT SelectWindowUSI([out, retval] BSTR* Value); [id(204301), propput] HRESULT SelectWindowUSI([in] BSTR Value); [id(204302)] HRESULT UnprepareDropDownList(); [id(204303), propget] HRESULT Buttons([out, retval] IActionMenu** Value); [id(204303), propput] HRESULT Buttons([in] IActionMenu* Value); [id(204304), propget] HRESULT Text([out, retval] BSTR* Value); };
Максим извините, но разве TFloatDataControl не должен наследовать TAutoObject?
Добрый день, Сергей!
Всё верно, просто в данном примере указно наследование от TDataControl, который по иерархии наследования, наследует TAutoObject.
Так же необходимо в секции initialization добавить следующий код:
initialization CoInitialize(nil);
У меня похожая ситуация, создаю компонент для добавления его в дерево сервисов. При добавлении выдает: "Object doesn't support interface {BFA833D5-0868-426E-AABE-05C0D5AFA5D0}". Это что за интерфейс?
К сожалению мне так и не удалось полноценно внедрить компонент. Было бы не плохо если бы выложили бы подробный пример создания компонента террасофт.
Добрый день, Алексей!
{BFA833D5-0868-426E-AABE-05C0D5AFA5D0} - это ID интерфейса IInternalService.
Приятного дня!
"Вильшанский Дмитрий" написал:{12498E9F-2F20-4491-AAF8-F258E72BEF5B} - это ID интерфейса IInternalService.
В принципе это и так было понятно из сообщения об ошибки.:smile:
Это какой то скрытый интерфейс?
В TSObjectLibrary его нет...
Есть какая нибудь tlb с этими внутренними интерфейсами?
"Шмитько Алексей Анатольевич" написал:Это какой то скрытый интерфейс?
В TSObjectLibrary его нет...
Есть какая нибудь tlb с этими внутренними интерфейсами?
Алексей, это внутренний интерфейс и он находится в библиотеке TSObject.bpl
"Вильшанский Дмитрий" написал:Алексей, это внутренний интерфейс и он находится в библиотеке TSObject.bpl
Эта библиотека простым смертным недоступна, я так понимаю?
У меня версия 3.3.2.157
Алексей, данная библиотека доступна в бинарных файлах. Ее просто необходимо подключить/добавить.
Не получается подгрузить TSObject.bpl, т.к конфликтует с rtl70.bpl. C динамической подгрузкой тоже ничего не получилось. Использую Delphi 7.
Я так понимаю, что TSObject.bpl это run-time пакет и просто так его не подключить хотелось бы получить инструкцию как его подключать.
У меня вообще эти интерфейсы находятся в TSObjectLibrary.dll. Это "служебные" интерфейсы для разработчиков. Я просто взял и добавил в своей Type Lib недостающий интерфейс с ID из ошибки.
И он перестал ругаться :)
Но дальше пока не стал копать.
Я то конечно пишу, а толку? За 2 года не получил полезной информации. Сначала пишут одно потом другое.
"Перонко Сергей Сергеевич" написал:Я то конечно пишу, а толку? За 2 года не получил полезной информации. Сначала пишут одно потом другое.
100%
"Котенко Александр" написал:Здравствуйте.
Пишите, если возникнут вопросы.
Вопросы есть :)
Вы сотрудник компании Terrasoft? Если да, то можно ли получить модуль с объявлением Internal интерфейсов?
Здравствуйте.
Исходные файлы внутренней реализации кода закрыты. Мы можем предоставить idl-файл (во вложении), в котором описаны доступные интерфейсы библиотеки TSObjectLibrary.dll. Если возникнут сложности - прикрепите пример своего компонента чтобы можно было понять в чем проблема.
Извините, но зачем предоставлять idl файл который я и так могу получить из TSObjectLibrary.dll.
Проблема заключается в том что для разработки необходимо подключить пакет TSObject.bpl. Это не возможно сделать т.к. скорей всего это run-time пакет. А необходимый интерфейс находится именно в этом пакете. Я конечно не исключаю пробелы в знаниях делфи, поэтому прикрепляю свой компонент.
:lol:
Вы или не поняли тематику данной проблемы или издеваетесь )))
Могли бы изначально написать, что ваша компания запрещает создание компонентов, которые можно интегрировать в конфигурацию в Terrasoft Administrator. И всё.
Если Вас не затруднит, то предоставьте пожалуйста пример разработки компонента, который можно добавить в конфигурацию как показано ниже.
"Шмитько Алексей Анатольевич" написал:
Вы или не поняли тематику данной проблемы или издеваетесь )))
Могли бы изначально написать, что ваша компания запрещает создание компонентов, которые можно интегрировать в конфигурацию в Terrasoft Administrator. И всё.
Если Вас не затруднит, то предоставьте пожалуйста пример разработки компонента, который можно добавить в конфигурацию как показано ниже.
Нет издевательство было когда я написал в тех поддержку можно ли программно менять курсор мыши в террасофт на, что мне ответили "поменять его в в настройках системы windows" .
Здравствуйте!
Те компоненты, о которых Вы пишете не реализуются на уровне конфигурации. Это сугубо ядровая логика