Как создать динамическую гиперссылку длиной более 255 символов в SharePoint Online - PullRequest
0 голосов
/ 29 декабря 2018

Моя настройка:

  • SharePoint Online (часть Office 365)
  • Нет доступа к решениям на основе сервера (.NET)
  • Библиотека документов с использованием типа содержимого «Набор документов»
  • Новый пользовательский интерфейс с поддержкой

Вариант использования:

У меня есть рабочий процесс SP2013, который позволяетпользователь, чтобы сделать запрос на изменение документа в библиотеке.Рабочий процесс имеет параметры формы инициализации, и данные, предоставленные для этих параметров, вместе со ссылкой на элемент, над которым был запущен рабочий процесс, записываются в другой список на сайте. Это все работает просто отлично.

Я пытаюсь создать столбец в библиотеке документов, который позволяет пользователю переходить непосредственно к Форме инициирования рабочего процесса, а не вправо- нажмите на элемент, выберите «Дополнительно», а затем «Рабочие процессы».

Ссылка на страницу «Форма инициации рабочего процесса» (взятую прямо из адресной строки браузера при переходе к нему вручную) в целом выглядит следующим образом.(разрывы строк добавлены для удобства чтения):

https://company.sharepoint.com/sites/ABC/wfsvc/e73969f753574a3bb30c8d3ce3ab9c56/WFInitForm.aspx

?List={f9b73015-1131-442d-95b8-9682149a27e6}

&ID=5

&ItemGuid={71AA92CE-2D37-4D43-B593-AB6004E9DCF0}

&TemplateID={64193686-AB59-4D44-B0EB-FBD8E2CB7A1F}

&WF4=1

&Source=https%3A%2F%2Fcompany%2Esharepoint%2Ecom%2Fsites%2FABC%2FCourseDocuments%2FForms%2FCourseDocuments%2Easpx%3FRootFolder%3D%252Fsites%252FDCU%252FCourseDocuments%252FBasic%2520Stuff%26FolderCTID%3D0x0120D52000E334520C326BA440BF6F86F3CA80AE2800E3DBD1BD3A1EA348A9D944A931464C4D

Части ссылки ID и ItemGuid должны быть динамическими, поскольку они будут содержать ссылку на конкретный библиотечный документ, который потребуется рабочему процессубежать против. Все остальное статично.

Чтобы динамически создавать этот URL для каждого элемента, я создал второй рабочий процесс, который запускается при добавлении нового элемента в библиотеку, а также возможностьдля запуска вручную (для элементов, уже находящихся в библиотеке) и , который рабочий процесс правильно создает URL, необходимый для каждого элемента .

Проблема:

Этот URL-адрес длиннее 255 символов, которые принимает столбец «Гиперссылка или изображение», и поэтому при попытке записать этот URL-адрес в столбец возникают ошибки рабочего процесса.

Что я пробовал:

Я уже давно занимаюсь этим и нашел несколько опубликованных обходных путей, ни один из которых не сработал:

  • Я попытался сократить URL, сделавон относительный (и поэтому полный URL-адрес сайта может быть удален) и помещается в поле «Гиперссылка или рисунок», но это приводит к ошибке рабочего процесса «Неверный URL-адрес», даже если созданный URL-адрес работает при копировании и вставке в адресbar.
  • Я попытался сократить URL-адрес, кодируя статические части с помощью Bitly , и на этот раз рабочий процесс завершился и записал URL-адрес, реагирующий на клики, однако статические части работают по отдельности.когда они объединяются с другими частями, окончательный URL приводит к ошибке 404 на сайте Bitly.
  • Я создал столбец «Рассчитано», для которого установлено значение «Дата / Время»результат и сделал вычисление конкатенацией частей URL в синтаксис гиперссылки HTML (т.е. ="<a href='"&[column1]&[column2]&[column3]&"'>Click</a>").Несмотря на то, что это удалось получить все, что было произведено и установлено в библиотеку, со всеми правильными динамическими частями, поле не отображается как проанализированный HTML, вместо этого отображается полная разметка HTML, поэтому это не кликабельная ссылка.(На изображении ниже показан относительный URL-адрес, но при таком подходе я использовал абсолютный URL-адрес. Изображение предназначено просто для отображения результата разметки, которая создается и не анализируется.)

    enter image description here

  • Я попытался добавить поле «Полный контент HTML с форматированием и ограничениями для публикации» в мою библиотеку (с включенной функцией сайта инфраструктуры публикации SharePoint Server) и получил ту же разметку HTMLотображается так же, как при попытке вычислить столбец выше.
  • Я попытался использовать текстовое поле «Многострочный» и получил такой же экран разметки, как и выше.
  • Согласно в этой статье , для закодированных URL-адресов нет ограничения по длине, поэтому я попытался зашифровать весь URL-адрес и поместить его в поле «Гиперссылка или рисунок», но рабочий процесс выдает ошибку с сообщением «Неверный URL-адрес».

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


ОБНОВЛЕНИЕ:

В ответ на предложение @ Lukáš Nešpor ниже я попробовал варианты этого, но следовал вашим инструкциям и попробовал снова.У меня нет опции для Форматирования столбцов в самом списке, но я получаю эту опцию при настройке столбца в Настройках списка, вот где я ввел JSON.

enter image description here enter image description here

Но, когда я пытаюсь это сделать, форматирование JSON не работает.

enter image description here

Ответы [ 3 ]

0 голосов
/ 31 декабря 2018

Вы можете попробовать две вещи:

  1. Параметр строки запроса Source занимает около половины вашего URL.Если вам не важен обратный URL-адрес, скорее всего, весь этот раздел может быть безопасно удален, что приведет к тому, что ваша строка будет соответствовать ограничению в 255 символов стандартного поля URL.
  2. Создайте поле примечанияс включенной поддержкой HTML (при создании его из пользовательского интерфейса вам нужно будет выбрать параметр Расширенный форматированный текст (форматированный текст с изображениями, таблицами и гиперссылками) в настройках дополнительных столбцов), а затем использовать это полехранить вашу разметку (элемент <a href="...">...</a> HTML).При правильной настройке ваша разметка будет правильно отображаться как в представлении списка, так и в формах элементов списка.

Кроме того, поскольку ссылка может отображаться во многих местах (например, представления списка, представление спискавеб-части, формы элементов списка) избегайте использования относительного URL-адреса - хотя URL-адрес ../wfsvc/[wf_id]/... может быть правильным, например, в контексте представления списка, он будет неправильным в контексте формы элемента списка.Вместо этого используйте абсолютные URL или относительные URL веб-сервера (например, /sites/yoursite/wfsvc/[wf_id]/...)

0 голосов
/ 02 января 2019

Поле «Многострочный текст» предназначалось для решения требования «длинный URL».

По умолчанию поле «Многострочный текст» обрабатывает только обычный текст, а не форматированный текст или расширенный форматированный текст.Изменение этого параметра (если оно доступно для вас) приведет к тому, что ваша гиперссылка будет отображаться как гиперссылка, и на вас не будет распространяться ограничение в 255 символов, которое применяется к столбцам гиперссылки.

В Designer вы можете перейти к Настройке -> Редактировать столбцы и отредактировать ваш многострочный текстовый столбец, а затем установить флажок для расширенного текста или расширенного расширенного текста.

Для Sharepoint Online вы выбираете столбец в «Параметры списка» или «Параметры библиотеки» и устанавливаете переключатель для «Расширенный текст» или «Расширенный расширенный текст».

Для «Нового опыта» невозможно отформатировать текст как Rich Text.Вы все еще можете отформатировать текст как Enhanced Rich Text, но теги HTML не обрабатываются (WTF ??).Конечно, вы можете переключить список или библиотеку обратно на классический интерфейс всего сайта New Experience, и это вернет вам Rich Text.

В MSFT есть пункт отставания для добавления поддержки многострочного форматированного текста для NE, но за время работы в MSFT я никогда не сталкивался с разумной расстановкой приоритетов для такого рода неприятного небольшого разрыва, поэтому не могу сказать, когда он может быть исправлен.

enter image description here

0 голосов
/ 31 декабря 2018

Новый пользовательский опыт (в целом)

Вы можете использовать форматирование столбца .Его можно использовать в современных списках, чтобы изменить способ отображения столбца (поля).Одно из возможных применений - сделать ссылку со свойствами текущего элемента.Можно ссылаться почти на все поля, включая ID, но GUID, к сожалению, нет.

Чтобы решить проблему с полем GUID (без кода), вы можете создать текстовый столбец в списке и вызвать его, например, Log Change Request,Затем создайте простой рабочий процесс и установите для этого вновь созданного столбца GUID текущего элемента.Не забудьте настроить рабочий процесс для запуска при создании нового элемента.

enter image description here

Затем перейдите к списку (используя современный опыт) и установите столбецформат.

enter image description here

Откроется панель справа.Вставьте ниже JSON в поле и сохраните изменения.

{
  "$schema": "https://developer.microsoft.com/json-schemas/sp/column-formatting.schema.json",
  "elmType": "a",
  "txtContent": "Link",
  "attributes": {
    "href": {
      "operator": "+",
      "operands": [
        "https://company.sharepoint.com/sites/ABC/wfsvc/e73969f753574a3bb30c8d3ce3ab9c56/WFInitForm.aspx",
        "?List={f9b73015-1131-442d-95b8-9682149a27e6}",
        "&ID=",
        "[$ID]",
        "&ItemGuid=",
        "@currentField",
        "&TemplateID={64193686-AB59-4D44-B0EB-FBD8E2CB7A1F}",
        "&WF4=1",
        "&Source=https%3A%2F%2Fcompany%2Esharepoint%2Ecom%2Fsites%2FABC%2FCourseDocuments%2FForms%2FCourseDocuments%2Easpx%3FRootFolder%3D%252Fsites%252FDCU%252FCourseDocuments%252FBasic%2520Stuff%26FolderCTID%3D0x0120D52000E334520C326BA440BF6F86F3CA80AE2800E3DBD1BD3A1EA348A9D944A931464C4D"
      ]
    }
  }
}

Создайте элемент, и когда рабочий процесс завершится, столбец должен содержать нужную ссылку.


Классический опыт

Для классического (устаревшего) вида может использоваться Рендеринг на стороне клиента .Это делает то же самое, что и форматирование столбцов в новом опыте.

Создайте текстовый столбец и назовите его, например, Log Change Request.Следующим шагом является создание файла Javascript, загрузка его в SharePoint (где-нибудь) и регистрация этого javascript как JSLink в столбце.

1) Создайте файл Javascript и назовите его, например, log-change-request.js

// CSR-override for MDS enabled site
RegisterModuleInit("~site/SiteAssets/log-change-request.js", RegisterLink);

// CSR-override for MDS disabled site
RegisterLink(); 

function RegisterLink() {
  var field = {};
  field.Templates = {};
  field.Templates.Fields = {
    "LogChangeRequest": {
      "View": fieldTemplate
    }
  };

  SPClientTemplates.TemplateManager.RegisterTemplateOverrides(field);
}

function fieldTemplate(context) {
  var item = context.CurrentItem;
  return "<a href='"
    + "https://company.sharepoint.com/sites/ABC/wfsvc/e73969f753574a3bb30c8d3ce3ab9c56/WFInitForm.aspx"
    + "?List={f9b73015-1131-442d-95b8-9682149a27e6}"
    + "&ID=" + item.ID
    + "&ItemGuid=" + item.UniqueId
    + "&TemplateID={64193686-AB59-4D44-B0EB-FBD8E2CB7A1F}"
    + "&WF4=1"
    + "&Source=https%3A%2F%2Fcompany%2Esharepoint%2Ecom%2Fsites%2FABC%2FCourseDocuments%2FForms%2FCourseDocuments%2Easpx%3FRootFolder%3D%252Fsites%252FDCU%252FCourseDocuments%252FBasic%2520Stuff%26FolderCTID%3D0x0120D52000E334520C326BA440BF6F86F3CA80AE2800E3DBD1BD3A1EA348A9D944A931464C4D"
    + "'>"
    + "Link"
    + "</a>";
}

2) Загрузите этот файл в ресурс сайта в семейство сайтов, где вы создали столбец Log Change Request. Примечание: этот файл можно разместить в любом месте, где вам просто нужно изменить путь в нем.
3) Загрузить установочный пакет Клиентские компоненты SharePoint Online SDK .Он скопирует некоторые библиотеки DLL, необходимые для подключения к SharePoint с помощью PowerShell.
4) Запустите приведенный ниже сценарий PowerShell, который установит свойство JSLink столбца в путь к файлу Javascript.

.NET CSOM решение, как установить столбец

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client")
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.Runtime")

function Set-JSLink() {
  Param(
    [string]$SiteUrl,
    [string]$ListTitle,
    [string]$ColumnTitle,
    [string]$JSLinkUrl
  )

  $creds = Get-Credential

  $ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteUrl)
  $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($creds.UserName, $creds.Password)

  $list = $ctx.Web.Lists.GetByTitle($ListTitle)
  $ctx.Load($list)
  $ctx.ExecuteQuery()

  $column = $list.Fields.GetByTitle($ColumnTitle)
  $column.JSLink = $JSLinkUrl
  # Make it read only so it is not visible in new or edit form
  $column.ReadOnlyField = $true
  $column.Update()

  $ctx.ExecuteQuery()
  $ctx.Dispose()
}

# Example:
Set-JSLink -SiteUrl "https://tenant.sharepoint.com/sites/ABC" -ListTitle "Document Sets" -ColumnTitle "Log Change Request" -JSLinkUrl "~site/SiteAssets/log-change-request.js"

JSOM решение, как установить столбец
Использование этого подхода делаетне требует установки какого-либо SDK.Просто поместите этот HTML-код в редактор сценариев.

<form>
  <input type="text" id="listTitle" placeholder="List title" /><br />
  <input type="text" id="columnTitle" placeholder="Column title" /><br />
  <input type="text" id="jsLink" placeholder="JSLink Url" /><br />
  <button onclick="setColumn(); return false;">Configure column</button>
</form>

<script type="text/javascript">
  'use strict';
  SP.SOD.executeFunc("sp.js")

  function setColumn() {
    var listTitle = document.getElementById("listTitle").value;
    var columnTitle = document.getElementById("columnTitle").value;
    var jsLink = document.getElementById("jsLink").value;

    var cc = new SP.ClientContext()
    var list = cc.get_web().get_lists().getByTitle(listTitle);
    cc.load(list);
    cc.executeQueryAsync(
      function () {
        var column = list.get_fields().getByTitle(columnTitle);
        column.set_jsLink(jsLink);
        column.set_readOnlyField(true);
        column.update();

        cc.executeQueryAsync(
          function () {
            alert("Column sucessfuly configured");
          },
          function (sender, args) {
            console.error(args.get_message());
          }
        );
      },
      function (sender, args) {
        console.error(args.get_message());
      }
    );

    cc.dispose();
  }

</script>

5) Откройте набор документов, добавьте документ, и в столбце должна быть нужная ссылка.

Примечание:

Поскольку представление «Набор документов» используется только в классическом режиме, не имеет значения, что установлено в настройках (Новый или классический режим).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...