Версия 8
Способы расширения возможностей системы
Взаимодействие компонентов системы и дополнительных модулей (плагинов)
Взаимодействие компонентов системы и библиотек интеграции
Взаимодействие компонентов системы и специального клиента
Взаимодействие компонентов системы и бизнес-объектов
Плагин это …
Управление меню
InitUserDLL
PgiCheckMenuItem
Класс TVersion
Процедуры-обработчики
Вызовы методов сервера приложений
Управление клиентом
Подключение плагина
189.50K

Лоцман : PLM. версия 8

1. Версия 8

Расширение возможностей системы.
Дополнительные модули.
Управление меню.

2. Способы расширения возможностей системы

• Плагин – внешняя библиотека
расширяющая функционал клиента.
• Прокси – библиотека интеграции с
инструментом
• Специальные клиенты –
самостоятельные приложения
использующие методы СП для
манипуляций с объектами БД
• Бизнес-объект – внешний справочник
- поставщик данных для системы

3. Взаимодействие компонентов системы и дополнительных модулей (плагинов)

Сервер
БД
Сервер
приложений
RunMethod
ЛОЦМАН:Клиент
Плагин

4. Взаимодействие компонентов системы и библиотек интеграции

Сервер
БД
Сервер
приложений
Документ
Интегратор
ЛОЦМАН:Клиент
Инструмент
Proxy

5. Взаимодействие компонентов системы и специального клиента

Сервер
БД
Сервер
приложений
Специальный
клиент

6. Взаимодействие компонентов системы и бизнес-объектов

Сервер
БД
Сервер
приложений
Объект ЛОЦМАН
ЛОЦМАН:Клиент
Объект справочника
Внешний справочник

7. Плагин это …

Динамически подключаемая библиотека
(DLL), с расширением «*.pgi».
Плагин должен содержать 2 обязательные
функции, имеющие следующее назначение:
InitUserDLL – построение структуры меню;
PgiCheckMenuItem – контроль доступности
пунктов меню.
… и набор процедур-обработчиков,
соответствующих пунктам меню

8. Управление меню

Информация о пункте меню передается клиентскому модулю
функцией InitUserDLL
в виде массива
указателей
на
Возможные
положения
пунктов
меню
структуры данных типа:
TAddMenu = record
stMenu:
string[255]; BEFORE_MI_FILE,
MI_FILE,
AFTER_MI_FILE,
stFunction: string[255];
MI_VIEW,
end; AFTER_MI_VIEW, BEFORE_MI_VIEW,
MI_EDIT,
AFTER_MI_EDIT,
где stMenu
– это строка вида: BEFORE_MI_EDIT,
«МЕСТО#Уровень1#Уровень2#…#Название»,
МЕСТО –
MI_TOOLS,
AFTER_MI_TOOLS, BEFORE_MI_TOOLS,
строковый идентификатор определяющий положение
MI_HELP,
AFTER_MI_HELP,
BEFORE_MI_HELP
относительно
стандартных пунктов
главного меню,
например: MI_TOOL означает - внутри пункта меню
«Инструменты», приставки BEFORE_ и AFTER_ указывают,
размещение, соответственно, перед или после пункта меню
stFunction – имя процедуры-обработчика

9. InitUserDLL

Вызывается дважды. Первый раз - для определения объема
и выделения памяти под новые пункты меню. Второй – для
заполнения выделенной памяти информацией о структуре
меню и процедурах-обработчиках, соответствующих пунктам
меню.
function InitUserDLL (Value : Pointer) : Integer;
stdcall; export;
var
item : PAddMenu;
begin
if Value = nil then //первый вызов
Result := 2 //сколько будет пунктов в меню
else begin
//второй вызов
item := Value;
item.stMenu := 'AFTER_MI_VIEW#Плагин#Функция №1';
item.stFunction := 'menu_Func1';
inc(item);
item.stMenu := 'AFTER_MI_VIEW#Плагин#Функция №2';
item.stFunction := 'menu_Func2';
end;
end;

10. PgiCheckMenuItem

Вызывается при каждом обращении пользователя
к меню. Позволяет, в зависимости от параметров
выбранного к дереве клиента объекта и других
условий, устанавливать активность пунктов меню
function PgiCheckMenuItem(stFunction: string;
RunMethod: TRunMethod;
ParentVersion, ChildVersion: TVersion;
stLinkName, DataBaseName,stCheckOut: string):
boolean; stdcall;
begin
AssignRunMethod(RunMethod);
Result := False;
if stFunction = 'menu_Func1' then //только документы
Result := ChildVersion.boDocument;
if stFunction = 'menu_Func2' then //только объекты
Result := not ChildVersion.boDocument;
end;

11. Класс TVersion

Предназначен для описания объектов базы
данных. Реализация находится в PIClasses.pas.
Cодержит основные идентификационные
данные объекта:
inID
stType
stProduct
stVersion
boDocument





Уникальный идентификатор,
Тип объекта,
Ключевой атрибут
Номер версии
Признак документа
Имеет несколько конструкторов
FromEmpty
- создает пустой объект;
FromRecord
- из набора данных TDataSet
FromIDVersion - по ID объекта

12. Процедуры-обработчики

library PgiExample;
uses
SysUtils, Classes,
PIClasses in 'PIClasses.pas',
Unit1 in 'Unit1.pas',
frmInsertObjectUnit in 'frmInsertObjectUnit.pas',
frmNewVersionUnit
in 'frmNewVersionUnit.pas';
procedure
menu_Func1(
Это процедуры выполняемые при выборе
соответствующего пункта меню
ParentHandle, ClientHandle: THandle;
RunMethod: TRunMethod;
PDMVersion: TVersion;
{$R *.res}
DataBaseName, stCheckOut: string;
inIdLink: integer); stdcall;
exports
begin
InitUserDLL, PgiCheckMenuItem,
menu_GetAttrList,
menu_InsertObject,
menu_NewVersion;
ShowMessage(’Это
документ’);
end;
{$E pgi}
begin
end;
InitUserDLL, PgiCheckMenuItem и
процедуры-обработчики должны
быть объявлены в секции exports

13. Вызовы методов сервера приложений

Доступ к методам СП обеспечивается
посредством функции RunMethod, которая
реализована в клиентском модуле и
используется им для обращения к СП.
Указатель на RunMethod передается в плагин
как аргумент функции PgiCheckMenuItem и
процедур-обработчиков.
//Объявление прототипа функции RunMethod
TRunMethod = function(
stName: string;
Params: array of Variant): Variant of object;

14. Управление клиентом

ЛОЦМАН клиент поддерживает набор
сообщений для обновления данных, перемещения по дереву объектов и других операций:
WM_REFRESHVERSION
WM_REFRESHPARENT
WM_GOTOCHILD
WM_REFRESHCHECKOUTLIST
WM_REFRESHPROJECTLIST
WM_GOTONODE
WM_GOTOOBJECT
WM_OPENOBJECTINNEWWINDOW
WM_OPENOBJECTSINNEWWINDOW
=
=
=
=
=
=
=
=
=
WM_USER
WM_USER
WM_USER
WM_USER
WM_USER
WM_USER
WM_USER
WM_USER
WM_USER
+
+
+
+
+
+
+
+
+
//обновить объект с идентификатором inId
PostMessage(ClientHandle,
WM_REFRESHVERSION,inId,0);
1;
4;
5;
6;
7;
8;
9;
100;
101;

15. Подключение плагина

Плагины подключается к базам данным в
секции Plugins файла …\Client\Loodsman.ini,

[Plugins]
Имя_БД=плагин1.pgi;плагин2.pgi;…;плагинN.pgi

[AppServers]
ServerList=AK-20
Активация плагина, т.е. выполнение кода
IniUserDLL, происходит в момент открытия
[FileTemplates]
Документы
Microsoft Word=C:\Loodsman7\Client\Документы
базы
данных
или CheckOut-а принадлежаMicrosoft Word
щего базе данных, для которой заполнена
[PlugIns]
информация в секции Plugins
СПДС=LoodsmanSpds.pgi;SPDSAcadDex.pgi;PgiExample.pgi
English     Русский Правила