Добрый день, требуется вытащить в коде фильтр из группы.
Вытащил 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. Есть ли другие варианты решения данной проблемы.
Нравится
Добрый день,
В базовой реализации уже есть логика, которая вытаскивает из группы (папки) фильтры. Она находится в CommonUtilities, нужно смотреть в метод GetFolderEsqFilters, он в конце возвращает esqFilters (типа IEntitySchemaQueryFilterItem). Думаю это то что Вам нужно.
Добрый день,
В базовой реализации уже есть логика, которая вытаскивает из группы (папки) фильтры. Она находится в CommonUtilities, нужно смотреть в метод GetFolderEsqFilters, он в конце возвращает esqFilters (типа IEntitySchemaQueryFilterItem). Думаю это то что Вам нужно.