четверг, 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.