Sharepoint:Вычисляемый столбец замените все пробелы
-
22-08-2019 - |
Вопрос
Кажется, что на самом деле это было бы просто (и это может быть так), но я пытаюсь взять строковые данные столбца, а затем через вычисляемый столбец заменить все пробелы на %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", будет работать, хитрость заключается в том, чтобы а) убедиться, что формула возвращает исходную строку без изменений, если в ней больше нет пробелов, и б) тестировать, тестировать, тестировать.Создайте представление вашего списка, в котором есть поле, которое вы пытаетесь закодировать, плюс вычисляемые поля, и посмотрите, получаете ли вы желаемые результаты.