Datasource client

The SDK provides a Datasource client to perform CRUD operations on datasources, also called option lists.


The client variable in the following code examples refers to the IMClient instance. When using the Web SDK, the variable name can be chosen freely, but it is also called client at instantiation in the documentation.

Get datasources

A datasource can be retrieved by name:

IDataSource result = await MClient.DataSources.GetAsync(name);

This returns an IDataSource object, however it is recommended to downcast it to the right type of datasource in the following way:

IHierarchicalDataSource hierachicalDataSource = await MClient.DataSources.GetAsync(name) as IHierarchicalDataSource;
IFlatDataSource flatDataSource = await MClient.DataSources.GetAsync(name) as IFlatDataSource;

It is required to downcast the datasource to the correct type to be able to change the datasource's value. Note that the Type property on IDataSource can be used to identify the correct datasource type at runtime.

Create datasources

To create a hierarchical datasource, an instance needs be created by the factory first. Afterwards, the instance can be saved using the client. The datasource can be used for media types, where every type of media can have more sub-values.

In this example, 'mp4' is added as a subtype of a video media type.

var dataSource = MClient.DataSourceFactory.CreateHierarchicalDataSource("MediaType");
dataSource.Labels.Add(enUs, "Media type");

var video = new HierarchicalDataSourceValue("Video")
    Labels = { { enUs, "Video" } }

var mp4 = new HierarchicalDataSourceValue("MP4")
    Labels = { { enUs, "mp4" } }

var image = new HierarchicalDataSourceValue("Image")
    Labels = { { enUs, "Image" } }


await MClient.DataSources.CreateAsync(dataSource);

Update datasources

In the following example, a flat colors datasource is extended with the color red:

var dataSource = await MClient.DataSources.GetAsync("Colors") as IFlatDataSource;

var red = new FlatDataSourceValue("Red")
    Labels = { { enUs, "Red" } }

await MClient.DataSources.UpdateAsync(dataSource);

Delete datasources

In the following example, the MediaType datasource is deleted:

await MClient.DataSources.DeleteAsync("MediaType");

Can we improve this article ? Provide feedback