none
Скрипт PowerShell RRS feed

  • Вопрос

  • Приветствую. Подскажите пожалуйста, вот есть скрипт для запуска рабочих процессов в библиотеке. А есть ли скрипт для запуска рабочего процесса привязанного к контент типу?

    При помощи данного скрипта – можно запустить рабочий процесс, ассоциированный со списком для всех его элементов:

    $env:SPpath = "${env:CommonProgramFiles}\Microsoft Shared\web server extensions\14\"
    [System.Reflection.Assembly]::LoadFrom("$env:SPPath\ISAPI\Microsoft.SharePoint.dll")
    $SpSite = New-Object -TypeName "Microsoft.SharePoint.SPSite" -ArgumentList "http://MySite";
    $SpWeb = $SpSite.OpenWeb();
    $SpList = $SpWeb.GetList("http://MySite/Lists/MyList/AllItems.aspx");
    if ($SpList  -ne $null)
                {
                    foreach ( $association in $SpList.get_WorkflowAssociations())
                    {
                        if (  $association.get_Name() -eq "MySPWorkflowName")
                        {
                            foreach ( $item in $SpList.get_Items())
                            {
                                $association2 = $SpList.get_WorkflowAssociations().get_Item($association.get_Id());
                              

                                if ($item.get_Workflows().get_Item($association.get_Id())  -ne $null)
                                {                                 

                        $SpSite.get_WorkflowManager().StartWorkflow($item, $association2, $association2.get_AssociationData(), $true);

                                 }
                            }
                        }
                    }
                }

    22 апреля 2011 г. 6:23

Ответы

  • Ваш скрипт можно легко доработать для этих целей добавив несколько конструкций:

    - Для получения ассоциаций используйте SPWorkflow.WorkflowAssociations

    - Вы можете получить все библиотеки, в которых используется Ваш CT при помощи SPContentTypeUsage.GetUsages(contentType);

    - Открываете каждый список и перебираете элементы, фильтруете по CT и запускаете WorkFlow.

     

    Или как вариант можно получить все элементы из всех списков (отфильтровать по типу содержимого в запросе) со всего сайте при помощи SPSiteDataQuery. Дальше перебирая запускать для каждого WF

    • Помечено в качестве ответа Roman Zhukov 3 мая 2011 г. 10:58

Все ответы

  • Ваш скрипт можно легко доработать для этих целей добавив несколько конструкций:

    - Для получения ассоциаций используйте SPWorkflow.WorkflowAssociations

    - Вы можете получить все библиотеки, в которых используется Ваш CT при помощи SPContentTypeUsage.GetUsages(contentType);

    - Открываете каждый список и перебираете элементы, фильтруете по CT и запускаете WorkFlow.

     

    Или как вариант можно получить все элементы из всех списков (отфильтровать по типу содержимого в запросе) со всего сайте при помощи SPSiteDataQuery. Дальше перебирая запускать для каждого WF

    • Помечено в качестве ответа Roman Zhukov 3 мая 2011 г. 10:58
  • Спасибо, Алексей. Но уже проблему решили другим способом, но ваш я возьму на заметку.