Приветствую! 

Недавно занялся изучением и работой с платформой Creatio. По тому по коду прошу не ругать ;) 
 

Задача популярная: выбрать из таблицы записи по фильтру, посчитать кол-во совпадений и сравнить с системной настройкой. 

Код реализации с getEntity:

var message;
 
var recordId = this.get("Id");
 
if(recordId) {
		var esq1 = this.Ext.create("Terrasoft.EntitySchemaQuery", {
						rootSchemaName: "UsrSwimmProgramm"
		});
 
		var filterA = esq1.createColumnFilterWithParameter(
					Terrasoft.ComparisonType.EQUAL, "UsrSPBooleanActive" , 1);
		var filterP = esq1.createColumnFilterWithParameter(
					Terrasoft.ComparisonType.EQUAL, "UsrSPLookupPeriod.Name" , "Ежедневно");
		esq1.filters.logicalOperation = Terrasoft.LogicalOperatorType.AND;
		esq1.filters.add("filterA",filterA);
		esq1.filters.add("filterP",filterP);
 
		esq1.addAggregationSchemaColumn("Id", Terrasoft.AggregationType.COUNT, 
						"NumberDayLesson", Terrasoft.AggregationEvalType.ALL);
 
 
				esq1.getEntity(recordId, function(result) {
					if (!result.success) {
						this.showInformationDialog("Ошибка запроса");
						return;
					}
					message = result.entity.get("NumberDayLesson") + "\n";
				this.showInformationDialog(message);
				}, this);
 
				}

Код реализации с getEntityCollection:

var message;
var recordId = this.get("Id");
 
if(recordId) {
			var esq1 = this.Ext.create("Terrasoft.EntitySchemaQuery", {
						rootSchemaName: "UsrSwimmProgramm"
				});
 
				var filterA = esq1.createColumnFilterWithParameter(
					Terrasoft.ComparisonType.EQUAL, "UsrSPBooleanActive" , 1);
				var filterP = esq1.createColumnFilterWithParameter(
					Terrasoft.ComparisonType.EQUAL, "UsrSPLookupPeriod.Name" , "Ежедневно");
				esq1.filters.logicalOperation = Terrasoft.LogicalOperatorType.AND;
				esq1.filters.add("filterA",filterA);
				esq1.filters.add("filterP",filterP);
 
				esq1.addAggregationSchemaColumn("Id", Terrasoft.AggregationType.COUNT, 
						"NumberDayLesson", Terrasoft.AggregationEvalType.ALL);
 
				esq1.getEntityCollection( function(result){
					message = result.collection.getByIndex(0).get("NumberDayLesson");
					this.showInformationDialog(message);
				},this);
 
	}

 

Так вот, почему при всех равных метод getEntity выдает не определенной значение, а вот с getEntityCollection все работает норм ? 

 

 

Нравится

2 комментария
Лучший ответ

Добрый вечер.

 

Метод getEntity используется для получения одной строки набора данных по заданному первичному ключу.

И в Вашем случае этот метод не срабатывает, потому что в заданном наборе данных не находит запись по этому recordId. Фактически, при использовании этого метода Вы добавляете ещё один фильтр по полю Id записи.

 

Попробуйте посмотреть запросы, которые идут в базу данных в одном случае и в другом.

Добрый вечер.

 

Метод getEntity используется для получения одной строки набора данных по заданному первичному ключу.

И в Вашем случае этот метод не срабатывает, потому что в заданном наборе данных не находит запись по этому recordId. Фактически, при использовании этого метода Вы добавляете ещё один фильтр по полю Id записи.

 

Попробуйте посмотреть запросы, которые идут в базу данных в одном случае и в другом.

Спасибо большое, Алла. Уже смотрю.

Показать все комментарии

есть простой до безобразия код:

var select = Ext.create("Terrasoft.EntitySchemaQuery", { rootSchemaName: "Usrgifts" });
                select.addColumn("id");
                select.getEntityCollection(function(result) {
                    if (result.success) {
                        var collection = result.collection;
                        collection.each(function(item) {
                            this.set("UsrPriceodPresent", 34);
                        }, this);
                    }
                }, this);

вылетает на getEntityCollection, без ошибок без ничего, просто не заходит внутрь...

можете подсказать в чем проблема?

Нравится

3 комментария

Добрый день

Такого не бывает :) На вкладке Network должна быть информация. И что значит вылетает? Он должен внутрь зайти только после возврата результата с сервера

Артем Гура,

Да, вы правы. Впечетление что оно внутрь заходит и там теряется(. Но это вроде прошло, скопировал другой рабочий запрос и по 1 строке переправил на тот что мне нужно -

var esq = Ext.create("Terrasoft.EntitySchemaQuery", {rootSchemaName: "Usrgifts"});
                esq.addAggregationSchemaColumn("UsrPriceodPresent", Terrasoft.AggregationType.SUM, "RecalcGiftsAmountContact");
                esq.filters.add("OnlyEWS", this.Terrasoft.createColumnFilterWithParameter(
                    this.Terrasoft.ComparisonType.EQUAL, "Usrgiftscontact", this.get("PrimaryColumnValue")));

Но тут почему то не возвращает ни одной строки, хотя в итога должна быть 1, разве нет?

Заработало! Сначала все  написал)

Показать все комментарии