Filters in the Apex Connector Framework

The DataSource.QueryContext contains one DataSource.TableSelection. The DataSource.SearchContext can have more than one TableSelection. Each TableSelection has a filter property that represents the WHERE clause in a SOQL or SOSL query.

For example, when a user goes to an external object’s record detail page, your DataSource.Connection is executed. Behind the scenes, we generate a SOQL query similar to the following.

1SELECT columnNames 
2FROM externalObjectApiName 
3WHERE ExternalId = 'selectedExternalObjectExternalId'

This SOQL query causes the query method on your DataSource.Connection class to be invoked. The following code can detect this condition.

1if (context.tableSelection.filter != null) {
2    if (context.tableSelection.filter.type == DataSource.FilterType.EQUALS 
3        && 'ExternalId' ==  context.tableSelection.filter.columnName 
4        && context.tableSelection.filter.columnValue instanceOf String) {
5        String selection = (String)context.tableSelection.filter.columnValue;
6        return DataSource.TableResult.get(true, null, 
7                tableSelection.tableSelected, findSingleResult(selection));
8    }
9}

This code example assumes that you implemented a findSingleResult method that returns a single record, given the selected ExternalId. Make sure that your code obtains the record that matches the requested ExternalId.