В эту деталь (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();
Значит я где-то не донастроил деталь?
А можно пример всего кода, ибо на первый взгляд все выглядит крайне неправильно)
"Варфоломеев Данила" написал:А можно пример всего кода, ибо на первый взгляд все выгляди крайне неправильно)
[javascript]
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;
}
[/javascript]
Да, пока писал вроде понял, что 100% неверно здесь:
[javascript]
esq.addColumn("Name", "ParamName");
esq.addColumn("UsrContactLoyalty.Name", "ContactLoyalty");
esq.addColumn("UsrContactLoyalty", "LoyaltyObj");
[/javascript]
Поле UsrParam, - ссылается на справочник с полями: Name, Description и справочным полем UsrLoyalty.
Но еще остается вопрос с пропадающими записями...
Здравствуйте, Илья.
1) Ошибка, показанная Вами на скриншоте, указывает на то, что в InsertQuery была добавлена колонка UsrParam несколько раз. Возможно это возникает по причине того, что this.UpdateQuery вызывается до того, как прошел INSERT запрос. Рекомендую Вам обновлять деталь в функции обратного вызова метода execute. Пример:
[javascript]
insert.execute(function() {
this.updateDetails();
, this);
[/javascript]
2) Записи на детали пропадать по следующим причинам: не настроенные колонки для реестра детали или же некорректное связывание детали и карточки (что более вероятно).
ого..... Всё, что можно было написать неправильно, тут неправильно xDD как оно вообще работает?)) должно же быть примерно так:
[javascript]
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) {
/*коллбэк вставки записей в бд*/
}
[/javascript]
"Мотков Илья" написал:
2) Записи на детали пропадать по следующим причинам: не настроенные колонки для реестра детали или же некорректное связывание детали и карточки (что более вероятно).
Я создавал деталь через мастер деталей, по идее же все само должно было связаться.
Но если это не так, то каким образом это сделать?
Из этой статьи https://academy.terrasoft.ru/documents/technic-sdk/7-8/sozdanie-detali-…
не вариант, т.к. нет доступа к БД (или как это называется, локальный режим)...
"Варфоломеев Данила" написал:ого..... Всё, что можно было написать неправильно, тут неправильно xDD как оно вообще работает?)) должно же быть примерно так:
Спасибо, вроде работает (по крайней мере без ошибок), но результата не видно, т.к. обновление деталей сбрасывает все записи детали.
Илья. Деталь сама по себе является таблицей в базе данных и в ней хранятся все записи, добавляемые в неё из любого места где она выведена. При добавлении детали на карточку через Мастер разделов, Вы выбираете поля для связи детали с карточкой. По этим полям происходит фильтрация (в момент добавления записи с колонки карточки будет взято значение и записано в выбранную колонку детали).
Аналогично, при открытии карточки, на которую выведена деталь, в реестр детали будут загружены те записи, значения которых в выбранных колонках детали и карточки совпадают. При добавлении записи на деталь, запись отобразится в любом случае, фильтрация произойдет только после обновления реестра детали.
Аналогично происходит и в Вашем случае, запись видна пока не будет обновлен реестр, поскольку запись не проходит фильтрацию.
Колонки, по которым происходит фильтрация можно посмотреть, как в Мастере разделов, так и в самой схеме карточки. Пример из схемы CasePage для детали Файлы и ссылки:
[javascript]
"Files": {
"schemaName": "FileDetailV2",
"entitySchemaName": "CaseFile",
"filter": {
"masterColumn": "Id",
"detailColumn": "Case"
}
},
[/javascript]
В данном случае фильтрация происходит по колонке Id обращения и колонке Case детали.
"Мотков Илья" написал:
СПАСИБО!!! Назначил фильтр правильно по моим ячейкам, и все заработало.
И, что удивительно, 200+ записей было внесено, т.о. код выше работает, просто не отображался (фильтровался).