Технические вопросы
7.x

Механика формирования колонок полей-гиперссылок и выбора displayValue для справочных полей

Совсем не ясна механика согласно которой, формируются поля с гиперссылками на связанные с ними объекты (карточки их редактирования).

Т.е. вот мы открываем реестр с объектами созданного нами раздела выводим колонки, одна из них (текстовая) - будет выводиться как гиперссылка на сам объект но визуально содержать свое значение.
Как и где это устанавливается ?

Если где либо вставляется справочное поле, то элементы выбираемые в нем - отображаются как гиперссылки в displayValue которых содержится значение конкретной колонки, почему именно ее, как это настраивать ?

Далее в деталях часто выводятся какие либо колонки, и хочется чтобы они были гиперсылками на карточку объекта связанного с деталью... как этого добиться, почему одни поля гиперссылки другие - нет ?

Нравится

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

Сам отвечаю на свой вопрос,
За это отвечает поле "Отображаемое значение" в доп.настройках объекта, секция "Системные настройки"


Важно: Именно объекта - корневого элемента в дереве, а не его колонок

А вот теперь вопрос...
Можно ли все таки управлять сим на уровне схем (карточки раздела)
В исходных кодах было обнаружено свойство в values конфигурационном объекте вьюхи
[javascript]
"values": {
"itemType": this.Terrasoft.ViewItemType.HYPERLINK,
...
[/javascript]
Может быть это оно ?

юзкейс который нужен:
Допустим у нас есть сущность с каким-то номером, пусть это будет сферический в ваккуме "Тендер"
У объекта есть поля "Номер тендера" и "Наименование".
Так вот на уровне объекта в "Отображаемое значение" мы устанавливаем "Номер тендера"
для того чтобы во всех справочных полях системы которые ссылаются на этот объект во въюхе гиперлинк-поля отображаемым значением (displayValue) был "Номер тендера"
А вот в само реестре объекта, колонка "Номер тендера" - скрывается за ненадобностью, но выводится колонка "Наименование", и вот конкретно в реестре хочется чтобы оно выводилось гиперлинком, как выводится поле "Номер проекта".
Надеюсь смысл понятен.

"Севостьянов Илья Сергеевич" написал:Надеюсь смысл понятен.

Гиперлинком то сделать можно, но обработку нажатия и открытие чего либо прийдется делать самому.
Пример ниже для детали, но суть понятна, текстовую колонку "UsrString" делаю ссылочной, и обрабатываю клик по ней в замещении linkClicked:
[javascript]
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);
}
}
};
});
[/javascript]

"Максим Шевченко" написал:текстовую колонку "UsrString" делаю ссылочной

вот это не понятно как вы делаете ?
Где этот diff или генератор с "itemType": this.Terrasoft.ViewItemType.HYPERLINK

Далее... гиперссылочное поле оно же в сути должно содержать href т.е. при наведении на А-тег должны быть все браузерные "Копировать ссылку" и "Открыть в новой вкладке" и т.д. работать
А как-же это методом обработаешь... а как ссылку формировать, а куда ложить ?
Какая-то не гиперссылка получается а ее полу-имитация.

так... немного начинаю разбираться
[javascript]
getIsLinkColumn: function(entitySchema, column) {
if (column.columnPath === "UsrString") {
return true;
}
return this.callParent(arguments);
}
[/javascript]
Вот это, вы замещаете метод, который я так понимаю при построении UI вызыватеся для каждой колонки, а результат его выполнения определяет будет-ли элемент гиперссылочным полем, и разбавляете его логику, возвращая true в специально определенном случае с именем колонки UsrString
так..
[javascript]
addColumnLink: function(item, column) {
this.callParent(arguments);
},
[/javascript]
вот это, что это за метод ? я понимаю что в конкретном примере это безсмысленная конструкция, сразу вызывается родитель и все. А что это за метод для чего нужен когда вызывается?

Вы обрабатываете клик... встает вопрос, а как же клик по ссылке от браузера (или там вообще в итоге не будет ссылки в понятии тега A)?
Или может он прерывается на уровне приложения ? (клик по ссылке)
Если мне непосредственно нужен переход по целевой ссылке (к связанной сущности), мне надо руками openCardInChain реализовывать, или есть другой подход ?

"Севостьянов Илья Сергеевич" написал:вот это, что это за метод ?

Метод из, GridUtilitiesV2 замещение не нужно, но может быть полезен для формирования браузерного линка, на случай если будут открывать через контекстное меню, см. FileDetailV2
"Севостьянов Илья Сергеевич" написал:а как же клик по ссылке от браузера

прерывается
"Севостьянов Илья Сергеевич" написал:openCardInChain

если в рамках bpmonline, то openCardInChain, либо переходом по линку в формате:
http://сайт/0/Nui/ViewModule.aspx#CardModuleV2/AccountPageV2/edit/40594…

"Максим Шевченко" написал:Метод из, GridUtilitiesV2 замещение не нужно, но может быть полезен для формирования браузерного линка

Т.е. я так понимаю именно в этом методе надо формировать линк, чтобы он был в теге A целевого поля/колонки ?
его нужно возвращать в return или куда-то устанавливать ?

"Севостьянов Илья Сергеевич" написал:его нужно возвращать в return или куда-то устанавливать ?

В return. Я же привел пример с файл деталью, поставили бы там точку остановки, открыли бы списочное представление детали "файлы и ссылки" с загруженными туда файлами, и увидели бы:

Спасибо, за подробный ответ.

PS: В целях исторической ценности этой темы - озвучить этот вопрос и получить от Вас на него ответ, важнее чем побежать дебагером и проверить самому :)

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