7.5. TssNetDataSet

Предки: TssParamDataSet -> TssDataSet.

Цель данного класса – предоставлять возможность запроса многопоточных данных через сервер приложений, редактирования этих данных с кэшированием результатов редактирования и сохранения результатов редактирования через сервер приложений.

Настройки для запроса данных хранятся в объекте типа TssNetDataProducerParams. Основные свойства TssNetDataProducerParams.**

ИмяТипОписание
QueryIDTGUIDID запроса. Используется сервером приложений для кэширования запросов.
ParamsTssParamsПараметры выполнения запроса
ClientQueryParamsTssParamsНастройки запроса (текст запроса, имена потоков, скрипт-before, скрипт-after)

Особенности реализации свойств и полей класса TssNetDataSet:

ИмяТипОписание
*FSourceDataProducerИмеет тип TssNetDataProducer
+ FQueryParamsTssNetDataProducerParamsНастройки запроса
*KeyFieldБерется из FSourceDataProducer.KeyField [StreamName]
* StreamNameБерется из FSourceDataProducer.StreamName. Если пустой, то берется первый поток из QueryStreams.
+ ClientParamsTssParamsДоступ к FQueryParams.ClientQueryParams.
* ParamsTssParamsДоступ к FQueryParams.Params.
+ QueryIDTGUIDДоступ к FQueryParams.QueryID.
+ QueryName, + QuerySQL, + QueryModifySQLBefore, + QueryModifySQLAfter, + QueryStreamsStringДоступ к различным полям FQueryParams.ClientQueryParams.
+ DataBaseTssNetDataBaseСоединение с сервером приложений

Особенности реализации некоторых действий:

  1. Дополнительные действия при Post при CachedUpdate = False.

    1. Данные из кэша данного DataSet отправляем на запись в сервер приложений.

    2. Возвращаемые данные запоминаем в FSourceDataProducer.

    3. На основе возвращаемых данных выполняем GUIDTranslation (см. ниже) для данного DataSet’а.

  2. Выполнение ApplyUpdates.

    1. Забираем данные из кэша данного DataSet’а.

    2. Для каждого непосредственно подчиненного DataSet’а:

      1. Выполняем Post, если надо;

      2. Забираем у него данные из кэша.

    3. Отправляем данные из забранных кэшей на запись в сервер приложений.

    4. Возвращаемые данные запоминаем в FSourceDataProducer.

    5. На основе возвращаемых данных выполняем GUIDTranslation (см. ниже) для данного DataSet’а и каждого непосредственно подчиненного DataSet’а.

    6. Сбрасываем кэши для данного DataSet’а и каждого непосредственно подчиненного DataSet’а

  3. Выполнение ApplyUpdatesAndClose.

    Этот метод специфичен для данного класса. Отличие от ApplyUpdates:

    1. Сервер приложений только сохраняет переданные ему изменения в данных, не делая перезапрос данных от SQL сервера.

    2. Поэтому сервер приложений не возвращает результат запроса.

    3. Поэтому данные в FSourceDataProducer не подменяются.

    4. Сброс кэша у DataSet’ов не выполняется.

  4. Выполнение ExecSQL.

    Этот метод специфичен для данного класса. При его выполнении вызывается NetDataProducer.ExecSQL. Никаких изменений в DataSet’е не производится.

  5. GUIDTranslation.

    Это действие связано с особенностями работы с GUID-полями при редактировании данных. При заполнении GUID-полей новыми значениями при редактировании данных через интерфейс пользователя, этим полям назначаются фиктивные значения. Сервер приложений, получая такие данные, перед записью их в SQL-сервер заменяет фиктивные значения на реальные, сгенерированные стандартным образом. В ответе на данный запрос клиента сервер приложений возвращает таблицу перекодировки GUID значений. Действие GUIDTranslation – это процесс замены фиктивных GUID значений на реальные согласно пришедшей таблице перекодировки. Замена выполняется в тех внутренних данных DataSet’а, где могут быть эти фиктивные GUID значения.