Добрый день, требуется вытащить в коде фильтр из группы.
Вытащил json следующего фильтра из бд
{
"className": "Terrasoft.FilterGroup",
"items": {
"572334d2-7d75-43e0-b60f-c2cdfca071ea": {
"className": "Terrasoft.InFilter",
"filterType": 4,
"comparisonType": 3,
"isEnabled": true,
"trimDateTimeParameterToDate": false,
"leftExpression": {
"className": "Terrasoft.ColumnExpression",
"expressionType": 0,
"columnPath": "TestColumn"
},
"isAggregative": false,
"key": "572334d2-7d75-43e0-b60f-c2cdfca071ea",
"dataValueType": 10,
"leftExpressionCaption": "TestColumn",
"referenceSchemaName": "TestColumn",
"rightExpressions": [
{
"className": "Terrasoft.ParameterExpression",
"expressionType": 2,
"parameter": {
"className": "Terrasoft.Parameter",
"dataValueType": 10,
"value": {
"Name": "Да",
"Id": "3631ec86-e4cd-490c-9614-cea3bbf71187",
"value": "3631ec86-e4cd-490c-9614-cea3bbf71187",
"displayValue": "Да"
}
}
}
]
}
},
"logicalOperation": 0,
"isEnabled": true,
"filterType": 6,
"rootSchemaName": "Contact",
"key": "FolderFilters"
}
Далее с помощью этого метода пытаюсь создать esq фильтр
public static EntitySchemaQuery GetEsqByFilterData(UserConnection userConnection, string filterData)
{
if (userConnection is null) { throw new ArgumentNullException(nameof(userConnection)); }
if (filterData is null) { throw new ArgumentNullException(nameof(filterData)); }
var filters = Terrasoft.Common.ServiceStackTextHelper.Deserialize<Terrasoft.Nui.ServiceModel.DataContract.Filters>(filterData);
string rootSchemaName = filters.RootSchemaName;
if (string.IsNullOrEmpty(rootSchemaName))
{
return null;
}
IEntitySchemaQueryFilterItem esqFilters = filters.BuildEsqFilter(rootSchemaName, userConnection);
var queryFilterCollection = esqFilters as EntitySchemaQueryFilterCollection;
var esq = new EntitySchemaQuery(userConnection.EntitySchemaManager, rootSchemaName);
if (queryFilterCollection != null)
{
if (queryFilterCollection.Count == 0)
{
return esq;
}
esq.Filters.LogicalOperation = queryFilterCollection.LogicalOperation;
esq.Filters.IsNot = queryFilterCollection.IsNot;
esq.Filters.IsEnabled = queryFilterCollection.IsEnabled;
foreach (IEntitySchemaQueryFilterItem filter in queryFilterCollection)
{
esq.Filters.Add(filter);
}
}
else
{
esq.Filters.Add(esqFilters);
}
return esq;
}
При запуске получаю ошибку Expected hex 0x in '{0}'.
Проблему нашёл, она заключается в том что в json "value" является объектом, а не guid. Если "value": "3631ec86-e4cd-490c-9614-cea3bbf71187", то метод отрабатывает корректно.
Единственный вариант исправления этой проблемы пока только замена с помощью регулярной строки value объект на value guid. Есть ли другие варианты решения данной проблемы.