Положительная сторона изменений в том, что API плагинов теперь документирован (см.
LoodsmanClientApi.chm) и предоставляет разработчику больше возможностей. Из недостатков стоит отметить несовместимость API со старыми версиями плагинов, и даже между 13 и 14 версиями. И документации мало, и местами она не соответствует реальному положению дел. И баги в IDataSet... Но не будем о грустном.
Итак, основные изменения, которые удалось увидеть на сегодняшний день:
- Объект, реализующий
IDataSet, был вынесен в отдельную библиотекуDataProvider.dll. И это было бы незначительное изменение, не затрагивающее плагины, если бы не изменился идентификатор (GUID) интерфейсаIDataSet. Дело осложняется тем, что в Delphi вызовQueryInterfaceможет присутствовать неявно при приведении типов. - В версии 14.0.0.905 у интерфейса
IDataSetне работают методыIDispatch, такие какGetIDsOfNamesиInvoke. В службе поддержки обещали исправить. - Объекты, реализующие
IPDMObject,IWFObjectи подобные переехали вPDMObjects.dll. В версии 14 в иерархии интерфейсов этих объектов появился новый предокIProtectedPDMData, в результате чего все эти объекты несовместимы между 13 и 14 версиями. - У
IPluginCall.GetDataSetизменился тип возвращаемого значения сIDataSetнаIDispatch. Это изменение неудобно тем, что в старых плагинах потребуется исправить все вызовыGetDataSet. - Пункты меню плагина теперь неактивны, если в клиенте выбрано что-нибудь, отличное от объекта или документа, или если не выбрано ничего. В документации сказано, что это сделано «для предотвращения ошибок, которые могут возникнуть в уже разработанных модулях расширения». Если плагину нужно работать с бизнес-процессами или заданиями, или если нужно, чтобы пункты меню были доступны, когда в клиенте ничего не выбрано, DLL плагина должна экспортировать функцию
GetPluginInfo(есть в шаблоне подключаемого модуля). - По умолчанию теперь все пункты меню подключаемых модулей помещаются в отдельное меню «Дополнения». При необходимости их можно перенести в другое место меню, вынести на панель инструментов или добавить в контекстное меню.
Для перевода плагинов на новый API от разработчика потребуется использовать новый модуль
Loodsman_TLB.pas (и связанные с ним) от нужной версии комплекса.
В приведенных ниже модулях
Loodsman_TLB.pas тип возвращаемого значения IPluginCall.GetDataSet исправлен на IDataSet, и в версиях 13 и 14 добавлен тип IDataSet = DataProvider_TLB.IDataSet. В результате старые плагины можно собирать с новыми заголовочными файлами без изменения кода.
Теперь есть две версии шаблона подключаемого модуля: полностью самостоятельный проект PluginSample2 и зависящий от общей инфраструктуры PluginSample.
Если вам не нужно отдельное подключение к серверу приложений, или вы используете старую версию Delphi (до Delphi 2010), то лучше использовать независимый PluginSample2. В настройках проекта необходимо будет указать путь к файлам нужной версии API в
SearchPath. Для версий 8.5−10 это APIv10, для версии 11, 13 и 14 это APIv11, APIv13 и APIv14 соответственно.
Шаблон подключаемого модуля PluginSample может использовать самостоятельное подключение к серверу приложений IRemoteConnection и собственную реализацию IDataSet. По умолчанию плагин собирается для API версии 14, но можно собрать со старой версией
IDataSet (директива UseV11DataSet) или с объектами IPDMObject, IWFObject версии 13 (директива UseV13PDMData).
Для новых версий комплекса доработан код из статьи Подключение к серверу приложений. Наборы данных. Реализация теперь поддерживает интерфейсы
IDataSet старых и новых версий.
Весь код, описанный в статье, находится на GitHub:
github.com/achechulin/loodsman.
Текущую версию кода можно скачать без клиента Git или SVN, нажав кнопку «Download ZIP» в правой части страницы репозитория.



Комментариев нет:
Отправить комментарий