TMS WEB Core dataset component for XData server integration. Provides declarative data binding with PostgreSQL stored procedures via XData services.
TAPIDataset bridges TMS WEB Core applications to XData server endpoints. It wraps HTTP calls to PostgreSQL stored procedures, handling:
Location: Framework/Components/API/SOURCE/Obj.API.Dataset.pas
| Property | Type | Description |
|---|---|---|
Connection | TXDataWebConnection | Required. XData connection component |
EntitySetName | String | XData entity set (schema.function format) |
AutoOpen | Boolean | Open dataset when form loads |
Active | Boolean | Dataset open state |
Params | TParams | Input parameters collection |
OutputParams | TParams | Output parameters from procedure |
PROCEDURE Load; /// Opens dataset, fires AfterOpen
PROCEDURE Load(Callback: TProc); /// Opens with completion callback
PROCEDURE Open; /// Same as Load
PROCEDURE Close; /// Closes dataset, clears data
PROCEDURE Refresh; /// Reloads data with current params
PROCEDURE RefreshAsync(Callback: TProc); /// Async refresh with callback
FUNCTION ParamByName(Name: STRING): TParam;
FUNCTION OutputParamByName(Name: STRING): TParam;
FUNCTION FieldByName(Name: STRING): TField;
FUNCTION FindField(Name: STRING): TField; /// Returns NIL if not found
| Event | Signature | When Fired |
|---|---|---|
BeforeOpen | (Dataset: TDataset) | Before HTTP request sent |
AfterOpen | (Dataset: TDataset) | After data loaded, fields created |
OnLoadError | (Dataset: TDataset; ErrorMsg: STRING) | On HTTP or parse error |
AfterClose | (Dataset: TDataset) | After dataset closed |
OnCalcFields | (Dataset: TDataset) | For calculated field values |
/// Design time: Set Connection, EntitySetName = 'dashboard.getcards'
/// Set ParamByName('fkuserid_').AsInteger in code
PROCEDURE TfrmDashboard.WebFormShow(Sender: TObject);
BEGIN
dsCards.ParamByName('fkuserid_').AsInteger := CurrentUserID;
dsCards.Load;
END;
PROCEDURE TfrmDashboard.dsCardsAfterOpen(Dataset: TDataset);
BEGIN
/// Data is now available
WHILE NOT dsCards.EOF DO
BEGIN
ProcessCard(dsCards.FieldByName('cardid').AsInteger);
dsCards.Next;
END;
END;
dsCards.Load(
PROCEDURE
BEGIN
/// Executes after load completes
ShowMessage('Loaded ' + IntToStr(dsCards.RecordCount) + ' cards');
END);
/// PostgreSQL function returns OUT parameters
/// e.g.: CREATE FUNCTION getuser(userid_ INT, OUT username_ TEXT, OUT email_ TEXT)
dsUser.ParamByName('userid_').AsInteger := 123;
dsUser.Load(
PROCEDURE
BEGIN
UserName := dsUser.OutputParamByName('username_').AsString;
Email := dsUser.OutputParamByName('email_').AsString;
END);
Parameters follow the PostgreSQL function signature with trailing underscore:
/// PostgreSQL: dashboard.getcards(fkuserid_, startdate_, enddate_)
dsCards.ParamByName('fkuserid_').AsInteger := UserID;
dsCards.ParamByName('startdate_').AsDateTime := StartDate;
dsCards.ParamByName('enddate_').AsDateTime := EndDate;
/// Set parameter to NULL
dsCards.ParamByName('optionalfilter_').Clear;
/// Check if field is NULL
IF dsCards.FieldByName('description').IsNull THEN
Description := '(none)'
ELSE
Description := dsCards.FieldByName('description').AsString;
/// For PostgreSQL JSONB array parameters
dsCards.ParamByName('cardids_').AsString := '[1,2,3,4,5]';