Вопрос

Кажется, что на самом деле это было бы просто (и это может быть так), но я пытаюсь взять строковые данные столбца, а затем через вычисляемый столбец заменить все пробелы на %20, чтобы HTML-ссылка в электронном письме, созданном рабочим процессом, фактически не прерывалась на первом пробеле.

Например, у нас есть это в нашем исходном столбце:

файл:///Z:/data/Это наш отчет.rpt

И хотел бы в конечном итоге получить это в вычисляемом столбце:

файл:///Z:/data/This%20is%20our%20report.rpt

Я уже использовал REPLACE и создал ужасную версию super nested REPLACE / SEARCH, но проблема в том, что вам нужно вложить для КАЖДОГО потенциального пространства, и если вы не знаете, сколько их заранее, это не сработает или пропустит некоторые.

Сталкивался ли кто-нибудь из вас с этим сценарием и как вы с ним справлялись?

Заранее спасибо!

Это было полезно?

Решение

Насколько я знаю, не существует универсального решения, использующего синтаксис вычисляемого столбца.Стандартным решением для этой ситуации является использование события ItemAdded (/ItemUpdated) и инициализация значения поля из кода.

Другие советы

таким образом, HTML-ссылка в электронном письме, созданном рабочим процессом, на самом деле не будет обрываться на первом пробеле.

Браузер делает это только в том случае, если у вас есть не заключил вашу ссылку в кавычки

Если вы заключите ссылку в кавычки, это сделает не отрезать на первом же пробеле

В формуле SharePoint это было бы:

="""file:///Z:/data/This is our report.rpt"""

потому что две кавычки - это экранирующая нотация SP для вывода цитаты

Вы можете использовать эту формулу (начните обрезку с 1, в моем случае было 4):

=IF(ISBLANK([EUR Amount]),"",(TRIM(MID([EUR Amount],4,2))&TRIM(MID([EUR Amount],6,2))&TRIM(MID([EUR Amount],8,2))&TRIM(MID([EUR Amount],10,2))&TRIM(MID([EUR Amount],12,2))&TRIM(MID([EUR Amount],14,2)))*1)

Я смог решить эту проблему в своих обстоятельствах, используя серию вычисляемых столбцов.

В первом вычисляемом столбце (C1) я ввел формулу для удаления первого пробела, что-то вроде этого:

=IF(ISNUMBER(FIND(" ",[Title])),REPLACE([Title],FIND(" ",[Title]),1,"%20"),[Title])

Во втором вычисляемом столбце (C2) я использовал:

=IF(ISNUMBER(FIND(" ",[C1])),REPLACE([C1],FIND(" ",[C1]),1,"%20"),[C1]).

В моем случае я хотел закодировать до четырех пробелов, поэтому я использовал 3 вычисляемых столбца (C1, C2, C3) таким же образом и получил желаемый результат.

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

На самом деле я использовал немного другую формулу, но она была на рабочей машине, к которой у меня в данный момент нет доступа, поэтому я просто взял эту формулу из аналогичного S.O.вопрос.Любая формула, которая заменит первое вхождение пробела на "%20", будет работать, хитрость заключается в том, чтобы а) убедиться, что формула возвращает исходную строку без изменений, если в ней больше нет пробелов, и б) тестировать, тестировать, тестировать.Создайте представление вашего списка, в котором есть поле, которое вы пытаетесь закодировать, плюс вычисляемые поля, и посмотрите, получаете ли вы желаемые результаты.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top