В SharePoint 2013 обнаружилась странная ошибка: при попытке вложить файл к элементу списка появляется сообщение о недопустимых символах. Причем раньше такого не было, и началось относительно недавно. Видимо, накатился какой-то непротестированный апдейт.
Сообщение об ошибке выглядит так:
Имена файлов не могут содержать следующие знаки: & " ? < > # {} % ~ / \.
За вызов сохранения аттача по нажатию кнопки Ok отвечает JS-функция OkAttach(), которую можно найти в файле form.debug.js. В ней в самом начале объявляется переменная filename, в которой хранится имя загружаемого файла. Далее оно проверяется на содержание всяких недопустимых символов, и если их нет - идет сохранение.
Однако, ошибка происходит, даже если вложить файл с максимально корректным именем. В чем же дело? А дело в том, что в переменную filename почему-то попадает не имя файла, а весь путь временного файла. Естественно, в этом пути есть и слеши, и двоеточие, которые кажутся SharePoint вредными и он их не пропускает.
Решение очевидно. Надо дописать JS-функцию так, чтобы в обработку брался не путь, а действительно имя файла:
var filename = TrimWhiteSpaces(fileInput.value); // Здесь был путь, а не имя файла. Берем имя файла. filename = filename.replace(/^.*[\\\/]/, '');
Также надо не забыть поправить файл form.js, он минимизирован, но сделать это не сложно. Оба файла лежат в следующей папке на сервере SharePoint:
C:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\TEMPLATE\LAYOUTS\
Главное, отслеживать и документировать свои правки, потому что при очередном апдейте они могут затереться.