Добрый день, как можно c помощью entitySchemaQuery изменить значение колонки в детали на странице.
Есть страница, и на ней две детали в разных вкладках. Одна деталь - "позиции заказа", другая "Документы по заказу". В деталь "документы по заказу" добавила кнопку, при нажатии на которую, происходит update значения выбранной колонки(сделала через updateQuery по инструкции из документации). В этом же методе с помощью entitySchemaQuery создаю коллекцию с корневой схемой "позиции заказа". При обработке этой коллекции я пытаюсь поменять значение колонки с помощью инструкции this.set("NameColumn",value);
Однако это не работает, и значение колонки не меняется.
Подскажите, пожалуйста, что я делаю не так и можно ли изменить значение колонки в детали через front-end?
Нравится
Здравствуйте,
Метод this.set("NameColumn",value) лучше заменить на обновление поля с помощью колл-бэк функции. Ниже представлен метод:
methodName: function() { var updateQuery = Ext.create("Terrasoft.UpdateQuery", { rootSchemaName: "YourSchemaName"}); var filters = updateQuery.filters; filters.addItem(this.Terrasoft.createColumnFilterWithParameter( this.Terrasoft.ComparisonType.EQUAL, "YourDetailColumnName", "YourColumnNameFromPageDesigner",)); updateQuery.setParameterValue("YourColumnNameToUpdate", "ValueToWriteInUpdate", this.Terrasoft.DataValueType.TEXT); updateQuery.execute(function(result){ if(result.success) this.updateDetail({detail: "YourDetailCodeName"});}, this); }
Более подробное описание вы можете найти тут: https://community.terrasoft.ua/questions/ustanovka-znacheniy-kolonok-cherez-esq-na-klientskoy-chasti#comment-88853
С уважением,
Ангелина!
Добрый день,
Пожалуйста, предоставьте пример entitySchemaQuery, который вы настраиваете.
Viktoriia Hrynchuk,
Ниже код метода, который вызывается при нажатии кнопки. С таким подходом ошибок не возникает, но и значение StatusComponentOrder не проставляется. При отладке коллекция формируется.
setStatusDetail:function() { /* Получает массив идентификаторов выбранных записей. */ var selectedRows = this.get("SelectedRows"); /* Обработка запускается в случае, если выбрана хотя бы одна запись. */ if (selectedRows.length > 0) { /* Создает экземпляр класса пакетных запросов. */ var batchQuery = this.Ext.create("Terrasoft.BatchQuery"); /* Обновляет каждую из выбранных записей. */ selectedRows.forEach(function(selectedRowId) { /* Создает экземпляр класса UpdateQuery с корневой схемой Activity. */ var update = this.Ext.create("Terrasoft.UpdateQuery", { rootSchemaName: "DocumentComponent" // DocumentComponent - схема отвечающая за документы по заказу }); //Далее я пытаюсь создать ещё одну коллекцию, на основе другой схемы и получить по связям колонку, которую также необходимо обновить, но уже в другой детали. var esq = this.Ext.create("Terrasoft.EntitySchemaQuery",{ rootSchemaName: "OrderPosition" }); esq.addColumn("StatusComponentOrder","StatusComponent"); esq.addColumn("RowDocumentComponent.DocumentId","DocMoving"); esq.esqFirstFilter = esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "RowDocumentComponent.DocumentId", selectedRowId); esq.filters.add("esqFirstFilter",esqFirstFilter); esq.getEntityCollection(function(result) { if(result.success) { result.collection.each(function(item) { this.set("StatusComponentOrder",ConstantJS.StatusComponent); } )} },this); /* Применяет фильтр для определения записи для обновления. */ update.enablePrimaryColumnFilter(selectedRowId); /* Для колонки [Status] устанавливается значение из файла с константами */ update.setParameterValue("Status", "ConstantJS.DocShipped", this.Terrasoft.DataValueType.GUID); /* Добавляет запрос на обновление записи в пакетный запрос. */ batchQuery.add(update); }, this); /* Выполняет пакетный запрос к серверу. */ batchQuery.execute(function() { /* Обновляет реестр. */ this.reloadGridData(); }, this); }
}
Здравствуйте,
Метод this.set("NameColumn",value) лучше заменить на обновление поля с помощью колл-бэк функции. Ниже представлен метод:
methodName: function() { var updateQuery = Ext.create("Terrasoft.UpdateQuery", { rootSchemaName: "YourSchemaName"}); var filters = updateQuery.filters; filters.addItem(this.Terrasoft.createColumnFilterWithParameter( this.Terrasoft.ComparisonType.EQUAL, "YourDetailColumnName", "YourColumnNameFromPageDesigner",)); updateQuery.setParameterValue("YourColumnNameToUpdate", "ValueToWriteInUpdate", this.Terrasoft.DataValueType.TEXT); updateQuery.execute(function(result){ if(result.success) this.updateDetail({detail: "YourDetailCodeName"});}, this); }
Более подробное описание вы можете найти тут: https://community.terrasoft.ua/questions/ustanovka-znacheniy-kolonok-cherez-esq-na-klientskoy-chasti#comment-88853
С уважением,
Ангелина!