вторник, 10 августа 2010 г.

Ошибка "Эта задача сейчас заблокирована выполняющимся рабочим процессом и не может быть изменена"

Создан рабочий процесс (workflow) в редакторе Sharepoint Designer
У этого РП есть активность (activity) "Получить данные от пользователя", в процессе выполнения которой для пользователя создается задача.

Как правило, если пользователь завершает задачу, данные передаются в рабочий процесс, задача переходит в статус завершенных и всё отлично работает.
Однако иногда после нажатия на "Завершить задачу" форма закрывается, но задача не завершается, а остается в статусе "не начата"

Если попытаться повторно нажать на "Завершить задачу" - то выдается вот такая ошибка:
Эта задача сейчас заблокирована выполняющимся рабочим процессом и не может быть изменена

Когда задача уже "застряла" - невозможно сделать ничего, кроме как завершить рабочий процесс принудительно, и начать всё сначала. Но и при этом с большой долей вероятности очередная созданная задача опять застрянет.

В сети не нашел вообще ничего об этой ошибке, кроме разве что: http://www.gotdotnet.ru/forums/5/128821/

Завел кейс в поддержке.
Условие закрытия кейса - задача после нажатия "Завершить задачу" должна в 100% случаях завершаться.

ISSUE
You created a workflow in SharePoint Designer. It has activity "Collect user feedback", a SharePoint task is creating during this activity.

Usually, when user finish a task, the data is transferred successfully and then the task gets the status "completed".
However, sometimes after user clicks on "Finish task" button the form closes, but task still have status "not started".
Any following attempt to "finish task" causes the error "this task has been blocked by workflow and can't be changed" (or "This task is currently locked by a running workflow and cannot be edited")

The only workaround found is to finish the workflow by hand and start the workflow from the beginning.

AGREED RESOLUTION
We can close the case when the specific activity ("Collect Feedback") will complete the associated task.
We can also close the case if we can explain why should we have the behavior and/or we will provide a workaround.

CURRENT STATUS
We reviewed the issue. Collected some data and established the logs we will need.

ACTION PLAN
You need to reproduce the issue:
- When a user tries to complete the task
- When he tries again and receives the error
You will collect the following data:
- The SharePoint logs when the issue was observed
- The workflow logs
- The time(s) when the issue(s) occurred
- The permissions of the user completing the task

Были собраны логи SharePoint и WorkFlow (последнее - с помощью этого способа)

По результатам рассмотрения кейса инженером было выдано предварительное решение: это баг, такое случается периодически и фикса на этот баг нет. Однако можно лечить проявления с помощью скрипта, вот пример реализации на повершелл:
[System.Reflection.Assembly]::LoadWithPartialName(”Microsoft.SharePoint”)

function ChangeWorkflowVersionOnItem
{
param ($siteurl, $listURL, $itemID)

Write-Host "Getting data"
$mysite = new-object Microsoft.SharePoint.SPSite($siteurl)
$myweb = $mysite.OpenWeb()
$mylist = $myweb.GetList($listURL)
$myitem = $mylist.GetItemById($itemID)
$myitem["WorkflowVersion"] = 1
$myitem.SystemUpdate()
Write-Host "DONE Item ", $itemID
}

function ChangeWorkflowVersionOnList
{
param ($siteurl, $listURL)

Write-Host "Getting data"
$mysite = new-object Microsoft.SharePoint.SPSite($siteurl)
$myweb = $mysite.OpenWeb()
$mylist = $myweb.GetList($listURL)
foreach ($item in $mylist.Items)
{
if ($item["WorkflowVersion"] -ne 1)
{
$item["WorkflowVersion"] = 1
$item.SystemUpdate()
Write-Host "DONE Item ", $item.ID
}
}
Write-Host "DONE List"
}

# to call the functions use the commands as below:
# For a specific item (recommended)
#ChangeWorkflowVersion "http://an-moss2007dev" "Lists/Tasks" 2
# or for an entire list
#ChangeWorkflowVersionOnList "http://an-moss2007dev" "Lists/Tasks"
Продолжение следует, пока что жду доп инфо от MS, а тем временем моя задача придумать как сделать так чтобы всё это выполнялось в автоматическом режиме и заказчик был доволен...

PS Статья о проблеме есть ещё вот тут: http://blogs.code-counsel.net/Wouter/Lists/Posts/Post.aspx?ID=118, но там всё сводится к фразе "DO NOT UPGRADE UNTIL ALL RUNNING WORKFLOWS ARE COMPLETE" т.к. рассматривается случай, когда разработчик изменяет РП в тот момент, когда этот РП запущен и задача назначена. Однако, в нашем случае в момент редактирования РП задачи были завершены, и инстансы этого РП не были запущены.

UPDATE В действительности проблема решалась совсем иначе. В какой-то момент была выявлена закономерность: задача зависает, если заходить по URL xxxx.xxx.ru и не зависает, если заходить по yyyyy:
Оба эти URL вели на один и тот же сайт - это было реализовано через сопоставления для альтернативного доступа. Однако было реализовано некорректно - не было создано отдельного веб-сайта IIS для xxxx.xxx.ru
Что сделано: веб-приложение корректно расширено, xxxx.xxx.ru создано на порту 80 (URL: xxxx.xxx.ru:80)
После этого проблема ушла.

UPDATE2 А вообще ничо не стоит взять и поломать это снова. Один из простых способов: поменять в параметрах поля "Кому назначено" списка Задач пункт "Разрешить назначать нескольким" с Нет на Да... . Наверняка любую другую фигнюшку тоже достаточно поменять, чтобы посыпалось всё нафиг... вот так-то...

Проблема с email-рассылкой в MOSS2007

Не так давно мы имели проблему с рассылкой у пользователей на различных веб-приложениях. Полностью проблема была сформулирована мною так: "В новом веб-приложении не работают оповещения, а также нет автоматического запуска рабочих процессов"
Для корректной работы оповещений помогло вот это:
Есть информация на technet:
1.Открыть консоль (Пуск – Выполнить… – cmd – Ок)
2.Запускаем программу администрирования stsadm.exe (пишем stsadm.exe и нажимаем Enter), смотрим, что она у вас есть и радуемся ее наличию.
3.Пишем: stsadm -o setproperty -url http://site -pn alerts-enabled -pv «true» (этой командой мы включаем оповещения)
4.Теперь задаем параметры: stsadm -o setproperty -url http://site -pn job-immediate-alerts -pv «every 5 minutes».
После того как согласно описанию на ресурсе http://technet.microsoft.com/en-us/library/cc263206.aspx было произведено выключение-включение механизма оповещения и изменение времени проверки оповещений, которые должны быть отработаны: http://technet.microsoft.com/en-us/library/cc262432.aspx - всё заработало.

Для запуска WorkFlow помогло вот это:
C:\>stsadm -o getproperty -pn job-workflow -url http://site/

C:\>stsadm -o setproperty -pn job-workflow -pv "Every 2 minutes" -url http://site/
Операция успешно завершена.
C:\>stsadm -o getproperty -pn job-workflow -url http://site/

C:\> setproperty -pn job-workflow -pv "Every 2 minutes between 0 and 59" -url http://site/
Операция успешно завершена.
C:\>stsadm -o getproperty -pn job-workflow -url http://site/


В один прекрасный день всё слетело и это также перестало работать, приведенные выше решения не работали. Пришлось задействовать ТП Microsoft. После анализа таблиц в БД SharePointа оказалось, что у нас был ещё один сервер приложений, на котором не был настроен smtp-протокол, однако он хватал сообщения на отправку, после чего писал в лог ошибку и письмо благополучно не уходило. Вот этим запросом можно было увидеть, какой сервер используется в настоящий момент: SELECT * FROM [WSS_Content_20101].[dbo].[TimerLock]

∙ Симптомы - Customer noticed that only the greeting email arrives for some immediate alerts. He found out that the scope is web application. Immediate alerts work only for one.
∙ Причина - The recently added Sharepoint server could not send emails. Content databases whose timer jobs were linked to this server ran into this problem.
∙ Решение - When we stopped the timer service on the new ser, after timerlock changed for the dtabases, emails went out for immediate alerts started to work.
∙ Дополнительная информация - possibly email receiving restrictions on the Lotues Notes side

понедельник, 26 июля 2010 г.

Сохранение рабочего процесса...

Озадачился тем как сохранить рабочий процесс из SharePoint Designer на случай непредвиденного повреждения/удаления.
Задал вопрос на форуме, пока ничего... http://www.gotdotnet.ru/forums/5/131116/616305/#post616305

UPDATE на самом деле, рабочий процесс сохранить можно только вместе с содержимым, к которому он собственнно привязан - списку, библиотеке. Ну а учитывая, что сам рабочий процесс это тоже элемент библиотеки рабочих процессов - то и сохранять надо весь узел.
Как я понял, SharePoint 2007 предлагает 3 основных способа сохранить/восстановить содержимое узла, условно назовем их:
1. Site/List Template (из меню "Параметры", сохранить как шаблон с включением содержимого, создаётся stp файл)
2. export/import (с помощью командной строки stsadm или SharePoint Designerа, создается cmp файл)
3. backup/restore

Второй способ - заведомо не подходит, microsoft пишет: "If I understood well the question, I could already tell you that exporting sites where we have workflows then using them again will not work.
The reason is that when using export/import, the lists/elements identifiers are generated again and the workflows are not able to identify what is the specific object he needs to work with." Т.е. мы конечно можем сохранить/восстановить контент, но РП придется заново переделывать, перепривязать все поля к нашим активностям заново.

Третий способ - http://technet.microsoft.com/en-us/library/dd819893(office.12).aspx - Microsoft Press: Backup and restore. Ещё предстоит попробовать, пока вот что написал инженер MS: "I could also ad that backup/restore operation do keep the element identities, and the workflow might work in the restored sites.
However, you cannot use a restored site in the same farm, because you might have a conflict of IDs."

Наконец, первый способ, который протестирован мною, и вроде бы пока работает:
"Now, if we get back to the limitation, there is a way to change it, by changing the max-template-document-size property for the site.
Please check the following resources:
- http://msdn.microsoft.com/en-us/library/bb802960(office.12).aspx - Site Template
- http://support.microsoft.com/kb/960969 - Error message when you try to save a site as a template in SharePoint Server 2007: "Failure decompressing data from a cabinet file"
Первая ссылка описывает изменение параметра в строке stsadm, который позволяет увеличить размер шаблона. А во второй - упомянута проблема, с которой мы можем столкнуться при попытке использования первой. Там же можно встретить фразу "Templates are not best practice for site level backup/restore operations"... Что ж, это понятно, но пока - это единственный приемлемый способ сохранить рабочий процесс в MOSS2007...


PS на самом деле у каждого из способов своя область применения, свои особенности, если ещё решения сторонних разработчиков - подробней есть в документации и например вот тут в статье Нелли Сатретдиновой "Инструменты миграции SharePoint на все случаи жизни": http://doc.elcat.kg/Misc/SOMag/content/2008/samag_04_65/samag4(65)-27-33.pdf

PPS Here is a summary of the case:

ACTION/RESULT
You were interested on how a site can be saved as template then use it along with the workflows created on it.
You were also concerned about the limitation on the size of the files saved by SharePoint when saving as template.

CAUSE
Advisory case

RESOLUTION
Provided answers:
- Exporting sites where we have workflows then using them again will not work.
The reason is that when using export/import, the lists/elements identifiers are generated again and the workflows are not able to identify what is the specific object he needs to work with.
- About the limitation, there is a way to change it, by changing the max-template-document-size property for the site
Additional resources:
- http://msdn.microsoft.com/en-us/library/bb802960(office.12).aspx - Site Template
- http://technet.microsoft.com/en-us/library/dd819893(office.12).aspx - Microsoft Press: Backup and restore
- http://support.microsoft.com/kb/960969 - Error message when you try to save a site as a template in SharePoint Server 2007: "Failure decompressing data from a cabinet file"

More info:
I could also ad that backup/restore operation do keep the element identities, and the workflow might work in the restored sites.
However, you cannot use a restored site in the same farm, because you might have a conflict of IDs.

हेल्लो World

см. сабж
Странно, что блог сразу же переводит некоторые слова на хинди. По дефолту новый юзер - индус лол?