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_>.<операция>.