Create a Sample DataSource.Provider Class

Now you need a class that extends and overrides a few methods in DataSource.Provider.

Your DataSource.Provider class informs Salesforce of the functional and authentication capabilities that are supported by or required to connect to the external system.

global class SampleDataSourceProvider extends DataSource.Provider {

If the external system requires authentication, Salesforce can provide the authentication credentials from the external data source definition or users’ personal settings. For simplicity, however, this example declares that the external system doesn’t require authentication. To do so, it returns AuthenticationCapability.ANONYMOUS as the sole entry in the list of authentication capabilities.

    override global List<DataSource.AuthenticationCapability>
        getAuthenticationCapabilities() {
        List<DataSource.AuthenticationCapability> capabilities =
            new List<DataSource.AuthenticationCapability>();
        capabilities.add(
            DataSource.AuthenticationCapability.ANONYMOUS);
        return capabilities;
    }
This example also declares that the external system allows SOQL queries, SOSL queries, Salesforce searches, upserting data, and deleting data.
    override global List<DataSource.Capability> getCapabilities()
    {
        List<DataSource.Capability> capabilities = new
            List<DataSource.Capability>();
        capabilities.add(DataSource.Capability.ROW_QUERY);
        capabilities.add(DataSource.Capability.SEARCH);
        capabilities.add(DataSource.Capability.ROW_CREATE);
        capabilities.add(DataSource.Capability.ROW_UPDATE);
        capabilities.add(DataSource.Capability.ROW_DELETE);
        return capabilities;
    }

Lastly, the example identifies the SampleDataSourceConnection class that obtains the external system’s schema and handles the queries and searches of the external data.

    override global DataSource.Connection getConnection(
        DataSource.ConnectionParams connectionParams) {
        return new SampleDataSourceConnection(connectionParams);
    }
}