The server filter can be used to limit which data is shown on the grid depending on custom filtering conditions received from Flexmonster Pivot. It allows filtering the data right on the application’s back end, so Flexmonster Pivot receives and shows only the subset of the data that meets filtering conditions. For example, you can limit data that will be sent to a user based on the user's role.
In this guide, we describe the concept of the server filter and its structure, and provide an example implementation.
Note This guide assumes you have knowledge of core C# concepts. Learn about them first before continuing with this guide.
The main advantage of the server filter is that it can be used as a data access management tool. Using the server filter, Flexmonster.DataServer.Core.dll
will filter the data based on custom filtering conditions received from Flexmonster Pivot.
Here is a possible server-side filtering implementation:
To see how the server filter can be implemented, refer to the Example section.
To simplify the server filter’s implementation, we prepared a sample ASP.NET Core application using Flexmonster.DataServer.Core.dll
. This application contains an example server filter, which filters data based on a user's role. The filter's implementation can be viewed in the FlexmonsterAPIController.cs file.
To create a new ASP.NET Core application with the Data Server or to embed the DLL in an existing project, refer to the guide on Flexmonster.DataServer.Core.dll.
In the sample, the data is filtered based on the user's region token sent by the component. A dictionary defines which subset of data should correlate to the received token. The dictionary contains all possible region tokens and field members corresponding to them:
private static Dictionary<string, List<object>> _userPermissions =
new Dictionary<string, List<object>>()
{
/* A user with the "AdminToken" token will see
the report on all the countries */
{"AdminToken", null },
/* A user with the "EuropeToken" token will see
details about Germany and France */
{"EuropeToken", new List(){ "Germany","France" } },
/* A user with the "AmericaToken" token will see
highlights about USA and Canada */
{"AmericaToken", new List(){ "USA","Canada" } },
/* A user with the "AustraliaToken" token will see
info about Australia */
{"AustraliaToken", new List(){ "Australia" } },
};
In the sample project, the server filter is defined in a separate function. First, a user token is read from the request headers, and then the filter is applied:
private ServerFilter GetServerFilter()
{
// Get the user token from the request headers
HttpContext.Request.Headers.TryGetValue("UserToken", out StringValues userRole);
if (userRole.Count == 1)
{
// Create a server filter
ServerFilter serverFilter = new ServerFilter();
// Specify a field to filter
serverFilter.Field = new Field() {
UniqueName = "Country",
Type = ColumnType.stringType
};
// Include the members that correspond to the user token
serverFilter.Include = _userPermissions[userRole[0]];
return serverFilter;
}
return null;
}
To learn more about the server filter’s parameters and their types, see the server filter structure.
After the filter is specified, it is passed as a parameter to GetMembers() and GetAggregatedData() methods, for example:
public MembersResponse PostMembers([FromBody]MembersRequest request)
{
var response = _apiService.GetMembers(request, GetServerFilter());
return new JsonResult(response);
}
Now the server will filter the data before sending it in the response.
Note To apply several server filters, add them to an IEnumerable<ServerFilter>
collection and pass it to GetMembers() or GetAggregatedData() methods.
The user's region token is specified in the request headers using the customizeAPIRequest
method for Flexmonster Pivot:
const pivot = new Flexmonster({
container: "pivotContainer",
componentFolder: "https://cdn.flexmonster.com/",
toolbar: true,
report: report,
customizeAPIRequest: (req) => {
req.requestHeaders = {
"UserToken": $("#country").val()
};
return req;
}
});
The server filter has the following structure:
public class ServerFilter
{
public Field Field { get; set; }
public List<object> Include { get; set; }
public List<object> Exclude { get; set; }
}
Below is a detailed description of the filter parameters:
Here is an example of how the server filter can be created:
ServerFilter serverFilter = new ServerFilter();
serverFilter.Field = new Field() {
UniqueName = "Country",
Type = ColumnType.stringType
};
serverFilter.Include = new List<object>(){ "USA", "Canada" };
You may be interested in the following articles: