Вопрос

Вывод ссылки на файлы активности в итогах в режиме отображения данных

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

Пытаюсь в итогах в графике (в режиме отображения данных) сделать ссылки на приложенные файлы. Если в колонку выводить непосредственную ссылку вида http://bpm/0/rest/FileService/GetFile/080c9917-7ec9-42e5-86ff-75a683d4f…, то при клике на нее можно взять файл. Если же попытаться обернуть ссылку в тэги <a href""></a> для человеческого представления, то ссылка не работает. В отладке я вижу, что тэги были убраны системой. Хочу, чтобы было так же, как при отображении столбца Заголовок. Подскажите, пожалуйста, как это реализовать?

Нравится

3 комментария

Старожилы, помогите, пожалуйста

Сергей, насколько понимаю, это не конкретно для итогов, а базовая логика компонента Grid, реализованного в JS-ядре (см. сайт/0/core/hash/Terrasoft/controls/grid/grid.js):

 /**
  * Generates html cell.
  * @private
  * @param {String} dataType Cell type.
  * @param {String} cellData Cell text.
  * @return {String} Cell html.
  */
 formatCellSpan: function(dataType, cellData) {
  const spanCellXTemplate = this._getSpanCellXTemplate();
  const valueWithoutTags = Terrasoft.removeHtmlTags(cellData);
  const text = this.encodeHtml(valueWithoutTags);
  let direction = null;
  if (Terrasoft.getIsRtlMode()) {
   direction = Terrasoft.containsRtlChars(cellData) ? direction : "ltr";
  }
  const html = spanCellXTemplate.apply({
   type: dataType,
   text: text,
   direction: direction
  });
  return html;
 },

 А затем в соседней функции добавляет, если нужно, внутренние ссылки на карточки записей в разделах системы:

 /**
  * Generates html cell-link.
  * @private
  * @param {Object} linkData Link params.
  * @param {String} dataColumn Links data-column attribute.
  * @param {String} innerHtml Links internal content.
  * @return {String} Cell html.
  */
 formatCellLink: function(linkData, dataColumn, innerHtml) {
  const linkTpl = "<a href=\"{0}\" target=\"{1}\" title=\"{2}\" data-column=\"{3}\">{4}</a>";
  if (linkData.customUrlsExists) {
   const urlOccurrencePattern = "url_occurrence_{0}";
   linkData.customUrls.forEach(function(url, index) {
    innerHtml = innerHtml.replace(this.encodeHtml(url), Ext.String.format(urlOccurrencePattern, index));
   }, this);
   linkData.customUrls.forEach(function(url, index) {
    innerHtml = innerHtml.replace(Ext.String.format(urlOccurrencePattern, index),
     Ext.String.format(linkTpl, url, linkData.target, this.encodeHtml(url), "", url));
   }, this);
   return innerHtml;
  }
  return Ext.String.format(linkTpl, linkData.url, linkData.target, this.encodeHtml(linkData.title),
   dataColumn, innerHtml);
 },

Соответственно, доработать будет непросто, поскольку нужно вмешиваться в логику ядра, а не скриптов в конфигурации.

 

Возможно, лучше будет сделать в итогах свой виджет с нужной логикой?

Спасибо, Александр! Надо подумать, поизучать матчасть.

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