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

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

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

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

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

Нравится

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

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


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

А вот теперь вопрос...
Можно ли все таки управлять сим на уровне схем (карточки раздела)
В исходных кодах было обнаружено свойство в 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 или куда-то устанавливать ?

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

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

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

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

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