вторник, 30 декабря 2014 г.

Exam 70-347 Enabling Office 365 Services

Сегодня сдал экзамен Exam 70-347 Enabling Office 365 Services
Как и прошлый экзамен - сдавал бесплатно, по ваучеру. Было около 45 вопросов.
Половина вопросов совсем простые, если доводилось администрировать Office 365.
Мне как разработчику SharePoint особенно легко было отвечать на вопросы по SharePoint Online.
Сдавал в тестовом центре при УЦ Инвента, т.к. в УЦ Специалист не было мест на сегодняшнюю дату. 

среда, 3 декабря 2014 г.

Exam 70-346 Managing Office 365 Identities and Requirements

Сегодня удалось сдать экзамен Exam 70-346 Managing Office 365 Identities and Requirements

Сейчас попытка обойдётся в €60.00 EUR. Second Shot'а нет.
Я сдавал по ваучеру, еще можно получить. Следующий экзамен - 70-347.
Сдавал в Thomson Prometric. С 01.01.2015 можно будет сдавать только через Pearson VUE.
Есть инструкция как пройти регистрацию для Pearson VUE.
Экзамен достаточно простой, особенно если у Вас был опыт внедрения Office 365.
Сложными показались вопросы по федерации и SSO, а так же вопросы из разряда "А какой порт(ы) что-то там".

вторник, 2 декабря 2014 г.

SharePoint. System.ArgumentException: calType

В процессе использования SharePoint 2013 коллега поправил себе профиль, добавив дополнительные языки:


Установлен Service Pack 1, а English Language Pack - нет.
Сразу же после применения изменений на всех страницах появлялась ошибка:

Пробовал через PowerShell скопировать поля из работающего профиля в сломанный, это не дало результат.
Исправить удалось удалением профиля, используя PowerShell:
if ((Get-PSSnapin "Microsoft.SharePoint.PowerShell" -ErrorAction SilentlyContinue) -eq $null) 
{
    Addd-PSSnapin "Microsoft.SharePoint.PowerShell"
}
[void][reflection.assembly]::Loadwithpartialname("Microsoft.Office.Server");     
$site=new-object Microsoft.SharePoint.SPSite("http://portal");            
$serviceContext = Get-SPServiceContext $site;            
$site.Dispose();            
$upm = new-object Microsoft.Office.Server.UserProfiles.UserProfileManager($serviceContext);
$upm.RemoveUserProfile("Domain\Account");
Хотя это можно сделать через веб-интерфейс.
Потом на всякий случай удалил пользователя из user information list, для этого я использовал SharePoint End User Viewer Tool, таким образом проблема была решена.

Но ошибка может сохраняться, если пользователь присутствует на других коллекциях.
Это происходит из-за того, что каждая коллекция сайтов имеет свой список сведений о пользователях. Коллекций может быть очень много. Например, из-за личных сайтов.
Чтобы автоматически удалить из всех коллекций - воспользуйтесь скриптом ниже:
Add-PSSnapin Microsoft.SharePoint.PowerShell
$UserLogin = "i:0#.w|domain\login";
$Sites = Get-SPSite -Limit All
$AllSites = @()

foreach($Site in $Sites)
{
    $RootWeb = $Site.RootWeb
    If([bool](Get-SPUser -Identity $UserLogin -Web $RootWeb -EA SilentlyContinue) -eq $True)
    {
        $User = Get-SPUser -Identity $UserLogin -Web $RootWeb
        Write-Host ("Удален из " + $RootWeb.Url)
        Remove-SPUser -Identity $User -Web $RootWeb -Confirm:$False
        $AllSites += $RootWeb.Url
    }
    else
    {
        Write("Отсутствует на: " + $RootWeb.Url)
    }
}

if(!($AllSites).count -eq 0)
{
    Write-Host "Removed user $($UserLogin) from:" -Fore "Magenta"
    foreach($S in $AllSites){Write-Host “- $S”}
    Write-Host ""
    $AllSites = @()
}

четверг, 27 ноября 2014 г.

Workflow Manager error: Scope '/SharePoint/default/... is not in an active state

При работе с Workflow Manager получил ошибку:
System.InvalidOperationException: Operation failed with error Microsoft.Workflow.Client.ScopeInactiveException: Scope '/SharePoint/default/71295e23-e1ea-45b8-b072-61a6548fa5cd' is not in an active state. Its current state is 'Unregistering'. HTTP headers received from the server - ActivityId: b9d7fa25-bf33-4303-ba60-7dda39e7574c. NodeId: PK-SP-WF. Scope: /SharePoint/default/71295e23-e1ea-45b8-b072-61a6548fa5cd. Client ActivityId : e583bf9c-b891-80dd-3ac0-277bbb634739. ---> System.Net.WebException

В SharePoint Designer она выглядела так:



Я неоднократно сталкивался с ошибками Workflow Manager'а, все удавалось как то решать.
С этой же проблемой мне ничего не удалось сделать, от отчаяния я полез в базу...
Попробовал обновить запись о статусе руками и это сработало:
update [WFResourceManagementDB].[dbo].[Scopes] set [Status] = 'Active' where [Status] = 'Unregistering'


воскресенье, 16 ноября 2014 г.

SharePoint. Как поменять favicon.

Порой необходимо заменить favicon в SharePoint, делается это одинаково для 2010 и 2013 версии, думаю так же будет для следующих.

К примеру мы хотим что-то вроде такого:

Можно подменить файл в папке по адресу C:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\TEMPLATE\IMAGES, с виду вариант не очень хорош, но при нем картинка избранного поменяется везде. Второй вариант позволит поменять картинку только на отредактированной Вами мастер-странице. Для этого откройте мастер-страницу через SharePoint Designer и отредактируйте тэг:
<SharePoint:SPShortcutIcon runat="server" IconUrl="/_layouts/15/images/favicon.ico?rev=23" />Поменяйте "IconUrl" на адрес с Вашей картинкой, только положите ее рядом со старой. После этого необходимо выполнить перезагрузку веб-сервера IIS и почистить кэш браузера.

пятница, 14 ноября 2014 г.

Бесплатная книга "SharePoint 2013 App Model Succinctly"

Известный производитель компонентов, Syncfusion - выпустили новую бесплатную книгу:


Серия книг "Succinctly" призвана кратко описать технологию, не более 100 страниц.
Крайне рекомендую к прочтению, даже если Вы не используете apps для создания решений, как и абсолютное большинство SharePoint разработчиков.

вторник, 28 октября 2014 г.

Встреча юзер-группы по SharePoint 16.10.2014


16.10.2014 была очередная встреча юзер-группы по SharePoint, где мне удалось выступить.
Теперь доступны записи докладов.
Александр Ульмаскулов — Разработка форм SharePoint с помощью KnockoutJS:
http://www.youtube.com/watch?v=idyYf_DRKGw&index=11&list=UUgIOLncjk2di_wK9iIltW1w
Денис Молодцов - Отладка исходного кода SharePoint с помощью Reflector:
http://www.youtube.com/watch?v=7xLFgVdqB2w&index=10&list=UUgIOLncjk2di_wK9iIltW1w
Борис Журкин - Как подружить формы SharePoint и AngularJS:
http://www.youtube.com/watch?v=l1w_KT1NKN0&index=9&list=UUgIOLncjk2di_wK9iIltW1w
Евгений Трифонов - AvePoint DocAve Backup:
http://www.youtube.com/watch?v=9kNkJyz-c7E&list=UUgIOLncjk2di_wK9iIltW1w&index=8
Станислав Выщепан - Особенности логирования в SharePoint 2013:
http://www.youtube.com/watch?v=fIXQcgYZ6H4&index=7&list=UUgIOLncjk2di_wK9iIltW1w
Антон Бастюченко - Как обращаться к серверному коду из App Web:
http://www.youtube.com/watch?v=OVCJ39NMvhg&index=6&list=UUgIOLncjk2di_wK9iIltW1w

Спасибо Станиславу Выщепану за организацию и качественный монтаж видео.



Так же будет продолжение:
6 ноября состоится встреча юзер-группы по SharePoint в Технологическом Центре Microsoft на Белорусской, участие бесплатное. Зарегистрироваться можно по ссылке.

воскресенье, 7 сентября 2014 г.

SharePoint search app error: The remote server returned an error: (503) Server Unavailable

При попытке перейти в журнал обхода контента получил ошибку:
"The remote server returned an error: (503) Server Unavailable"
Позже я заметил, что ошибка продублирована в области "Состояние системы-> Административное состояние":


Причиной были выключенные пулы приложений в IIS на сервере поиска:
После их включения видим нормальное рабочее состояние:

среда, 3 сентября 2014 г.

Sharepoint. Как добавить поле комментирования

В SharePoint нет готового поля для комментирования. Есть возможность сделать что-то похожее на основе поля типа "Многострочный текст". Для этого необходимо включить версионность в списке (Список -> Параметры -> Параметры управления версиями):

Потом добавьте к списку поле с именем "Комментарий" типа "Многострочный текст". В его настройках установите параметр "Внесение изменений в существующий текст" в "Да":
Кстати, перевод этого параметра мне не очень нравиться. Думаю, что перевести "Append Changes to Existing Text", так называется этот параметр на английском, можно было так - "Добавить изменения к существующему тексту".
Теперь после добавление текста в поле "Комментарий" он будет не в самом поле, а чуть ниже:
Видно кто, когда и что добавил. Это решило мою задачу.

четверг, 28 августа 2014 г.

SharePoint 2013. ClientPeoplePicker & Custom forms

Многие уже знают, что в SharePoint 2013 появился новый замечательный элемент управления для работы с данными типа "Пользователь". Выглядит он так:
И именно этот элемент управления, с возможность предлагать возможные значения, отображается во всех формах элементов списка по умолчанию. И это очень хорошо.
Проблемы возникают когда Вы создаете новую форму.
Напомню, что в формах по умолчанию, за генерацию полей отвечает ListFormWebPart. Но если Вы создаете новую форму, то функцию генерации html полей на себя берет DataFormWebPart. При этом каждое отдельное поле генерируется элементом управления FormField. Кастомизировать форму становиться намного легче. Но при этом вместо нового ClientPeoplePicker мы видим старый контрол, без автокомплита и с кнопками проверки пользователя и кнопки для открытия всплывающего окна для поиска пользователя:
Как я уже упомянул, каждое поле генерируется SharePoint:FormField. Я пытался найти возможность "попросить" его вывести именно новый ClientPeoplePicker, но тщетно.
Мы сами можем добавить новый контрол на страницу, для этого добавим на форму такой код:


После этого у нас появится прекрасно работающий ClientPeoplePicker. Вот только нужно его привязать к полю и делать это нужно самому. Я сделал это спрятав основной контрол, который без автокомплита, но только спрятал, с самой формы не убирал. Дальше, используя JavaScript, в методе PreSaveAction() перед сохранением формы брал данные из ClientPeoplePicker и вставлял их в старый PeoplePicker. Что бы мне было удобно работать, я использовал библиотеку SPSservices.
// Заполняем поля в PeoplePicker
var arrUserField = [];
$("#UserFieldCPP_TopSpan span span span[class='ms-entity-resolved']").each(function(index, elem){
    arrUserField.push($(this).text());
});
var strUserField = arrUserField.join(";");

$().SPServices.SPFindPeoplePicker({
 peoplePickerDisplayName: "Сотрудник",
 valueToSet: strUserField ,
 checkNames: true
});
Т.е. перед сохранение формы данные из ClientPeoplePicker копируются в обычный PeoplePicker.
Приведенный код подходит для формы создания элемента, для формы редактирования нам нужно из обычного PeoplePicker'а скопировать в ClientPeoplePicker. Используйте этот код:

// Заполняем поля в ClientPeoplePicker
var UserFieldPP = $().SPServices.SPFindPeoplePicker({
 peoplePickerDisplayName: "Сотрудник" 
});

var UserFieldPPPeopleList = UserFieldPP.currentValue.split(";");
UserFieldPPPeopleList.pop(); 
var picker = SPClientPeoplePicker.SPClientPeoplePickerDict["UserFieldCPP_TopSpan"]

for (i = 0; i < UserFieldPPPeopleList.length; i++) { 
    var name = UserFieldPPPeopleList[i];
 $("#UserFieldCPP_TopSpan_EditorInput").val(name);
 picker.AddUnresolvedUserFromEditor(true)
}
Теперь кастомные формы могут иметь ClientPeoplePicker привязанный к полю в списке.
Код работает в т.ч. для множественных значений. Так же, что бы приведенный выше код работал, ID у ClientPeoplePicker должно быть "UserFieldCPP".

воскресенье, 24 августа 2014 г.

SharePoint 2013. Тип поля "Связанные элементы"

В списке задач у нас есть замечательная возможность добавить связанные с задачей файлы:

Рабочий процесс автоматически делает элемент, вокруг которого идет рабочий процесс, связанным элементов задачи.
Процесс добавления связанного элемента(ов) выглядит это так:

Т.е. обычный диалог выбора файла из SharePoint.
После добавления:
При попытке добавить такое же поле в свой настраиваемый список - я его не нашел.
Используя SharePoint Manager 2013 я посмотрел какие есть поля у коллекции сайтов и нашел среди них "Связанные элементы":

Сделаем как на картинке - переименуем из "_Hidden" в "Related Items".
Теперь мы сможем добавить поле "Связанные элементы" к нашему списку:
Все отлично. Теперь можно использовать!

Но есть нюанс с его удалением. Я так его и не смог удалить. Удалить его через веб-интерфейс нельзя. Через SharePoint Designer тоже:

Если определить его обратно в группу столбцов "_Hidden", это так же не поможет. Сделать его невидимым на форме через его свойства, поменяв "ShowInDisplayForm" на "False" не вышло:


Удалить через SharePoint Manager 2013:



Не вышло... Поскольку это поле отображается только на форме просмотра, я решил что-то с формой сделать. Для начала создал новую форму просмотра и заметил что теперь поле отображает только общее количество связанных элементов. Но просмотреть их или добавить нельзя:
 Дальше, используя SharePoint Designer 2013, я посмотрел код формы и добавил стиль, что бы спрятать столбец:
 
Теперь поля нет.

UPD:
Есть более расширенный и ранее написанный пост, ознакомитесь.











суббота, 23 августа 2014 г.

SharePoint 2013. Предпросмотр PDF в поиске

В поиске SharePoint 2013 есть возможность предпросмотра некоторых типов документов, например Word. Так же поиск может искать по содержимому PDF, но не показывает содержимое в панели предпросмотра:


Это можно исправить. Изначально возможность показывать содержимое есть, но не включена. Ее надо включить и мы сейчас попытаемся это сделать. Для начала обновите ферму до Service Pack 1. Теперь перейдите в Параметры сайта -> Управление типами результатов:

Вы увидите множество типов результатов, в том числе и PDF. Найдите "Элемент Word" и скопируйте его:

 Появиться диалог создания, но уже частично заполненный. Теперь надо поменять имя и тип контента. Сделайте как на картинке:
Отлично, теперь попробуйте посмотреть как выглядит предпросмотр документа PDF:
Все прекрасно отображается. Правда отображается значок Word. Что бы его поменять на pdf - необходимо создать свой Hover Display Template.

четверг, 7 августа 2014 г.

SharePoint 2013. Windows Workflow Foundation, part of .Net Framework 3.0, must be installed to use this feature

При попытке отредактировать созданный ранее рабочий процесс в SharePoint Designer 2013 на ферме SharePoint Server 2013 с установленным Workflow manager 1.0 возникла ошибка:
[Ру] Не удалось загрузить этот рабочий процесс. Чтобы устранить эту проблему.
[En] Failed to load this workflow. To correct this problem, restart SharePoint Designer.

Потом другая ошибка:
[Ру] Для использования этой возможности необходимо установить Windows Workflow Foundation (входит в состав .Net Framework 3.0).[En] Windows Workflow Foundation, part of the .NET Framework 3.0, must be installed to use this feature.

Для начала я попробовал очистить кэш SharePoint Designer 2013, для этого надо удалить все по этим путям в файловой системе на клиенте:
%APPDATA%\Microsoft\Web Server Extensions\Cache
%APPDATA%\Microsoft\SharePoint Designer\ProxyAssemblyCache
%USERPROFILE%\AppData\Local\Microsoft\WebsiteCache

Если это не помогло, то необходимо выполнить все обновления SharePoint Designer 2013.
Если и это не помогло, то попробуйте выполнить редактирование с другого компьютера.
Мне это тоже не помогло. 
Позже, пытаясь найти решение в сети, я наткнулся на сообщение господина John Scott.
Суть его сообщения в том, что если описанные выше решения не сработали, то это известная ошибка, надо ждать исправление от Microsoft. И еще John Scott выявил, какие действия приводят к поломке, описав их в этом сообщении.
После прочтения этих сообщений я был глубоко обеспокоен необходимость снова сделать огромнейший рабочий процесс. Позже я посмотрел дату сообщения John Scott - ON 4/30/2014 9:00 PM. Почти 3 месяца прошло. Потом я проверил статус обновления фермы, с которой работал - Service Pack 1. Я обновил ферму используя June 2014 CU for SharePoint 2013


И это помогло. При этом я точно не установил какое именно обновление исправляет ошибку.

Ошибка при обновлении SharePoint. System.ServiceModel.EndpointNotFoundException

При обновлении SharePoint 2013 фермы у меня появилась ошибка:
Создано исключение типа System.ServiceModel.EndpointNotFoundException. Дополнительные сведения об исключении: Прослушивание на http://localhost:32843/SecurityTokenServiceApplication/securitytoken.svc не выполняла ни одна конечная точка, которая могла бы принять сообщение. Среди прочих причин это могло быть вызвано неправильным адресом или действием  SOAP. Подробнее см. в описании InnerException (если имеется).

Для начала исключаем проблемы из-за LoopbackCheck,  исполняем из PowerShel:
New-ItemProperty HKLM:\System\CurrentControlSet\Control\Lsa -Name "DisableLoopbackCheck" -value "1" -PropertyType dword


Подробнее про LoopbackCheck можно почитать здесь.

В моём случае отключение LoopbackCheck  не помогло, ошибка осталась.
В IIS manager я заметил, что все сайты отключены, а пулы работают.
При попытке включить сайты я получил ошибку:

Служба веб-публикаций (W3SVC) остановлена. Запуск веб-сайтов невозможен без службы публикации (W3SVC).

Я запустил службу и снова начал процесс обновления. Получил снова ошибку. Сайты опять выключены, как и служба W3SVC.
Служба PSCONFIG после 2 и 4 шага пытается перезагрузить W3SVC. Она выключается и самостоятельно не включается. Я включал службу самостоятельно после 2 и 4 шага. Процесс завершился удачно. Так же порой SharePoint 2013 Products Configuration Wizard "виснет", перестает потреблять процессорное время, просто ждем.


SharePoint 2013. Microsoft.SharePoint.Administration.SPUpdatedConcurrency Exception'

При обновлении SharePoint 2013 фермы у меня появилась ошибка:
Создано исключение типа Microsoft.SharePoint.Administration.SPUpdatedConcurrency
Exception. Дополнительные сведения об исключении: Возник конфликт обновлений, де
йствие необходимо повторить. Объект SPUpgradeSession Name=Upgrade-20140723-16302
8-3 был обновлен пользователем Domain\User в рамках процесса PSCONFIG (3920
) на компьютере PCNAME. Дополнительные сведения о конфликте см. в журнале трассиров
ки.

В моём случае я просто запустил процесс обновления снова и ошибка пропала.

четверг, 31 июля 2014 г.

SharePoint 2013. Ошибка синхронизации задач

При попытке синхронизации списка задач с Outlook:

можно получить такую ошибку:

Текст ошибки RU:
Нам не удалось синхронизировать ваши задачи. Возможно, ваш почтовый ящик находится на сервере Exchange Server, на котором не поддерживается синхронизация задач. Обратитесь к администратору.
Текст ошибки EN:
We weren't able to sync your tasks. This could be be!cause your mailbox is on an Exchange server that isn't supported for syncing tasks. Please contact your administrator for more help.


Это может быть из-за того, что Ваша почта храниться в Exchange Server. И не в 2013 версии.
В SharePoint 2013 есть возможность синхронизировать элементы именно с Exchange 2013,  а не с только с OutLook. Это дало бы возможность видеть синхронизируемые задачи в OWA и на других компьютерах с OutLook под Вашей учётной записью.
Что бы исправить эту ошибку и иметь возможность синхронизации с outlook - необходимо отключить возможность "Синхронизация задач Exchange на уровне фермы":
 После этого попытайтесь снова подключиться к Outlook, появится диалог:
В самом outlook можно будет видеть задачи:

Повторюсь, если подключаться таким образом, то задачи в Outlook Web Access и в Вашем телефона не появятся, т.к. это прямое соединение конкретного экземпляра Outlook и Sharepoint.

UPD:
По кнопке "Дополнительно" появляется диалог:
Это требует проверки.

вторник, 8 июля 2014 г.

SharePoint создать и загрузить текстовый файл используя JSOM & REST

У меня возникла необходимость генерировать txt и загружать его в библиотеку SharePoint.
Сам процесс аналогичен загрузке файла. Точнее ознакомиться с процессом можно по ссылке.
В коде, по ссылке выше есть метод PerformUploadInit(), один из параметров fileData можно заполнить обычной строкой, в случае текста не на латинице я получал такое отображение файла:
Проблема решилась сменой кодировки в CP-1251 из Unicode. Для смены кодировки я использовал функцию от cryo.

Конечный код решения по генерации .txt и его загрузке в библиотеку SharePoint:
var currentWebUrl;
var context;
var web;
var digest = "";
var DMap = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, 10: 10, 11: 11, 12: 12, 13: 13, 14: 14, 15: 15, 16: 16, 17: 17, 18: 18, 19: 19, 20: 20, 21: 21, 22: 22, 23: 23, 24: 24, 25: 25, 26: 26, 27: 27, 28: 28, 29: 29, 30: 30, 31: 31, 32: 32, 33: 33, 34: 34, 35: 35, 36: 36, 37: 37, 38: 38, 39: 39, 40: 40, 41: 41, 42: 42, 43: 43, 44: 44, 45: 45, 46: 46, 47: 47, 48: 48, 49: 49, 50: 50, 51: 51, 52: 52, 53: 53, 54: 54, 55: 55, 56: 56, 57: 57, 58: 58, 59: 59, 60: 60, 61: 61, 62: 62, 63: 63, 64: 64, 65: 65, 66: 66, 67: 67, 68: 68, 69: 69, 70: 70, 71: 71, 72: 72, 73: 73, 74: 74, 75: 75, 76: 76, 77: 77, 78: 78, 79: 79, 80: 80, 81: 81, 82: 82, 83: 83, 84: 84, 85: 85, 86: 86, 87: 87, 88: 88, 89: 89, 90: 90, 91: 91, 92: 92, 93: 93, 94: 94, 95: 95, 96: 96, 97: 97, 98: 98, 99: 99, 100: 100, 101: 101, 102: 102, 103: 103, 104: 104, 105: 105, 106: 106, 107: 107, 108: 108, 109: 109, 110: 110, 111: 111, 112: 112, 113: 113, 114: 114, 115: 115, 116: 116, 117: 117, 118: 118, 119: 119, 120: 120, 121: 121, 122: 122, 123: 123, 124: 124, 125: 125, 126: 126, 127: 127, 1027: 129, 8225: 135, 1046: 198, 8222: 132, 1047: 199, 1168: 165, 1048: 200, 1113: 154, 1049: 201, 1045: 197, 1050: 202, 1028: 170, 160: 160, 1040: 192, 1051: 203, 164: 164, 166: 166, 167: 167, 169: 169, 171: 171, 172: 172, 173: 173, 174: 174, 1053: 205, 176: 176, 177: 177, 1114: 156, 181: 181, 182: 182, 183: 183, 8221: 148, 187: 187, 1029: 189, 1056: 208, 1057: 209, 1058: 210, 8364: 136, 1112: 188, 1115: 158, 1059: 211, 1060: 212, 1030: 178, 1061: 213, 1062: 214, 1063: 215, 1116: 157, 1064: 216, 1065: 217, 1031: 175, 1066: 218, 1067: 219, 1068: 220, 1069: 221, 1070: 222, 1032: 163, 8226: 149, 1071: 223, 1072: 224, 8482: 153, 1073: 225, 8240: 137, 1118: 162, 1074: 226, 1110: 179, 8230: 133, 1075: 227, 1033: 138, 1076: 228, 1077: 229, 8211: 150, 1078: 230, 1119: 159, 1079: 231, 1042: 194, 1080: 232, 1034: 140, 1025: 168, 1081: 233, 1082: 234, 8212: 151, 1083: 235, 1169: 180, 1084: 236, 1052: 204, 1085: 237, 1035: 142, 1086: 238, 1087: 239, 1088: 240, 1089: 241, 1090: 242, 1036: 141, 1041: 193, 1091: 243, 1092: 244, 8224: 134, 1093: 245, 8470: 185, 1094: 246, 1054: 206, 1095: 247, 1096: 248, 8249: 139, 1097: 249, 1098: 250, 1044: 196, 1099: 251, 1111: 191, 1055: 207, 1100: 252, 1038: 161, 8220: 147, 1101: 253, 8250: 155, 1102: 254, 8216: 145, 1103: 255, 1043: 195, 1105: 184, 1039: 143, 1026: 128, 1106: 144, 8218: 130, 1107: 131, 8217: 146, 1108: 186, 1109: 190};

function GenerateAndUploadTXTFileToSharePointLibrary(library,fileName,folder,content){
 var enodedContent = UnicodeToWin1251(content);
 PerformUpload(library,fileName,folder,content);
}

function UnicodeToWin1251(s) {
    var L = []
    for (var i=0; i&lts.length; i++) {
        var ord = s.charCodeAt(i)
        L.push(String.fromCharCode(DMap[ord]))
    }
    return L.join('')
}

function PerformUpload(libraryTitle, fileName, folderTitle, content) {

    var reqExecutor = new SP.RequestExecutor(currentWebUrl);
    var url = "/registry/_api/web/GetFolderByServerRelativeUrl('" + libraryTitle + "/" + folderTitle + "')/Files/add(url='" + fileName + "', overwrite=true)";
    reqExecutor.executeAsync({
        url: url,
        method: "POST",
        headers: {
            //"Accept": "application/json; odata=verbose",
            "X-RequestDigest": digest
        },
        binaryStringRequestBody: true,
        body: content,
        success: function () {
            console.log("Файл удачно загружен.");
        },
        error: function (x, y, z) {
            alert(x); alert(y); alert(z);
            console.log("Не удалось загрузить файл.");
        }
    });
}

function getWebProperties() {
    console.log("Начало выполнения функции 'getWebProperties()'");
    context = SP.ClientContext.get_current();
 web = context.get_web();
 list = web.get_lists();
    context.load(web, 'ServerRelativeUrl');
    context.executeQueryAsync(
 function () {
     console.log("Удалось получить текущий url сайта");
     currentWebUrl = web.get_serverRelativeUrl();
 },
 function () {
     console.log("Не удалось получить текущий url сайта");
 }
   );
}

function myOnload() {
 $.getScript("/_layouts/15/SP.RequestExecutor.js", function (){});
 digest = $("#__REQUESTDIGEST").val();
 getWebProperties();
}

_spBodyOnLoadFunctionNames.push("myOnload");

Пример вызова:
GenerateAndUploadTXTFileToSharePointLibrary('documentLibraryTitle','fileName.txt','folderTitle','Слово');

Прячем подписи к полям на формах SharePoint используя JavaScript и jQuery

При создании столбца мы имеем возможность заполнить его описание:
 Если это сделать, то на формах создания и редактирования, мы сможем видеть описание столбца:
Может возникнуть необходимость оставить описание, но не показывать его на форме.
Для этого подключите к странице jQuery и используйте код:
$('.ms-metadata').hide()

Но для того что бы спрятать описание типа "Пользователь", надо использовать немного другой код:
$('.ms-usereditor span').hide()

Установить ширину столбца списка в SharePoint используя JavaScript и jQuery

Порой возникает необходимость зафиксировать ширину столбцов в представлении списка.
Для этого можно использовать JavaScript и библиотеку jQuery.
Подключите jQuery и добавьте JavaScript функцию:
function setColumnWidth(field, width)
{ 
    $("TH.ms-vh2:contains('" + field + "')").css( "max-width",width );
}
Пример вызова функции:
setColumnWidth('TitleOfColumn', '100px')

Тип аутентификации и i:0#.w|

Иногда в SharePoint 2013 и изначально в SharePoint 2013 перед доменным именем пользователя можно увидеть "лишние" символы:
i:0#.w|domain\user
Наличие этих символов значит, что используется Claims Based Authenticaiton, по-русски: Аутентификация на основе утверждений.

Ифрэйм в IE ошибка: the content cannot be displayed in a frame

В Центре Администрирования, при попытке редактирования настроек получил ошибку:
Помогло добавление сайте в список надежных узлов в IE.

Ошибка при создании решения. Превышен максимальный общий размер файла (52428800 байт)


При попытке сохранить сайт в качестве шаблона можно увидеть ошибку:
Ошибка при создании решения. Превышен максимальный общий размер файла (52428800 байт).
Для того, что бы обойти ограничение - достаточно выполнить PowerShell скрипт ниже:

[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Administration")
$ContentService = [Microsoft.SharePoint.Administration.SPWebService]::ContentService
$ContentService.MaxTemplateDocumentSize = 524288000
$ContentService.Update()

Теперь лимит 500 Мб, это максимальное значение. Вести выше не получится:
Если Ваш сайт занимает < 500 Мб, то Вы увидете следующее: