Здравствуйте!
В лиде есть деталь. Деталь стандартная, при нажатии на "+" открывается карточка создания.
задача состоит в том, чтобы из детали можно было открыть карточку редактирования по ссылке,а не через выбор пункта "изменить". например, как сделано с деталью Контакты в контрагенте. Делаю по аналогии, но у меня не работает. также в детали выведено поле UsrName и при клике на него нужно открыть объект UsrStructure.
есть особенность -объект детали был создан через конфигурацию,а не через мастер разделов. но у него есть страница редактирования,которая настраивается через деталь.
пробовала и через linkClicked и через on[ColumnName]LinkClick. первый вообще не вызывается. Второй тоже, но для него я знаю почему - так как в Terrasoft.configuration.ModuleStructure нет моей сущности.
var entitySchemaConfig = Terrasoft.configuration.ModuleStructure[entitySchemaName];
подскажите, пожалуйста, как я могу реализовать эту задачу?
Нравится
"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: Костыли. Я к примеру хочу в детали адрес контрагента лепить ссылку на поле "адрес":
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); }; }
Шаг 3: Вставить в methods детали.
Результат:
В чём проблема, то?:smile:
"Варфоломеев Данила" написал:В чём проблема, то?
видимо, во мне) большое спасибо, все работает!
В дополнение, у меня возникла проблема возврата в ту вкладку, из которой вызывалась страница. В addColumnLink сформировал ссылку. Переход происходит, но при нажатии на странице "Закрыть" возврат на первую вкладку, а вызов происходит из второй. Те же ссылки стандартные, например, "Контрагент" переходят и возвращаются корректно. Что упустил - понять не могу.
"Лапшин Павел Александрович" написал:Переход происходит, но при нажатии на странице "Закрыть" возврат на первую вкладку, а вызов происходит из второй.
Надо разбираться с HistoryState и браузерной строкой. Иногда при переходе по страницам bpm-ка не меняет путь и вот фиг знает, если честно, как система отреагирует на закрытие карточек(PushBackHistoryState событие). Надо тестить)