Положительная сторона изменений в том, что 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» в правой части страницы репозитория.
Комментариев нет:
Отправить комментарий