TssNetDataSet
использует данные, полученные от сервера приложений Tillypad. Он возвращает несколько наборов, если в запросе имеется несколько предложений SELECT
. Эти наборы так же называют потоками. Также, отправка изменений на сервер формируется сразу для нескольких таблиц и применяется в одной транзакции. В поле Streams
описываются имена потоков через точку с запятой(;) с указанием ключевого поля в скобках. По имени потока с данными связываются дочерние датасеты и определяется имя таблицы, в которой сохраняются изменения.
Его основной инструмент – редактор свойства Query
:
Как уже говорилось, здесь задаётся описание Streams
и SQL
. Скрипты Modify SQL Before
cc
и Modify SQL After
исполняются до и после применения изменений в той же транзакции.
Набор самого датасета возвращается из потока, указанного в свойстве StreamName
в Object Inspector
(OI
), или по умолчанию из первого потока.
Сервер приложений Tillypad расширяет язык запросов использованием параметров. Они передаются в запрос с помощью свойства TssNetDataSet.Params
. В запросе они начинаются с символа % и имеют следующие типы:
В Delphi | На сервере |
---|---|
AsBoolean: Boolean | BIT |
AsInteger: Int64 | INT |
AsGUID: TGUID | UNIQUEIDENTIFIER |
AsFloat: Double | NUMERIC |
AsDateTime: TDateTime | DATETIME |
AsAnsiString: AnsiString | VARCHAR |
AsString: String | NVARCHAR |
AsBLOB: RawByteString | BINARY |
AsTable: TssDataStorage | Таблица |
То есть, параметр заданный в коде Delphi как AsTable
можно использовать в запросе как обычную таблицу:
procedure TfmForm.dsItemsBeforeOpen(DataSet: TssDataSet); begin dsItems.Params.ParamByName('%Filter').AsTable := FFilterTable; end;
SQL:
SELECT * FROM SomeTable T JOIN %Filter F ON F.item_ID = T.item_ID
Отладка запросов с параметрами доступна в отладчике запросов Менеджера.
Сохранение изменений на сервер вызывается методом ApplyUpdates
. TssNetDataSet
формирует параметры Inserted
, Updated
и Deleted
для каждого потока и отправляет их на сервер приложений, который формирует и запускает соответствующие скрипты SQL. Параметры можно предварительно обрабатывать на клиенте в событии OnApplyUpdates
.
Допустим, наш датасет возвращает два потока, описанных в Streams
:
InputDocuments(idoc_ID);InputDocumentItems(idit_ID)
Мы хотим изменить данные перед отправкой на сервер:
procedure TfmInputDocumentsEditor.EditDataSetOnApplyUpdates(Sender: TssNetDataSet; Params: TssParams); var P: TssParam; i: Integer; begin with Params do begin P := FindParamByName('InputDocumentItems.Inserted'); if Assigned(P) then with P.AsTable do for i := 0 to RecordCount – 1 do FieldByName('idit_Volume').AsFloat[i] := 1; end; end;
Возможно создание новых параметров в этом событии. Сервер приложений будет использовать их по такому же принципу, <имя таблицы без tp_>.<операция>
.