Добрый день. Захотелось попробовать создавать свои компоненты для 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)
Проверьте пожалуйста, все ли обязательные поля вы определили в своем компоненте?
Так же необходимо проверить правильно ли объявлен класс компонента, вот пример:
[javascript]
TCalculatorControl = class(TFrameItem, ICalculatorControl, IConnectionPointContainer)
[/javascript]
Вы создаёте элемент управления или оконный компонент?
С ув. Величко Максим, разработчик 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:
Объявление класса контроал
[csharp]
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;
[/csharp]
Объявление интерфейса IFloatDataControl
[csharp]
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;
[/csharp]
Определение контрола в IDL-файле
[csharp]
// ------------------------------------------------------------------
// 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);
};
[/csharp]
Максим извините, но разве TFloatDataControl не должен наследовать TAutoObject?
Добрый день, Сергей!
Всё верно, просто в данном примере указно наследование от TDataControl, который по иерархии наследования, наследует TAutoObject.
Так же необходимо в секции initialization добавить следующий код:
[csharp]
initialization
CoInitialize(nil);
[/csharp]
У меня похожая ситуация, создаю компонент для добавления его в дерево сервисов. При добавлении выдает: "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" .
Здравствуйте!
Те компоненты, о которых Вы пишете не реализуются на уровне конфигурации. Это сугубо ядровая логика