|
Интерфейс IAppServer
Интерфейс IAppServer
является основной механизма удаленного доступа клиентских
приложений к серверу приложения. Набор данных клиента
использует его для общения с компонентом-провайдером
на сервере приложения. Наборы данных клиента получают
экземпляр IAppServer от компонента
соединения в клиентском приложении (см. рис. 20.2).
При создании удаленных модулей данных
(см. ниже) каждому такому модулю ставится в соответствие
вновь создаваемый интерфейс, предком которого является
интерфейс IAppServer.
Разработчик может добавить к новому
интерфейсу собственные методы, которые, благодаря возможностям
механизма удаленного доступа многозвенных приложений,
становятся доступны приложению-клиенту.
Свойство
property AppServer:
Variant;
в клиентском приложении имеется как
в компонентах удаленного соединения, так и клиентском
наборе данных.
По умолчанию интерфейс является несохраняющим
состояние (stateless). Это означает, что вызовы методов
интерфейса независимы и не привязаны
к предыдущему вызову. Поэтому интерфейс
IAppServer не имеет свойств, которые
бы хранили информацию о состоянии между вызовами.
Обычно разработчику ни к чему использовать
методы интерфейса напрямую, однако его значение для
многозвенных приложений трудно переоценить. И при детальной
работе с механизмом удаленного доступа интерфейс понадобится
так или иначе.
Методы интерфейса IAppServer
представлены в табл. 21.1
Таблица 21.1. Методы
интерфейса IAppServar
|
|
|
function AS
ApplyUpdates (const ProviderName: WideString;
Delta: OleVariant; MaxErrors: Integer; out ErrorCount:
Integer; var OwnerData: OleVariant) : OleVariant;
safecall;
|
Передает изменения, полученные
от клиентского набора данных, компоненту-провайдеру,
определяемому параметром ProviderName.
Изменения содержатся в параметре
Delta.
Параметр MaxErrors
задает максимальное число ошибок, пропускаемых
при сохранении данных перед прерыванием операции.
Реальное число возникших ошибок возвращается
параметром ErrorCount.
Параметр OwnerData
содержит дополнительную информацию, передаваемую
между клиентом и сервером (например, значения
параметров методов-обработчиков).
Функция возвращает пакет данных,
содержащий все записи, которые не были сохранены
в базе данных по какой-либо причине
|
function AS
DataRequest (const ProviderName: WideString;
Data: OleVariant) : OleVariant; safecall;
|
Генерирует событие
OnDataRequest для указанного провайдера
ProviderName
|
procedure AS
Execute (const ProviderName: WideString; const
CommandText : WideString; var Params : OleVariant;
var OwnerData: OleVariant) ; safecall;
|
Выполняет запрос или хранимую
процедуру, определяемые параметром
CommandText для провайдера, указанного
параметром ProviderName.
Параметры запроса или хранимой процедуры содержатся
в параметре Params
|
function AS
GetParams (const ProviderName: WideString; var
OwnerData: OleVariant): OleVariant; safecall;
|
Передает провайдеру
ProviderName текущие значения параметров
клиентского набора данных
|
function AS
GetProviderNames: OleVariant; safecall;
|
Возвращает список всех доступных
провайдеров удаленного модуля данных
|
function AS GetRecords
(const ProviderName : WideString, Count: Integer;
out RecsOut: Integer; Options: Integer; const
CommandText: WideString; var Params : OleVariant;
var OwnerData :OieVariant) : OleVariant; safecall;
|
Возвращает пакет данных с записями
набора данных сервера, связанного с компонентом-провайдером.
Параметр CommandText
содержит имя таблицы, текст запроса или имя хранимой
процедуры, откуда необходимо получить записи.
Но он работает только в случае, если для провайдера
в параметре Options включена
опция poAllowCommandText.
Параметры запроса или процедуры помещаются в параметре
Params.
Параметр задает требуемое число
записей, начиная с текущей, если его значение
больше нуля. Если параметр равен нулю — возвращаются
только метаданные, если он равен -1 — возвращаются
все записи.
Параметр RecsOut возвращает реальное
число переданных записей
|
function AS
RowRequest (const ProviderName: WideString;
Row: OleVariant; RequestType: Integer; var OwnerData:
OleVariant): OleVariant; safecall;
|
Возвращает запись набора данных
(предоставляемого провайдером ProviderName),
определяемую параметром Row.
Параметр RequestType
содержит значение типа TfetchOptions
|
Большинство методов интерфейса используют
параметры ProviderName и OwnerData.
Первый определяет имя компонента-провайдера, а второй
содержит набор параметров, передаваемых для использования
в методах-обработчиках.
Внимательный читатель обратил внимание,
что использование метода AS_GetRecords
подразумевает сохранение информации при работе интерфейса,
т. к. метод возвращает записи, начиная с текущей, хотя
интерфейс IAppServer имеет тип
stateless. Поэтому перед использованием
метода рекомендуется обновлять набор данных клиента.
Тип
TFetchOption = (foRecord,
foBlobs, foDetails);
TFetchOptions
= set of TFetchOption;
используется в параметре
RequestType метода AS_RowRequest.
foRecord — возвращает
значения полей текущей записи;
foBlobs — возвращает
значения полей типа BLOB текущей
записи;
foDetails — возвращает
все подчиненные записи вложенных наборов данных для
текущей записи.
|