Добрый день, как можно 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
С уважением,
Ангелина!