Добрый день!
Задача такая - в разделе Заказы есть деталь Площадка - объект, куда необходимо доставить продукт. Площадок в заказе может быть несколько. Необходимо отобразить на карте объекты в выбранных заказах.
На странице OrderSectionV2 добавила кнопку "Показать площадку на карте", при этом в В define и function прописала "MapsUtilities", "MapsHelper".
Добавила функцию:
var items = this.getSelectedItems();//отмеченные галкой заказы - массив
var Farm = [];//массив площадок
var select = Ext.create("Terrasoft.EntitySchemaQuery", {
rootSchemaName: "UsrPlatform1C"
});
select.addColumn("UsrPlatform");
select.addColumn("UsrOrder");
select.filters.add("UsrPlatformId", this.Terrasoft.createColumnInFilterWithParameters("UsrOrder", items));
select.getEntityCollection(function(result) {
if (result.success) {
Terrasoft.each(result.collection.getItems(), function(item) {
Farm.push(item.set("UsrPlatform").value);
});
}
});
var selectS = Ext.create("Terrasoft.EntitySchemaQuery", {
rootSchemaName: "UsrFarm"
});
selectS.addColumn("Id");
selectS.addColumn("UsrName");
selectS.addColumn("UsrAdress");
selectS.addColumn("UsrCity");
selectS.addColumn("UsrRegion");
selectS.addColumn("UsrCountry");
selectS.addColumn("UsrGPSN");
selectS.addColumn("UsrGPSE");
selectS.filters.add("FarmId", this.Terrasoft.createColumnInFilterWithParameters("Id", Farm));
selectS.getEntityCollection(function(result) {
if (result.success) {
var mapsConfig = {
mapsData: []
};
result.collection.each(function(item) {
var address = [];
if (item.get("UsrCountry") && item.get("UsrCountry").displayValue) {
address.push(item.get("UsrCountry").displayValue);
}
if (item.get("UsrRegion") && item.get("UsrRegion").displayValue) {
address.push(item.get("UsrRegion").displayValue);
}
if (item.get("UsrCity") && item.get("UsrCity").displayValue) {
address.push(item.get("UsrCity").displayValue);
}
address.push(item.get("UsrAdress"));
var dataItem = {
caption: item.get("UsrName"),
content: "
"
+ item.get("UsrName") + "address: item.get("UsrAdress") ? address.join(", ") : null,
//конвертирование полей долготы и широты
gpsN: parseFloat(item.get("UsrGPSN")),
gpsE: parseFloat(item.get("UsrGPSE")),
updateCoordinatesConfig: {
schemaName: "UsrFarm",
id: item.get("Id")
}
};
mapsConfig.mapsData.push(dataItem);
});
MapsUtilities.open({
scope: this,
mapsConfig: mapsConfig
});
}
}, this);
}
При отладке кода выяснила, что фильтрация по выбранным заказам выполняется, получаем выбранные заказы и площадки в этих заказах.
А в запросе при выборе Адреса, Региона, Страны получаем данные ВСЕХ площадок, которые есть в базе данных, а не только полученных из предыдущего запроса. (скриншот во вложении). Помогите, пожалуйста, разобраться в чем ошибка в фильтрации в запросе!!!
Нравится
Здравствуйте, Юлия.
Причиной данного поведения является то, что функция, передаваемая аргументом в метод getEntityCollection, вызывается ассинхронно (то есть после выполнения sql запроса в базу данных).
И на момент добавления фильтра в строке:
selectS.filters.add("FarmId", this.Terrasoft.createColumnInFilterWithParameters("Id", Farm));
массив Farm пустой. Следовательно, фильтрация не отрабатывает. Рекомендую Вам смотреть в сторону использования метода Terrasoft.chain или же формировать второй запрос к базе данных в callback функции первого запроса, а если точнее то сразу после кода:
Terrasoft.each(result.collection.getItems(), function(item) { Farm.push(item.set("UsrPlatform").value); });