Построение фильтра EntitySchemaQuery с присоединением другой схемы
Добрый день, коллеги! Нужно просуммировать значения DurationInMitutes активностей контакта и поместить значение в поле контакта, для этого, как написано в академии, можно присоединить схему, в нашем случае Activity, но почему то вы результат приходит пустой ответ. Я попробовал упростить задачу и просто вывести диалоговой окно с заголовками всех активностей без фильтров, результат тот же, пустые ответы по каждому элементу коллекции (пример кода ниже)... Интересно что при построении пути колонке в виде esq.addColumn("Activity.Title", "ActivityName"); выдает диалоговое окно со значениями undefinedundefinedundefined...., то есть значение каждого элемента коллекции undefined, подскажите в чем может быть проблема?
var message= "";
// Создаем экземпляр класса Terrasoft.EntitySchemaQuery с корневой схемой [Contact].
var esq = Ext.create("Terrasoft.EntitySchemaQuery", {
rootSchemaName: "Contact"
});
esq.addColumn("[Activity:Id:Owner].Title", "ActivityName");
esq.getEntityCollection(function (result) {
if (!result.success) {
// обработка/логирование ошибки, например
this.showInformationDialog("Ошибка запроса данных");
return;
}
result.collection.each(function (item) {
// Обработка элементов коллекции.
message += item.get("ActivityName");
});
this.showInformationDialog(message);
}, this);
Нравится
Кочев Антон Сергеевич,
1. Вместо [Activity:Id:Owner] требуется писать [Activity:Owner:Id] (или [Activity:Owner]), т.к. на втором месте идет поле дочернего объекта по которому присоединяем, а на третьем поле текущего объекта.
2. У вас нет фильтра
Спасибо за совет! Сделал оба пункта - все равно пустые ответы, при этом если ставить вместо параметра CurrentContactId значение id контакта, то результаты приходят корректно... пробовал указывать тип данных фльтра Terrasoft.DataValueType.GUID, ничего не меняется, в чем может быть проблема?
var CurrentContactId = this.get('Id');
var message= "";
var esq = Ext.create("Terrasoft.EntitySchemaQuery", {
rootSchemaName: "Contact"
});
esq.addColumn("[Activity:Owner:Id].Title", "ActivityName");
var esqFirstFilter = esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, '[Activity:Owner:Id].Id', CurrentContactId);
esq.filters.add("esqFirstFilter", esqFirstFilter);
esq.getEntityCollection(function (result) {
if (!result.success) {
this.showInformationDialog("Ошибка запроса данных");
return;
}
result.collection.each(function (item) {
message += item.get("ActivityName");
});
this.showInformationDialog(message);
}, this);
Антон,
Ваш фильтр:
esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, '[Activity:Owner:Id].Id', CurrentContactId);
Сравнивает Id активности и текущий Id сущности (предположительно контакт).
Вы же хотите сделать фильтр по контакту:
esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, 'Id', CurrentContactId);
Еще проще этот запрос бы смотрелся если бы вы использовали в качестве корневой схемы - схему Actvity, а не Contact. Тогда не нужны будут никакие обратные связи.
Дмитрий, спасибо, такую очевидную вещь упустил...), а на счет запроса в карточке активности: просуммированное значение нужно поместить в схему контакта, это проще сделать из схемы контакта