Механика формирования колонок полей-гиперссылок и выбора displayValue для справочных полей
Совсем не ясна механика согласно которой, формируются поля с гиперссылками на связанные с ними объекты (карточки их редактирования).
Т.е. вот мы открываем реестр с объектами созданного нами раздела выводим колонки, одна из них (текстовая) - будет выводиться как гиперссылка на сам объект но визуально содержать свое значение.
Как и где это устанавливается ?
Если где либо вставляется справочное поле, то элементы выбираемые в нем - отображаются как гиперссылки в displayValue которых содержится значение конкретной колонки, почему именно ее, как это настраивать ?
Далее в деталях часто выводятся какие либо колонки, и хочется чтобы они были гиперсылками на карточку объекта связанного с деталью... как этого добиться, почему одни поля гиперссылки другие - нет ?
Нравится
А вот теперь вопрос...
Можно ли все таки управлять сим на уровне схем (карточки раздела)
В исходных кодах было обнаружено свойство в values конфигурационном объекте вьюхи
"values": { "itemType": this.Terrasoft.ViewItemType.HYPERLINK, ...
Может быть это оно ?
юзкейс который нужен:
Допустим у нас есть сущность с каким-то номером, пусть это будет сферический в ваккуме "Тендер"
У объекта есть поля "Номер тендера" и "Наименование".
Так вот на уровне объекта в "Отображаемое значение" мы устанавливаем "Номер тендера"
для того чтобы во всех справочных полях системы которые ссылаются на этот объект во въюхе гиперлинк-поля отображаемым значением (displayValue) был "Номер тендера"
А вот в само реестре объекта, колонка "Номер тендера" - скрывается за ненадобностью, но выводится колонка "Наименование", и вот конкретно в реестре хочется чтобы оно выводилось гиперлинком, как выводится поле "Номер проекта".
Надеюсь смысл понятен.
"Севостьянов Илья Сергеевич" написал:Надеюсь смысл понятен.
Гиперлинком то сделать можно, но обработку нажатия и открытие чего либо прийдется делать самому.
Пример ниже для детали, но суть понятна, текстовую колонку "UsrString" делаю ссылочной, и обрабатываю клик по ней в замещении linkClicked:
define("UsrSchema1Detail", [], function() { return { entitySchemaName: "UsrTest", details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/, diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/, attributes: { }, methods: { init: function() { this.callParent(arguments); document.scope = this; }, getIsLinkColumn: function(entitySchema, column) { if (column.columnPath === "UsrString") { return true; } return this.callParent(arguments); }, addColumnLink: function(item, column) { this.callParent(arguments); }, linkClicked: function(recordId, columnName) { if (columnName === "UsrString") { console.log("UsrString column clicked! and recordId is " + recordId); } this.callParent(arguments); } } }; });
"Максим Шевченко" написал:текстовую колонку "UsrString" делаю ссылочной
вот это не понятно как вы делаете ?
Где этот diff или генератор с "itemType": this.Terrasoft.ViewItemType.HYPERLINK
Далее... гиперссылочное поле оно же в сути должно содержать href т.е. при наведении на А-тег должны быть все браузерные "Копировать ссылку" и "Открыть в новой вкладке" и т.д. работать
А как-же это методом обработаешь... а как ссылку формировать, а куда ложить ?
Какая-то не гиперссылка получается а ее полу-имитация.
так... немного начинаю разбираться
getIsLinkColumn: function(entitySchema, column) { if (column.columnPath === "UsrString") { return true; } return this.callParent(arguments); }
Вот это, вы замещаете метод, который я так понимаю при построении UI вызыватеся для каждой колонки, а результат его выполнения определяет будет-ли элемент гиперссылочным полем, и разбавляете его логику, возвращая true в специально определенном случае с именем колонки UsrString
так..
addColumnLink: function(item, column) { this.callParent(arguments); },
вот это, что это за метод ? я понимаю что в конкретном примере это безсмысленная конструкция, сразу вызывается родитель и все. А что это за метод для чего нужен когда вызывается?
Вы обрабатываете клик... встает вопрос, а как же клик по ссылке от браузера (или там вообще в итоге не будет ссылки в понятии тега A)?
Или может он прерывается на уровне приложения ? (клик по ссылке)
Если мне непосредственно нужен переход по целевой ссылке (к связанной сущности), мне надо руками openCardInChain реализовывать, или есть другой подход ?
"Севостьянов Илья Сергеевич" написал:вот это, что это за метод ?
Метод из, GridUtilitiesV2 замещение не нужно, но может быть полезен для формирования браузерного линка, на случай если будут открывать через контекстное меню, см. FileDetailV2
"Севостьянов Илья Сергеевич" написал:а как же клик по ссылке от браузера
прерывается
"Севостьянов Илья Сергеевич" написал:openCardInChain
если в рамках bpmonline, то openCardInChain, либо переходом по линку в формате:
http://сайт/0/Nui/ViewModule.aspx#CardModuleV2/AccountPageV2/edit/40594…
"Максим Шевченко" написал:Метод из, GridUtilitiesV2 замещение не нужно, но может быть полезен для формирования браузерного линка
Т.е. я так понимаю именно в этом методе надо формировать линк, чтобы он был в теге A целевого поля/колонки ?
его нужно возвращать в return или куда-то устанавливать ?
Спасибо, за подробный ответ.
PS: В целях исторической ценности этой темы - озвучить этот вопрос и получить от Вас на него ответ, важнее чем побежать дебагером и проверить самому :)