четверг, 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 об этом заранее сообщает:
При редактировании поля "Типа содержимого задачи:" чуть ниже, если попытаетесь выбрать иной тип контента, появится надпись:
Проверьте, применяется ли этот тип содержимого к списку задач рабочего процесса.

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

среда, 18 февраля 2015 г.

SharePoint. Сменить URL библиотеки или списка

Если появилась необходимость поменять url адрес списка или библиотеки, то сделать это через веб-интерфейс не получиться. Можно изначально назвать латиницей библиотеку или список, а потом переименовать. Тогда название будет отличаться от url.
Если же надо именно у уже созданной библиотеке или списка сменить url, то есть 2 способа.
1. Использовать SharePoint Designer
2. Использовать проводник Windows
Давайте начнем с SharePoint Designer и случаем, когда необходимо переименовать библиотеку. Откройте SPD и выполните действия как на картинке:


Второй способ, это переименовать библиотеку или список, но не используя SharePoint Designer. Для этого, используя Internet Explorer, откройте библиотеку. Потом выберите на ленте инструментов "Библиотека->Открыть в проводнике":

Если все хорошо, то Windows Explorer (Проводник Windows) подключится к библиотеке, используя протокол WebDav:

Перейдите на уровень выше и среди папок увидите свою библиотеку. Ищите папку не отображаемым именем, а с тем, которое видите в адресной строке браузера. Потом переименуйте.
Последним способом можно переименовать и список, но для этого надо открыть через WebDav в проводнике любую другую библиотеку, потом перейти на уровень выше и в папку "Lists". Там найдите необходимый список.
После смены url любым из указанных способов, необходимо самостоятельно поменять ссылку на библиотеку или список. Если этого не сделал, то пользователи будут попадать на старый Url и видеть сообщение:





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

Восставший InfoPath 2013


Сегодня стало известно, что InfoPath 2013 будет работать в SharePoint 2016.
Обновления клиента InfoPath не будет, 2013 - последняя версия.
Напомню, Microsoft планировал представить новую технологию для создания форм, это будет не развитие InfoPath, а что-то новое. Но оно, не появится. InfoPath не только восстал из мертвых, но и поквитался со своей заменой - FoSL vNext.