Нужно сделать следующий запрос на стороне клиента:
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;
}
Пащенко Александр Сергеевич,
Вот это было круто, спс