Executing Queries

Use a DataSource object to execute queries in a data service and retrieve the results.

ExecAsync

The data source execAsync method returns a deferred jQuery promise. Use this asynchronous method to execute the query in the data service.

const accountService = new wire.data.DataSource("custom", {
    ServiceRoot: "./account"
});

const query = wire.data.select()
    .from("Users")
    .where().eq("Active", true);
    
const users = await accountService.execAsync(query);

Short-Hand

Queries can also be executed directly from both a TableQuery and StoredProcedure object using the execAsync method which takes the data source as a parameter.

...
const users = await wire.data.select()
    .from("Users")
    .where().eq("Active", true)
    .execAsync(accountService);

TypeScript

TypeScript requires a method to return a specific type. To cast the response from the execAsync method to a type use the as undefined pattern.

In the example below, the results can be cast directly into an array of User class objects by first casting them as undefined.

const accountService = new wire.data.DataSource("custom", {
    ServiceRoot: "./account"
});

const query = wire.data.select()
    .from("Users")
    .where().eq("Active", true);
    
const users = await accountService.execAsync(query) as undefined as Array<User>;

DataTables

The format of asynchronous results depends on how the data connector returns the data. In the example above, the Custom Data Connector results are returned as an array of plain JavaScript objects containing the user data.

An instance of WireBootstrap's DataTable can also be created from the array in order to work with the data locally.

const users = await accountService.execAsync(query) as undefined as Array<User>

const userTable = new wire.data.DataTable(users);

In the example below, the Query Service service provider returns a data table automatically.

const accountService = new wire.data.DataSource("sql", {
    ServiceRoot: "./account"
});

const query = wire.data.select()
    .from("Users")
    .where().eq("Active", true);
    
const userTable = await accountService.execAsync(query) as undefined as IWireDataTable

Sometimes the format of the data returned from the data service call is unknown. The getResponseTable method on the data source can be used to transform the response data into a data table. Here, the data source will reach into the service provider for this transform as it knows the native format of the result set.

...
    
const userData = await accountService.execAsync(query);

const userTable: IWireDataTable = accountService.getResponseTable(userData);

Exec

The exec method is the synchronous equivalent of execAsync. This method will pause the thread and wait for the results to come back from the data service call.

...
const users = accountService.exec(query);

For details on these data source methods, visit the DataSource reference page. For details on data tables, visit the DataTable reference page.

Last updated