ExaOffice

Программное обеспечение для вашего бизнеса.

+7 (499) 394-41-29
9:00 – 18:00 мск
info@exaoffice.ru

ExaRent


Обзор интерфейсов в плагинах ExaRent

Здесь описывается способ работы с интерфейсами ExaRent - эта информация используется при разработке собственного плагина для программы.

Интерфейсы, реализованные на стороне ExaRent

IExaApp - возвращает информацию о приложении (название, текущий номер версии), текущую базу данных, пользователя (который выполнил вход).

IExaDataBase - обеспечивает доступ к базе данных.

IExaField - информация о поле таблицы.

IExaTable - обеспечивает доступ к таблице.

IExaUser - информация о текущем пользователе.

IExaModule - информация о модуле.

Интерфейсы, реализуемые на стороне плагина

Для работы плагина достаточно реализовать один из следующих интерфейсов. Эту реализацию должна возвращать функция Init, находящаяся в плагине.

IExaAppCommandsPlugin - команда (или несколько) для обработки на уровне приложения. База данных для ее работы не требуется.

IExaDataBaseCommandsPlugin - команда (или несколько) для обработки на уровне базы данных. Например, поиск в таблицах или импорт записей.

Обработка исключений в плагине

Возможные исключения не должны выходить за рамки плагина. При возникновении исключения покажите сообщение пользователю или запишите это в журнал, но не дайте исключению выйти на уровень ExaRent. Желательно, внутри каждого метода, вызываемого программой в плагине, поставить блок перехвата исключений. Например, вот так:

procedure TExaDataBaseCommandsPlugin.Execute(Command: Integer; const ExaApp: IExaApp);
begin
  try
    ...
  except
    on E: Exception do
      ShowMessage(E.Message);
  end;
end;

Если исключение выпустить на уровень ExaRent, то для пользователя будет показано сообщение со страшной формулировкой "Разрушительный сбой". Берегите пользователя!

Многопоточность

Все обращения к интерфейсам, реализованным на стороне ExaRent, должны выполняться только в основном потоке плагина. ExaRent не поддерживает обращения из параллельных потоков от плагина.

Обращение к таблице

Чтобы обратиться к каждой таблице базы данных, используйте следующий код:

DataBase := ExaApp.Get_DataBase;
for I := 0 to DataBase.Get_TableCount - 1 do
begin
  Table := DataBase.Get_Tables(I);
  ...
end;

Если нужно обратиться к конкретной таблице, то сделать это можно по внутреннему имени таблицы либо по отображаемому наименованию.

Обращение по внутреннему имени таблицы:

Table := DataBase.TableByName('Cashbox');

Обращение по отображаемому наименованию таблицы:

Table := DataBase.TableByCaption('Касса');

Рекомендуется обращение по внутреннему имени, т.к. от версии к версии отображаемое наименование может быть изменено. Например, когда-то таблица Сотрудники была переименована в Персонал.

Обращение к конкретной таблице по прошитому индексу не рекомендуется, т.к. порядок таблиц может быть изменен в новой версии программы.

Поиск и перебор записей таблицы

Поиск записи по идентификатору:

if Table.Locate(ID) then
  ...

Поиск записи по значению в поле:

ID := Table.Locate1('NAME', 'Иванов');
if ID <> '' then
  ...

Поиск записи по значениям сразу в двух полях:

ID := Table.Locate2('NAME', 'AGE', 'Иванов', 25);
if ID <> '' then
  ...

Простой последовательный перебор записей:

ID := Table.First;
while ID <> '' do
begin
  ...
  ID := Table.Next(ID);
end;

Получение значений полей

Чтобы получить значение из поля записи, нужно вызвать метод Get_Values, указав идентификатор записи и имя поля. В качестве имени поля используется макрос поля без фигурных скобок.

Value := Table.Get_Values(ID, 'NAME');

Изменение данных

Любые вносимые изменения в базу данных должны выполняться в рамках транзакции. Перед добавлением/редактированием/удалением записи нужно открыть "скобку" транзакции, а после этих действий - закрыть. Для этого в интерфейсе базы данных есть соответствующие методы. Если "скобка" открыта, то закрыть ее нужно обязательно (даже если при выполнении внутренних действий возникло исключение).

DataBase.BeginTransaction;
try
  ...
finally
  DataBase.EndTransaction;
end;

"Скобки" могут быть вложенными. Следующий код правильный:

DataBase.BeginTransaction;
try
  ...
  DataBase.BeginTransaction;
  try
    ...
  finally
    DataBase.EndTransaction;
  end;
  ...
finally
  DataBase.EndTransaction;
end;

Все изменения, внесенные плагином в рамках первой и последней "скобок", формируют в ExaRent одну транзакцию. Пользователь может отменить ее одним действием.

Совет: вызывайте EndTransaction как можно скорее после вызова BeginTransaction, не следует между ними выполнять слишком долгие действия, например, задать вопрос пользователю и ждать ответа. Дело в том, что во время работы плагина программа также может выполнять обработку данных в фоновом режиме - это может попасть в вашу транзакцию.

Добавление записи, установка значений

При добавлении записи возвращается ее идентификатор, который затем можно использовать для установки значений:

ID := Table.Add;
Table.Set_Values(ID, 'NAME', 'Иванов');

Удаление записи

Простой пример:

Table.Delete(ID);

Удаление с контролем существования записи и наличия доступа, с созданием транзакции:

if Table.UserHasWriteAccess and Table.Locate(ID) and Table.UserHasRecordWriteAccess(ID) then
begin
  DataBase.BeginTransaction;
  try
    Table.Delete(ID);
  finally
    DataBase.EndTransaction;
  end;
end;

 


Мы стараемся как можно оперативнее обеспечивать вас актуальной справочной информацией. Ввиду частых обновлений приложения информация в этом материале может не совсем соответствовать или быть неполной. Благодарим за понимание.
Не нашли ответа на ваш вопрос? Напишите по электронному адресу info@exaoffice.ru - мы ответим максимально быстро.

Контакты

+7 (499) 394-41-29

info@exaoffice.ru

 

Техническая поддержка

+7 (925) 702-80-13

support@exaoffice.ru

 

Мы используем только лицензионное ПО

Win10 Win12 server Delphi Delphi TM

© 2019 ExaOffice