Кликабельные ссылки в детали с редактируемым реестром
Возможно ли сделать, чтобы после сохранения записи в деталь с редактируемым реестром, запись была кликабельной? В моем случае есть 2 поля "ФИО студента" и "Договор".
![]()
Нравится
Здравствуйте!
Для наглядного примера реализации используйте базовую схему SupplyPaymentDetailV2 - http://prntscr.com/i95aqv (см. метод - linkClicked и "useLinks").
Вильшанский Дмитрий,
А можете помочь разобраться в моем го*нокоде?) Я попытался сделать так, чтобы в Дробное поле "Сумма" подтягивалось значение "Сумма", которое находится в карточке договора, который мы выбираем в поле "Договор" в нашей детальке. Так вот, сумма подтягивается, но после этого действия я не могу сменить договор, он просто не удаляется из этого поля. Можно снести только всю запись. Ниже прикреплю код.
attributes: {
"UsrAmountInCommission": {
dataValueType: Terrasoft.DataValueType.FLOAT,
dependencies: [
{
columns: ["UsrContract"],
methodName: "recalcCommission"
}
]
}
},
methods: {
recalcCommission: function() {
var contract = this.get("UsrContract").value;
var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {
rootSchemaName: "UsrContract"
});
esq.addColumn("UsrAmountCommission", "UsrAmountCommission");
esq.getEntity(contract, function(result) {
this.set("UsrAmountInCommission", result.entity.get("UsrAmountCommission"));
}, this);
}
},
предварительно:
1) функция отрабатывает на каждое(!) изменение поля UsrContract. вы выбрали значение, this.get("UsrContract").value; вам что-то вернул. вы удалили значение - угадайте что произойдет. спойлер - "can't take value of undefined". проверки, везде проверки на null надо бы сделать)
2) Ну почему esq???) почему не вот так:
attributes: {
"UsrAmountInCommission": {
dataValueType: Terrasoft.DataValueType.FLOAT,
lookupListConfig: {
columns: ["UsrAmountCommission"]
}
dependencies: [
{
columns: ["UsrContract"],
methodName: "recalcCommission"
}
]
}
},
methods: {
recalcCommission: function() {
var contract = this.get("UsrContract");
if (!Ext.isEmpty(contract)) {
this.set("UsrAmountInCommission", contract.UsrAmountCommission || 0);
}
}
},
Варфоломеев Данила,
Спасибо за помощь. Не совсем понял Ваш код, но немного покопав в комьюнити отредактировал Ваш код (прикреплю ниже) и вроде бы теперь все корректно работает. Благодарю. Скоро программистом стану, благодаря этому комьюнити :D
attributes: {
"UsrContract": {
lookupListConfig: {
columns: ["UsrAmountCommission"]
}
},
"UsrAmountInCommission": {
dataValueType: Terrasoft.DataValueType.FLOAT,
dependencies: [
{
columns: ["UsrContract"],
methodName: "recalcCommission"
}
]
}
},
methods: {
recalcCommission: function() {
var contract = this.get("UsrContract");
if (contract) {
if (contract.UsrAmountCommission) {
this.set("UsrAmountInCommission", contract.UsrAmountCommission || 0);
}
else {
this.set("UsrAmountInCommission", 0);
}
}
else {
this.set("UsrAmountInCommission", 0);
}
}
},
Alex Zaslavsky пишет:
Не совсем понял Ваш код
Просмотрел его сейчас, тоже не особо понял) Не стоит, видимо, в полночь логику писать) Если что-то не поняли - пишите, форум для этого и существует.
Можно немного подсократить ваш вариант, убрать один else: Конструкция contract.UsrAmountCommission || 0 - как раз проверит есть ли значение в contract.UsrAmountCommission, если его нет вернёт 0, если есть - вернёт значение contract.UsrAmountCommission.
Варфоломеев Данила,
а не подскажете, если у меня, допустим не дробное число, а какое-то значение в справочнике, например, валюта или просто текстовое поле?
contract.UsrStudentName || "" - для текстового поля вот так, наверное.
contract.UsrCurrency || "..."
А как сделать пустым валютный справочник, если я надумал удалить договор?