Интерфейс 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 — возвращает все подчиненные записи вложенных наборов данных для текущей записи.
|