Доброго времени суток.
Имеется некий расширенный фильтр на странице записи. Сохраняется в виде JSONa в колонку таблицы.
Чтобы использовать этот фильтр в запросах имеется специальный класс, который десериализует строку в коллекцию фильтров для EntitySchemaQuery.
var constructorArgument = new ConstructorArgument("userConnection", userConnection); var filterConverter = ClassFactory.Get<IProcessDataContractFilterConverter>(constructorArgument); IEntitySchemaQueryFilterItem filterCollection = filterConverter.ConvertToEntitySchemaQueryFilterItem(esq, filterValue); esq.Filters.Add(filterCollection);
где filterValue - это тот самый расширенный фильтр.
При этом я не наблюдаю обратного механизма сериализации коллекции фильтров в формат, понятный для модуля расширенных фильтров на клиентской части. Как правильно сохранить коллекцию фильтров в базе?
Пока единственный рабочий вариант что приходит в голову - составлять его из частей заранее заготовленных строк.
Нравится
Добрый день, Михаил!
Действительно, в классе ProcessDataContractFilterConverter нет подходящего метода для сериализации. Там есть метод GetActivityFinalStatusFilter, который возвращает уже сигнализированную строку фильтров для активности, однако, он не то, что нужно в этой ситуации.
Рекомендую ознакомится с примеров https://academy.terrasoft.ua/docs/developer/integrations_and_api/data_s…, а именно "Пример реализации класса коллекции фильтров".
Помимо этого прикладываю другой пример сериализации фильтров в c# коде.
string serializedFilters = Json.Serialize(new Filters { FilterType = FilterType.CompareFilter, ComparisonType = FilterComparisonType.Equal, LeftExpression = new ColumnExpression { ColumnPath = "testColumn" }, RightExpression = new BaseExpression { ExpressionType = EntitySchemaQueryExpressionType.Parameter, Parameter = new Parameter { Value = expectedFilterValue, DataValueType = DataValueType.Guid } } });