Показаны сообщения с ярлыком Рабочий процесс. Показать все сообщения
Показаны сообщения с ярлыком Рабочий процесс. Показать все сообщения

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

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

пятница, 30 января 2015 г.

Sharepoint designer. Рабочий процесс не обновляется после публикации

Создавая рабочий процесс для SharePoint 2010 и используя SharePoint Designer 2010 я столкнулся с проблемой, новый процесс не начинал работать с новой логикой. Причем ошибка появилась после решения такой ошибки.
SharePoint "видел", что процесс именно новый, т.к. к отработанным в прошлом добавлялось время публикации, в скобках. Но работать продолжал по старой логике.
Как выяснилось, причина на стороне клиента, а именно в SharePoint Designer. Причем ошибка появилась в 2010 и 2013 версиях.
Что бы побороть проблему надо почистить кэш, для этого необходимо удалить все данные по следующим путям:

%USERPROFILE%\AppData\Local\Microsoft\WebsiteCache
%APPDATA%\Microsoft\Web Server Extensions\Cache

Для SharePoint Designer 2010 еще надо сделать несколько движений:
Файл->Параметры->Общие->Кэшировать данные сайта во время сеансов в SharePoint Designer(Снять галочку)

Это решило проблему.

SharePoint 2010 Ошибка при публикации рабочего процесса


При попытке публикации очень большого рабочего процесса, я получил ошибку на этапе валидации (Validating the workflow):
Errors were found when compiling the workflow. The workflow files were saved but cannot be run:

В подробностях написано:
Unexpected error on server associating the workflow

В общем не особо говорящая ошибка, но все же ясно что проблема на сервере.
Я пробовал обновить сервер, но это так же не помогло.

Решением стало выполнение этого PowerShell скрипта:

$application = get-spwebapplication http://portal
$application .UserDefinedWorkflowMaximumComplexity = 10000
$application .Update()

SharePoint Ошибка рабочего процесса: An IfElseActivity must have at least...


Сделав совсем маленький рабочий процесс я попытался опубликовать его.
Ферма 2013 версии, а рабочий процесс 2010.
Часть процесса, из-за которой возникла ошибка выглядит так:

Публикация рабочего процесса прошла неудачно:


Текст ошибки:
При компиляции рабочего процесса были обнаружены ошибки. Файлы рабочего процесса сохранены, но не могут быть выполнены.
Дополнительно:
(0,0) Activity 'ID38' validation failed: An ifElseActivity must have at least one child of type ifElseBranchActivity.)

Пытаясь найти решение, я обнаружил невидимый элемент, который все же можно сделать доступным для просмотра, если выполнить клик по нему:

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

пятница, 6 июня 2014 г.

Как возвращаться на форму элемента после старта рабочего процесса

После старта рабочего процесса из формы элемента - Вас вернет на представление списка.
Поменять такое поведение можно, если добавить немного JavaScript кода на страницу с представлением списка. Код будет читать referrer, брать ID и делать редирект на форму элемента списка. В нашем случае на форму просмотра. При это важно, что бы код отработал только если Вы перешли на страницу после старта рабочего процесса. Это мы сможем понять по присутствию "Workflow.aspx" в referrer.

Код выглядит так:
// Функция позволяет взять параметр из referrer
function getParameterByName(name, url) {
    name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
    var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
results = regex.exec(url);
    return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
}

// Получаем referrer
var ref = document.referrer
// Получаем ID из referrer
var ID = getParameterByName("ID", ref)
if (ref.indexOf("Workflow.aspx") > -1){
// Делаем редирект
    window.location = "/office/Lists/Contractors/DispForm.aspx?ID=" + ID
}

Теперь надо добавить это все в представление списка, воспользуемся SharePoint Designer 2013:
В моем случая я имею только одно представление, откроем его в расширенном режиме и добавим код, как на картинке:
Сохраните изменение и проверьте работу.

вторник, 29 апреля 2014 г.

Отправить ссылку на элемент из рабочего процесса

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

Сформировать письмо и отправить пользователю ссылку:

К сожалению, если использовать способ как картинке выше, то мы получим следующую ссылку:
http://server/Lists/ListName/81_.000

Где 81 - это Id текущего элемента. Такая ссылка на элемент работать не будет.
Что бы создать рабочую ссылку нужно использовать встроенный в SharePoint Designer 2013 построитель строк и сформировать такое:
[%Контекст рабочего процесса:URL адрес текущего сайта %]/Lists/listname/Dispform.aspx?ID=[%Текущий элемент:ID%]




Для этого получаем URL текущего сайта:



И Id текущего элемента:


Теперь у нас есть рабочая ссылка на элемент.

Стоить отметить, что в приведенном примере мы указываем ссылку на форму просмотра.
У нас остается возможность формировать ссылку сразу на форму изменения элемента.


UPD:
Можно использовать контекст рабочего процесса и получить ссылку на документ:
Но при этом нельзя будет сформировать ссылку сразу на форму редактирования.
Создается ссылка на форму просмотра, чего почти всегда достаточно.




понедельник, 28 апреля 2014 г.

Как сменить отображаемое имя поля Id

Порой заказчик просит добавить поле, которое будет уникальным и увеличиваться на 1 для каждого нового элемента. Писать свой custom field type не имеет смысла, т.к. этим требованиям полностью удовлетворяет поле Id. Его же часто просят переименовать. Что невозможно.
Но заказчик требует что-то вроде этого:

Для того, что бы это реализовать необходимо создать ново поле с типом Integer(Целое) и добавить его в представление:


Потом создаем рабочий процесс списка, который после добавления присвоит значение поля 'Id' полю 'Номер':


Нужно отметить, что поле не сразу будет заполнено после добавления. Необходимо некоторое время, что бы Ваш рабочий процесс отработал.