Нужно сделать следующий запрос на стороне клиента:
select id, Name, (select top(1) pp.Price from ProductPrice pp where pp.ProductId = Product.Id and pp.TypeId = 'xxxxxxx') from Product
На стороне сервера нашел как: https://academy.terrasoft.ua/documents/technic-sdk/7-13/dobavlenie-kolonok-v-zapros-metod-addcolumn
Как сделать этот запрос на клиенте?
Нравится
Здравствуйте, вам нужно смотреть в сторону Terrasoft.SubQueryExpression
https://academy.terrasoft.ua/jscoresdk/?partner=sibis#!/api/Terrasoft.d…
Поищите в конфигурации примеры по "SubQueryExpression"
Сортировку можно применить как к обычной колонке. И добавить необходимые фильтры.
Простите, описание съезжает в приложение кода)
/** * Добавляет в запрос колонку имени схемы. * @protected * @virtual * @param {Terrasoft.EntitySchemaQuery} esq Объект запроса. * @param {String} columnPath Путь к колонке. * @param {String} columnAlias Псевдоним колонки. */ addSchemaNameColumn: function(esq, columnPath, columnAlias) { var expressionConfig = { columnPath: columnPath, parentCollection: this, aggregationType: Terrasoft.AggregationType.NONE }; var column = Ext.create("Terrasoft.SubQueryExpression", expressionConfig); var filter = Terrasoft.createColumnFilterWithParameter( Terrasoft.ComparisonType.EQUAL, "SysWorkspace", Terrasoft.SysValue.CURRENT_WORKSPACE.value ); column.subFilters.addItem(filter); var esqColumn = esq.addColumn(columnAlias); esqColumn.expression = column; }
Можно реализовать запрос в запросе, то есть сначала получить select id, Name from Product, а потом в функции обработки результата выборки для каждой записи вызывать select top(1) pp.Price from ProductPrice pp where pp.ProductId = Product.Id and pp.TypeId = 'xxxxxxx'.
С точки зрения нагрузки на базу данных будет тоже, что и select id, Name, (select top(1) pp.Price from ProductPrice pp where pp.ProductId = Product.Id and pp.TypeId = 'xxxxxxx') from Product
Алла Савельева,
К сожалению так нельзя. Изначально идет запрос на выборку всех продуктов. И мне нужно выбрать поля продукта и одну из цен на детальке цен продуктов
Получилось сделать так:
esq.addAggregationSchemaColumn("[WisPriceInRegion:WisProduct].WisCostDelivery", Terrasoft.AggregationType.MIN, "Price", Terrasoft.AggregationEvalType.ALL); var esqFirstFilter = esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "[WisPriceInRegion:WisProduct].WisDistrict", this.get("WisDistrict").value); esq.filters.add("esqFirstFilter", esqFirstFilter);
Но все же нужно сделать сортировку по дате создания и выбирать топ(1)
Здравствуйте, вам нужно смотреть в сторону Terrasoft.SubQueryExpression
https://academy.terrasoft.ua/jscoresdk/?partner=sibis#!/api/Terrasoft.d…
Поищите в конфигурации примеры по "SubQueryExpression"
Сортировку можно применить как к обычной колонке. И добавить необходимые фильтры.
Простите, описание съезжает в приложение кода)
/** * Добавляет в запрос колонку имени схемы. * @protected * @virtual * @param {Terrasoft.EntitySchemaQuery} esq Объект запроса. * @param {String} columnPath Путь к колонке. * @param {String} columnAlias Псевдоним колонки. */ addSchemaNameColumn: function(esq, columnPath, columnAlias) { var expressionConfig = { columnPath: columnPath, parentCollection: this, aggregationType: Terrasoft.AggregationType.NONE }; var column = Ext.create("Terrasoft.SubQueryExpression", expressionConfig); var filter = Terrasoft.createColumnFilterWithParameter( Terrasoft.ComparisonType.EQUAL, "SysWorkspace", Terrasoft.SysValue.CURRENT_WORKSPACE.value ); column.subFilters.addItem(filter); var esqColumn = esq.addColumn(columnAlias); esqColumn.expression = column; }
Пащенко Александр Сергеевич,
Вот это было круто, спс