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

Содержание

Слайд 2

Способы расширения возможностей системы Плагин – внешняя библиотека расширяющая функционал клиента.

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

Плагин – внешняя библиотека расширяющая функционал клиента.
Прокси

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

Взаимодействие компонентов системы и дополнительных модулей (плагинов) ЛОЦМАН:Клиент Плагин Сервер приложений RunMethod Сервер БД

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

ЛОЦМАН:Клиент

Плагин

Сервер
приложений

RunMethod

Сервер
БД

Слайд 4

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

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

ЛОЦМАН:Клиент

Сервер
приложений

Сервер
БД

Документ

Интегратор

Инструмент

Proxy

Слайд 5

Взаимодействие компонентов системы и специального клиента Специальный клиент Сервер приложений Сервер БД

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

Специальный
клиент

Сервер
приложений

Сервер
БД

Слайд 6

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

Внешний справочник

ЛОЦМАН:Клиент

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

Сервер
приложений

Сервер
БД

Объект ЛОЦМАН

Объект справочника

Слайд 7

Плагин это … Динамически подключаемая библиотека (DLL), с расширением «*.pgi». Плагин

Плагин это …

Динамически подключаемая библиотека (DLL), с расширением «*.pgi».
Плагин должен содержать

2 обязательные функции, имеющие следующее назначение:

InitUserDLL – построение структуры меню;
PgiCheckMenuItem – контроль доступности пунктов меню.

… и набор процедур-обработчиков, соответствующих пунктам меню

Слайд 8

Управление меню Информация о пункте меню передается клиентскому модулю функцией InitUserDLL

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

Информация о пункте меню передается клиентскому модулю функцией InitUserDLL в

виде массива указателей на структуры данных типа:
TAddMenu = record
stMenu: string[255];
stFunction: string[255];
end;
где stMenu – это строка вида:
«МЕСТО#Уровень1#Уровень2#…#Название», МЕСТО – строковый идентификатор определяющий положение относительно стандартных пунктов главного меню, например: MI_TOOL означает - внутри пункта меню «Инструменты», приставки BEFORE_ и AFTER_ указывают, размещение, соответственно, перед или после пункта меню
stFunction – имя процедуры-обработчика

Возможные положения пунктов меню
MI_FILE, AFTER_MI_FILE, BEFORE_MI_FILE,
MI_VIEW, AFTER_MI_VIEW, BEFORE_MI_VIEW,
MI_EDIT, AFTER_MI_EDIT, BEFORE_MI_EDIT,
MI_TOOLS, AFTER_MI_TOOLS, BEFORE_MI_TOOLS,
MI_HELP, AFTER_MI_HELP, BEFORE_MI_HELP

Слайд 9

InitUserDLL function InitUserDLL (Value : Pointer) : Integer; stdcall; export; var

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 Вызывается при каждом обращении пользователя к меню. Позволяет, в зависимости

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 Предназначен для описания объектов базы данных. Реализация находится в

Класс TVersion

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

основные идентификационные данные объекта:
inID – Уникальный идентификатор,
stType – Тип объекта,
stProduct – Ключевой атрибут
stVersion – Номер версии
boDocument – Признак документа
Имеет несколько конструкторов
FromEmpty - создает пустой объект;
FromRecord - из набора данных TDataSet
FromIDVersion - по ID объекта
Слайд 12

Процедуры-обработчики Это процедуры выполняемые при выборе соответствующего пункта меню procedure menu_Func1(

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

Это процедуры выполняемые при выборе соответствующего пункта меню

procedure menu_Func1(
ParentHandle,

ClientHandle: THandle;
RunMethod: TRunMethod;
PDMVersion: TVersion;
DataBaseName, stCheckOut: string;
inIdLink: integer); stdcall;
begin
ShowMessage(’Это документ’);
end;

library PgiExample;
uses
SysUtils, Classes,
PIClasses in 'PIClasses.pas',
Unit1 in 'Unit1.pas',
frmInsertObjectUnit in 'frmInsertObjectUnit.pas',
frmNewVersionUnit in 'frmNewVersionUnit.pas';
{$E pgi}
{$R *.res}
exports
InitUserDLL, PgiCheckMenuItem,
menu_GetAttrList, menu_InsertObject, menu_NewVersion;
begin
end;

Слайд 13

Вызовы методов сервера приложений Доступ к методам СП обеспечивается посредством функции

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

Доступ к методам СП обеспечивается посредством функции RunMethod,

которая реализована в клиентском модуле и используется им для обращения к СП. Указатель на RunMethod передается в плагин как аргумент функции PgiCheckMenuItem и процедур-обработчиков.

//Объявление прототипа функции RunMethod
TRunMethod = function(
stName: string;
Params: array of Variant): Variant of object;

Слайд 14

Управление клиентом ЛОЦМАН клиент поддерживает набор сообщений для обновления данных, переме-щения

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

ЛОЦМАН клиент поддерживает набор сообщений для обновления данных, переме-щения по

дереву объектов и других операций:

WM_REFRESHVERSION = WM_USER + 1;
WM_REFRESHPARENT = WM_USER + 4;
WM_GOTOCHILD = WM_USER + 5;
WM_REFRESHCHECKOUTLIST = WM_USER + 6;
WM_REFRESHPROJECTLIST = WM_USER + 7;
WM_GOTONODE = WM_USER + 8;
WM_GOTOOBJECT = WM_USER + 9;
WM_OPENOBJECTINNEWWINDOW = WM_USER + 100;
WM_OPENOBJECTSINNEWWINDOW = WM_USER + 101;

//обновить объект с идентификатором inId
PostMessage(ClientHandle,
WM_REFRESHVERSION,inId,0);