В эту деталь (UsrLoyaltyObj)
Надо программно добавить записи, чтобы стало так:
Полазив на форуме, сказали что делается это через InsertQuery, и что я пробовал:
rootSchemaName: "UsrLoyaltyObj"
});
insert.setParameterValue("UsrParam", item, Terrasoft.DataValueType.GUID);
insert.setParameterValue("UsrLoyalty", item.get("LoyaltyObj"), Terrasoft.DataValueType.GUID);
insert.execute();
this.updateDetails();
Где, UsrParam и UsrLoyalty - справочные поля детали. А Item элемент коллекции из EntitySchemaQuery.
Но, после вставки этого значения выдает ошибку в консоле:
Означает, что я где-то что-то не так или не туда делаю вставку?
Нравится
Ага, и есть еще одна проблема. Даже если вручную добавить записи (при помощи "+" действия), и сохранить изменения и выйти, то когда заходишь в карточку опять - записи исчезают.
Аналогично, записи исчезают после метода: this.updateDetails();
Значит я где-то не донастроил деталь?
А можно пример всего кода, ибо на первый взгляд все выглядит крайне неправильно)
"Варфоломеев Данила" написал:А можно пример всего кода, ибо на первый взгляд все выгляди крайне неправильно)
getInsertLtyParamDetailQuery: function() { var insert = Ext.create("Terrasoft.InsertQuery", { rootSchemaName: "UsrLoyaltyObj" }); var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", { rootSchemaName: "UsrRefLoyaltyParams" }); esq.addColumn("Name", "ParamName"); esq.addColumn("UsrContactLoyalty.Name", "ContactLoyalty"); esq.addColumn("UsrContactLoyalty", "LoyaltyObj"); var contactLty = this.get("UsrLoyalty"); var esqLtyFilter = esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "UsrContactLoyalty.Name", contactLty.displayValue); esq.filters.add(esqLtyFilter); esq.getEntityCollection(function(result) { if (!result.success) { result.collection.each(function(item) { insert.setParameterValue("UsrParam", item, Terrasoft.DataValueType.LOOKUP); insert.setParameterValue("UsrLoyalty", item.get("LoyaltyObj"), Terrasoft.DataValueType.LOOKUP); }); } }, this); insert.execute(); return insert; }
Да, пока писал вроде понял, что 100% неверно здесь:
esq.addColumn("Name", "ParamName"); esq.addColumn("UsrContactLoyalty.Name", "ContactLoyalty"); esq.addColumn("UsrContactLoyalty", "LoyaltyObj");
Поле UsrParam, - ссылается на справочник с полями: Name, Description и справочным полем UsrLoyalty.
Но еще остается вопрос с пропадающими записями...
Здравствуйте, Илья.
1) Ошибка, показанная Вами на скриншоте, указывает на то, что в InsertQuery была добавлена колонка UsrParam несколько раз. Возможно это возникает по причине того, что this.UpdateQuery вызывается до того, как прошел INSERT запрос. Рекомендую Вам обновлять деталь в функции обратного вызова метода execute. Пример:
insert.execute(function() { this.updateDetails(); , this);
2) Записи на детали пропадать по следующим причинам: не настроенные колонки для реестра детали или же некорректное связывание детали и карточки (что более вероятно).
ого..... Всё, что можно было написать неправильно, тут неправильно xDD как оно вообще работает?)) должно же быть примерно так:
getInsertLtyParamDetailQuery: function() { var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {rootSchemaName: "UsrRefLoyaltyParams"}); esq.addColumn("Name", "ParamName"); esq.addColumn("UsrContactLoyalty.Name", "ContactLoyalty"); esq.addColumn("UsrContactLoyalty", "LoyaltyObj"); var contactLty = this.get("UsrLoyalty"); esq.filters.addItem(esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "UsrContactLoyalty.Name", contactLty.displayValue)); esq.getEntityCollection(function(result) { if (result.success) { var batchQuery = Ext.create("Terrasoft.BatchQuery"); result.collection.each(function(item) { var insertQuery = Ext.create("Terrasoft.InsertQuery", { rootSchemaName: "UsrLoyaltyObj" }); insertQuery.setParameterValue("UsrParam", item.get("Id"), Terrasoft.DataValueType.GUID); insertQuery.setParameterValue("UsrLoyalty", item.get("LoyaltyObj").value, Terrasoft.DataValueType.GUID); batchQuery.add(insertQuery); }, this); batchQuery.execute(this.insertQueryCallback, this); } }, this); }, insertQueryCallback: function(result) { /*коллбэк вставки записей в бд*/ }
"Мотков Илья" написал:
2) Записи на детали пропадать по следующим причинам: не настроенные колонки для реестра детали или же некорректное связывание детали и карточки (что более вероятно).
Я создавал деталь через мастер деталей, по идее же все само должно было связаться.
Но если это не так, то каким образом это сделать?
Из этой статьи https://academy.terrasoft.ru/documents/technic-sdk/7-8/sozdanie-detali-…
не вариант, т.к. нет доступа к БД (или как это называется, локальный режим)...
"Варфоломеев Данила" написал:ого..... Всё, что можно было написать неправильно, тут неправильно xDD как оно вообще работает?)) должно же быть примерно так:
Спасибо, вроде работает (по крайней мере без ошибок), но результата не видно, т.к. обновление деталей сбрасывает все записи детали.
Илья. Деталь сама по себе является таблицей в базе данных и в ней хранятся все записи, добавляемые в неё из любого места где она выведена. При добавлении детали на карточку через Мастер разделов, Вы выбираете поля для связи детали с карточкой. По этим полям происходит фильтрация (в момент добавления записи с колонки карточки будет взято значение и записано в выбранную колонку детали).
Аналогично, при открытии карточки, на которую выведена деталь, в реестр детали будут загружены те записи, значения которых в выбранных колонках детали и карточки совпадают. При добавлении записи на деталь, запись отобразится в любом случае, фильтрация произойдет только после обновления реестра детали.
Аналогично происходит и в Вашем случае, запись видна пока не будет обновлен реестр, поскольку запись не проходит фильтрацию.
Колонки, по которым происходит фильтрация можно посмотреть, как в Мастере разделов, так и в самой схеме карточки. Пример из схемы CasePage для детали Файлы и ссылки:
"Files": { "schemaName": "FileDetailV2", "entitySchemaName": "CaseFile", "filter": { "masterColumn": "Id", "detailColumn": "Case" } },
В данном случае фильтрация происходит по колонке Id обращения и колонке Case детали.
"Мотков Илья" написал:
СПАСИБО!!! Назначил фильтр правильно по моим ячейкам, и все заработало.
И, что удивительно, 200+ записей было внесено, т.о. код выше работает, просто не отображался (фильтровался).