понедельник, 1 июня 2015 г.

SharePoint. Error: Cannot complete the copy or merge operation because the database schema versions are different


Ошибка возникла при попытке перенести коллекцию сайтов в другую базу данных контента.
Как это делать можно узнать по ссылке. Если кратко, то необходимо выполнить следующий PowerShell коммандлет:

Move-SPSite <http://ServerName/SiteName> -DestinationDatabase <DestinationContentDb>

Что бы исправить ошибку необходима одинаковая схема БД контента источника и цели, т.е. куда переноситься коллекция. Еще проще говоря, БД контента должны иметь идентичную схему, что бы была возможность переноса коллекций сайтов между ними.
Как могло получиться, что схемы разные? Скорее всего после обновления. Новая БД контента создается по новой схеме, а старая работает в диапазоне совместимости.

В моём случае необходимо было обновить схему БД источника.
На картинке видно, что БД контента (WSS_Content), откуда мне необходимо перенести коллекцию сайтов - требует обновления, в отличии от БД контента в которую будет перемещена коллекция (WSS_Content_SSTD):

Что бы точно узнать версии схем - клик по имени базы, на отдельной странице будут написаны подробные сведения о БД:



Для обновления БД контента необходимо выполнить PowerShell скрипт:

Upgrade-SPContentDatabase <DB Name>

Подробности о коммандлете можно прочитать здесь.
Так же, если необходимо, обновите все остальные не БД контента, делается это другим коммандлетом:

(Get-SPDatabase <DB_id> ).Provision();

После обновления БД контента Вы увидите следующее:


Теперь ошибка о разности схем исчезнет и можно выполнить перенос коллекции сайтов.

пятница, 29 мая 2015 г.

SharePoint. Идентификатор взаимосвязи. Как читать ошибки.


SharePoint, при возникновении ошибки не показывает текст, а сообщает "Correlation ID" (Идентификатор взаимосвязи). Выглядит это так:


Сам текст ошибки можно найти в файле журнала ошибок:
C:\Program Files\Common Files\Microsoft Shared\web server extensions\14\LOGS

Для удобного просмотра текста ошибки ( и других событий) по Correlation ID есть много инструментов, часть создана еще для прошлых версий SharePoint, актуальными можно считать только 2:
1) SharePoint ULS Viewer

2) SharePoint LogViewer

Обе программы имеют возможность поиска теста ошибки или любого другого события по Correlation ID.

четверг, 30 апреля 2015 г.

SharePoint 2013 Workflow error. Exception details: System.FormatException: Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).


В ходе выполнения рабочего процесса возникла ошибка:
RequestorId: f54a5d97-39ba-7d44-0000-000000000000. Details: An unhandled exception occurred during the execution of the workflow instance. Exception details: System.FormatException: Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx). at System.Guid.GuidResult.SetFailure(ParseFailureKind failure, String failureMessageID, Object failureMessageFormatArgument, String failureArgumentName, Exception innerException) at System.Guid.TryParseGuidWithNoStyle(String guidString, GuidResult& result) at System.Guid.TryParseGuid(String g, GuidStyles flags, GuidResult& result) at System.Guid.Parse(String input) at System.Activities.CodeActivity`1.InternalExecute(ActivityInstance instance, ActivityExecutor executor, BookmarkManager bookmarkManager) at System.Activities.Runtime.ActivityExecutor.ExecuteActivityWorkItem.ExecuteBody(ActivityExecutor executor, BookmarkManager bookmarkManager, Location resultLocation)

Вот так выглядит на странице состояния рабочего процесса (wrkstat.aspx):


В своем рабочем процессе я создал свой тип контента на основе задачи рабочего процесса 2013 версии. Пользователь при выполнении задачи заполняет добавленное мною кастомное поле. После завершения задачи я пытаюсь использовать значение заполненного поля. В действии назначения задачи есть возможность сохранять GUID созданной задачи в переменную. Используя эту переменную (TaskId14 на картинке) в подстановке я могу получить значение моего кастомного поля "Примечание":

Ошибка, описанная в начале статьи, возникает в случае если Вы пробуете достать элемент задачи используя не GUID. Т.е. просто перепутали поле и вместо TaskId14, как в моем случае, используете любое другое значение, которое не является GUID.

понедельник, 27 апреля 2015 г.

SharePoint. Ссылка на загрузку документа.

Порой возникает необходимость дать ссылку на загрузку документа в библиотеке SharePoint.
Чтобы ссылка была именно на загрузку копии документа. В случае если это файл, который можно открыть в Office Web Apps, то у меня возникла ситуация когда документ из браузера Internet Explorer выдается на открытие:



После открытия этого документ в клиенте, т.е. в Microsoft Office Word 2013 - мы имеем возможность редактировать именно версию которая находится на сервере:




Нам же необходимо получить именно загруженную копию. Для этого надо передать путь скачиваемого файла как параметр странице download.aspx

http//host/_layouts/download.aspx?SourceUrl=http://host/library/myDoc.docx:

В случае, если в имени скачиваемого документа имеется кириллица, то необходимо предварительно выполнить кодирование URL. Ниже показан пример как это сделать, если Вы формируете ссылку на клиенте с использованием JavaScript:
var downloadPageUrl = "http://host/_layouts/download.aspx?SourceUrl=";
var souceFileUrl = "http://host/library/мойДокумент.docx";
var encSouceFileUrl = encodeURIComponent(souceFileUrl);
var downloadUrl = downloadPageUrl + encSouceFileUrl;
В общем проблема решается. Сама страница download.aspx наследуется от класса Download из сборки Microsoft.SharePoint.ApplicationPages.dll, в которой событие "OnLoad" читает параметр "SourceUrl" из URL и выдает полученный файл в виде потока байт с MIME-типом application/octet-stream:

вторник, 7 апреля 2015 г.

Stack Overflow на русском запущен!

Сегодня мне пришло письмо следующего содержания:
Привет, Alexander Ulmaskulov!
Меня зовут Николай, я работаю в компании Stack Exchange над русскоязычной частью Сети. Вы получили это сообщение, так как подписаны на заявку на сайте Зона 51.
С радостью спешу сообщить, что Stack Overflow на русском запущен по адресу http://ru.stackoverflow.com/!
Пожалуйста, станьте одним из тех новаторов, которые заложат фундамент будущего сообщества программистов на русском языке. Именно сейчас сообществу особенно важна Ваша экспертиза!
Stack Overflow на русском - это наш общий шанс сделать Интернет немножко лучше - создать свободно распространяемую базу прикладных знаний на русском языке. Вместе мы сможем создать стандарт общения, который позволит повысить производительность труда каждого русскоязычного разработчика.
Присоединяйтесь! Задавайте вопросы! Делитесь знаниями!
Если Вы пропустили обновление статуса заявки, пожалуйста, ознакомьтесь с ними.
--
С уважением,
Николай Чабановский
Stack Exchange Inc.

Что ж, хорошая новость! Очень хотелось бы увидеть аналогичную новость о форумах по SharePoint.

среда, 25 марта 2015 г.

SharePoint 2013 Workflow error: HTTP 401 & HTTP 423

В моём решение я использовал рабочий процесс. Причем не встроенные 2010 версии, а новые, используя Workflow manager 1.0. После старта рабочего процесса возникала ошибка, в который в самом начале фигурирует:
HTTP 423 или HTTP Unauthorized
Так же может быть:
HTTP 401

Пример:



















Чаще всего встречалась ошибка:
RequestorId: 37edfcab-8717-2a41-0000-000000000000. Details: An unhandled exception occurred during the execution of the workflow instance. Exception details: System.ApplicationException: HTTP 401 {"Transfer-Encoding":["chunked"],"X-SharePointHealthScore":["0"],"SPClientServiceRequestDuration":["98"],"SPRequestGuid":["37edfcab-8717-2a41-9647-2cd739cfd2c0"],"request-id":["37edfcab-8717-2a41-9647-2cd739cfd2c0"],"X-FRAME-OPTIONS":["SAMEORIGIN"],"MicrosoftSharePointTeamServices":["15.0.0.4569"],"X-Content-Type-Options":["nosniff"],"X-MS-InvokeApp":["1; RequireReadOnly"],"Cache-Control":["max-age=0, private"],"Date":["Thu, 26 Feb 2015 08:47:18 GMT"],"Server":["Microsoft-IIS\/8.5"],"WWW-Authenticate":["NTLM"],"X-AspNet-Version":["4.0.30319"],"X-Powered-By":["ASP.NET"]} at Microsoft.Activities.Hosting.Runtime.Subroutine.SubroutineChild.Execute(CodeActivityContext context) at System.Activities.CodeActivity.InternalExecute(ActivityInstance instance, ActivityExecutor executor, BookmarkManager bookmarkManager) at System.Activities.Runtime.ActivityExecutor.ExecuteActivityWorkItem.ExecuteBody(ActivityExecutor executor, BookmarkManager bookmarkManager, Location resultLocation)


Дело в том, что если Вы используете Workflow manager 1.0, то для работы со списком списком истории рабочего процесса будут использоваться права инициатора рабочего процесса. И у инициатора может быть недостаточно прав для работы с этим списком. Имейте это в виду.
Для решение проблемы необходимо повысить права пользователя на список истории рабочего процесса до уровня разрешений  "Совместная работа", сам список скрытый. Можно использовать SharePoint manager 2013, с его помощью поменять свойство списка "hidden" на false. Список появится в веб-интерфейсе и с ним можно будет работать как с обычным списком:



Теперь можно назначить необходимые права для пользователя.
Но есть способ несколько проще. Для этого достаточно использовать Microsoft SharePoint Designer. Откройте Ваш сайт, слева выберите пункт "Все файлы", если подвиснет на этапе "Создание отчёта" - обновите контент. Это баг с 2010 версии еще остался.

В основном окне выберите папку "Lists", потом "Workflow History", правый клик и выбрать свойства:
Потом на ленте выбрать "Веб-страница администрирования":

После этого Вы увидите привычную страницу настройки списка. Добавьте необходимые права и проблема исчезнет. Рабочий процесс запускать снова необязательно. Достаточно на странице процесса в разделе попапе информации кликнуть на "Возобновить рабочий процесс".

среда, 18 марта 2015 г.

SharePoint 2013. Workflow error: System.ArgumentException: ContentTypeId at Microsoft.Activities.Hosting.Runtime.Subroutine.SubroutineChild...

Рабочий процесс перешел в состояние Приостановлено.

Так же выдает ошибку:
Details: An unhandled exception occurred during the execution of the workflow instance. Exception details: System.ArgumentException: ContentTypeId at Microsoft.Activities.Hosting.Runtime.Subroutine.SubroutineChild.Execute(CodeActivityContext context) at System.Activities.CodeActivity.InternalExecute(ActivityInstance instance, ActivityExecutor executor, BookmarkManager bookmarkManager) at System.Activities.Runtime.ActivityExecutor.ExecuteActivityWorkItem.ExecuteBody(ActivityExecutor executor, BookmarkManager bookmarkManager, Location resultLocation)



Ошибка может быть связана с тем, что при создании элемента указывается пользовательский тип контента, который не добавлен в список. В общем то SharePoint Designer об этом заранее сообщает:
При редактировании поля "Типа содержимого задачи:" чуть ниже, если попытаетесь выбрать иной тип контента, появится надпись:
Проверьте, применяется ли этот тип содержимого к списку задач рабочего процесса.

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