Деталь
ссылка
Технические вопросы
7.x

Открытие ссылки на карточку редактирования из детали

Здравствуйте!

В лиде есть деталь. Деталь стандартная, при нажатии на "+" открывается карточка создания.
задача состоит в том, чтобы из детали можно было открыть карточку редактирования по ссылке,а не через выбор пункта "изменить". например, как сделано с деталью Контакты в контрагенте. Делаю по аналогии, но у меня не работает. также в детали выведено поле UsrName и при клике на него нужно открыть объект UsrStructure.

есть особенность -объект детали был создан через конфигурацию,а не через мастер разделов. но у него есть страница редактирования,которая настраивается через деталь.

пробовала и через linkClicked и через on[ColumnName]LinkClick. первый вообще не вызывается. Второй тоже, но для него я знаю почему - так как в Terrasoft.configuration.ModuleStructure нет моей сущности.
var entitySchemaConfig = Terrasoft.configuration.ModuleStructure[entitySchemaName];

подскажите, пожалуйста, как я могу реализовать эту задачу?

Нравится

6 комментариев

"Zaitova Liubov" написал:подскажите, пожалуйста, как я могу реализовать эту задачу?

Можно поковыряться в GridUtilitiesV2, метод addColumnLink. Метод вызывается при формировании любого грида, ссылку можно сделать принудительно, для конкретной детали

"Варфоломеев Данила" написал:
Zaitova Liubov пишет:

подскажите, пожалуйста, как я могу реализовать эту задачу?

Можно поковыряться в GridUtilitiesV2, метод addColumnLink. Метод вызывается при формировании любого грида, ссылку можно сделать принудительно, для конкретной детали


я рассматривала метод addColumnLink. в нем есть следующая строка
var entitySchemaConfig = Terrasoft.configuration.ModuleStructure[entitySchemaName];
но моей сущности нет в этой коллекции Terrasoft.configuration.ModuleStructure, потому что я создавала ее через конфигурацию,а не через мастер.

"Zaitova Liubov" написал:var entitySchemaConfig = Terrasoft.configuration.ModuleStructure[entitySchemaName];

Шаг 1: Нафиг выкинуть все методы террасофта
Шаг 2: Костыли. Я к примеру хочу в детали адрес контрагента лепить ссылку на поле "адрес":
[javascript]
addColumnLink: function(item, column) {
var columnPath = column.columnPath;
var onColumnLinkClickName = "on" + columnPath + "LinkClick";
var profileColumns = this.getProfileColumns();
var profileColumn = profileColumns[columnPath];
var isProfiledLinkColumn =
profileColumn && (profileColumn.type === Terrasoft.GridCellType.LINK);
var isLinkColumn = this.getIsLinkColumn(this.getGridEntitySchema(), column);
if ((isProfiledLinkColumn || isLinkColumn) && !this.getIsEditable()) {
var referenceSchemaName = column.referenceSchemaName;
var schemaConfig = Terrasoft.configuration.ModuleStructure[referenceSchemaName];
var scope = this;
if (column.isLookup && schemaConfig) {
item[onColumnLinkClickName] = function() {
var record = this.get(columnPath);
if (!record) {
return "";
}
var recordId = record.value;
if (!recordId) {
return "";
}
return scope.createLink.call(this, referenceSchemaName, columnPath,
record.displayValue, recordId);
};
} else {
var columnIdName = item.primaryColumnName;
var entitySchemaName = this.getGridEntitySchemaName();
var entitySchemaConfig = Terrasoft.configuration.ModuleStructure[entitySchemaName];
if (entitySchemaConfig) {
item[onColumnLinkClickName] = function() {
var recordId = this.get(columnIdName);
if (!recordId) {
return "";
}
var displayValue = this.get(columnPath);
if (scope.Ext.isEmpty(displayValue)) {
return "";
}
var link =
LinkColumnHelper.createLink(entitySchemaName, columnPath, displayValue, recordId);
return link || scope.createLink.call(this, entitySchemaName, columnPath,
displayValue, recordId);
};
}
}
}
/**КОСТЫЛИ**/
if (columnPath === "Address") {
var scope = this;
var columnIdName = item.primaryColumnName;
var entitySchemaName = this.getGridEntitySchemaName();
item[onColumnLinkClickName] = function() {
var recordId = item.get("Id");
if (!recordId) {
return "";
}
var displayValue = item.get("Address");
if (scope.Ext.isEmpty(displayValue)) {
return "";
}

var editPageName ="AccountAddressPageV2";
var link = Terrasoft.workspaceBaseUrl + "/Nui/ViewModule.aspx#CardModuleV2/"+editPageName+"/edit/"+recordId;
return {
caption: displayValue,
target: "_self",
title: displayValue,
url: link
};
};
}
if (Ext.isEmpty(item[onColumnLinkClickName])) {
item[onColumnLinkClickName] = function() {
return (item.getLinkColumnConfig ? item.getLinkColumnConfig(column) : null);
};
}
[/javascript]
Шаг 3: Вставить в methods детали.
Результат:
зшс

В чём проблема, то?:smile:

"Варфоломеев Данила" написал:В чём проблема, то?


видимо, во мне) большое спасибо, все работает!

В дополнение, у меня возникла проблема возврата в ту вкладку, из которой вызывалась страница. В addColumnLink сформировал ссылку. Переход происходит, но при нажатии на странице "Закрыть" возврат на первую вкладку, а вызов происходит из второй. Те же ссылки стандартные, например, "Контрагент" переходят и возвращаются корректно. Что упустил - понять не могу.

"Лапшин Павел Александрович" написал:Переход происходит, но при нажатии на странице "Закрыть" возврат на первую вкладку, а вызов происходит из второй.

Надо разбираться с HistoryState и браузерной строкой. Иногда при переходе по страницам bpm-ка не меняет путь и вот фиг знает, если честно, как система отреагирует на закрытие карточек(PushBackHistoryState событие). Надо тестить)

Показать все комментарии