Вопрос

Использование EntitySchemaQuery для построения запросов к базе данных в коде страницы

Коллеги, прошу Вашей помощи!

Есть задача: При отработки определенного типа активности и переводе её в состояние "Завершена", должна происходить проверка, добавлен ли в файлы и ссылки этой активности хотя бы один документ. Если добавлен, то сохранять активность, если нет - то выводить предупреждающее сообщение. 

 

Я попробовал в конфигурации страницы активности ActivityPageV2 переопределить метод save() и прописать там проверку на вложенный документ таким образом: 

 

save: function() {

    var activityStatus = (this.get("Status").value).toString();

    

    var activityTitle = (this.get("Title")).toString();

    

    if (activityTitle === "Активность для Управления оценки рисков")

    {

        if (activityStatus === "4bdbb88f-58e6-df11-971b-001d60e938c6") {

            

            var activityId = this.get("Id");    

            

            var checkInfo = false;

            

            var esq = Ext.create("Terrasoft.EntitySchemaQuery", {

                rootSchemaName: "ActivityFile"

            });

            

            esq.addColumn("Name","actName");

            

            var esqFirstFilter = esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "Activity", activityId);

            

            esq.filters.add("esqFirstFilter", esqFirstFilter);

            

            esq.getEntityCollection(function(result) {

                if (result.success) {

                    

                    checkInfo = true;

                    

                }

            }, this);

            

            if (checkInfo) {

                this.callParent(arguments); //если документ есть сохраняем страницу

            } else {

                this.showInformationDialog(Ошибка. Не добавлен документ в файлы и ссылки!); //если документа нет - выводим сообщение

            }

            

        }

        else {

            this.callParent(arguments);

        }

        

    }

    else

    {

        this.callParent(arguments);

    }                                   

}

 

После долгих проверок выяснилось, что  параметр checkInfo не передает измененное значение с false на true внутри esq.getEntityCollection(function(result) {},this) и остается в значении false, хотя проверка в ActivityFile отрабатывает корректно. 

Вопрос: как передать измененное значение checkInfo из esq.getEntityCollection обратно на страницу, чтобы далее можно было прописывать различные условия проверки? Или может я вообще не правильно осуществляю проверку вложенного документа и есть другие способы?

Нравится

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

Вот один из примеров, как это можно реализовать:



 

 define("ActivityPageV2", [],
	function() {
		return {
			entitySchemaName: "Activity",
			attributes:{
				"isSecond": {
					"dataValueType": Terrasoft.DataValueType.BOOLEAN,
					"type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
					"value": false
				}
			},
			methods: { 
				save: function() {
 
					if(this.get("isSecond")){
						this.callParent(arguments);
						this.set("isSecond", false);
					}else{
						var activityStatus = (this.get("Status").value).toString();
 
						var activityTitle = (this.get("Title")).toString();
 
						if (activityTitle === "Активность для Управления оценки рисков")
						{
							if (activityStatus === "4bdbb88f-58e6-df11-971b-001d60e938c6") {
 
								var activityId = this.get("Id");    
 
								var checkInfo = false;
 
								var esq = Ext.create("Terrasoft.EntitySchemaQuery", {
									rootSchemaName: "ActivityFile"
								});
 
								esq.addColumn("Name","actName");
 
								var esqFirstFilter = esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "Activity", activityId);
 
								esq.filters.add("esqFirstFilter", esqFirstFilter);
 
								esq.getEntityCollection(function(result) {
 
									if (result.success && result.collection.collection.length > 0) {
										this.set("isSecond", true);
										this.save();//если документ есть сохраняем страницу
									} else {
										this.showInformationDialog("Ошибка. Не добавлен документ в файлы и ссылки!"); //если документа нет - выводим сообщение
									}
 
								}, this);
 
							}
							else {
								this.callParent(arguments);
							}
 
						}
						else
						{
							this.callParent(arguments);
						}  
					}
				}, 
				test: function(){
 
				}
			},
			diff: /**SCHEMA_DIFF*/[
			]/**SCHEMA_DIFF*/
		};
	});

 

Вот один из примеров, как это можно реализовать:



 

 define("ActivityPageV2", [],
	function() {
		return {
			entitySchemaName: "Activity",
			attributes:{
				"isSecond": {
					"dataValueType": Terrasoft.DataValueType.BOOLEAN,
					"type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
					"value": false
				}
			},
			methods: { 
				save: function() {
 
					if(this.get("isSecond")){
						this.callParent(arguments);
						this.set("isSecond", false);
					}else{
						var activityStatus = (this.get("Status").value).toString();
 
						var activityTitle = (this.get("Title")).toString();
 
						if (activityTitle === "Активность для Управления оценки рисков")
						{
							if (activityStatus === "4bdbb88f-58e6-df11-971b-001d60e938c6") {
 
								var activityId = this.get("Id");    
 
								var checkInfo = false;
 
								var esq = Ext.create("Terrasoft.EntitySchemaQuery", {
									rootSchemaName: "ActivityFile"
								});
 
								esq.addColumn("Name","actName");
 
								var esqFirstFilter = esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "Activity", activityId);
 
								esq.filters.add("esqFirstFilter", esqFirstFilter);
 
								esq.getEntityCollection(function(result) {
 
									if (result.success && result.collection.collection.length > 0) {
										this.set("isSecond", true);
										this.save();//если документ есть сохраняем страницу
									} else {
										this.showInformationDialog("Ошибка. Не добавлен документ в файлы и ссылки!"); //если документа нет - выводим сообщение
									}
 
								}, this);
 
							}
							else {
								this.callParent(arguments);
							}
 
						}
						else
						{
							this.callParent(arguments);
						}  
					}
				}, 
				test: function(){
 
				}
			},
			diff: /**SCHEMA_DIFF*/[
			]/**SCHEMA_DIFF*/
		};
	});

 

Mykhailo Storozhuk,

Супер! Спасибо большое!!! А то 3 дня мучался, пытаясь найти решение)) Тоже через атрибут пробовал, но не додумался перевызывать метод save() c проверкой этого атрибута. Благодарю!

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