2013-02-23 3 views

ответ

4
$siteURL = "URL" 
$web = Get-SPWeb $siteURL 
$wfm = New-object Microsoft.SharePoint.WorkflowServices.WorkflowServicesManager($web) 
$sub = $wfm.GetWorkflowSubscriptionService() 
$subscriptions = $sub.EnumerateSubscriptionsByList($list.ID) 

Внутри подписки $ есть соответствующий рабочий процесс. Надеюсь, это поможет.

+0

см http://ranaictiu-technicalblog.blogspot.com/2013/05/programmatically-start-sharepoint-2013.html для получения подробной информации –

4

Это MSDN blog post показывает большую часть ответа, но они пытались выполнить итерацию по списку вместо элементов в списке. Ниже приведена обновленная версия.

$sourceWebURL = '<URL>' 
$sourceListName = '<List Name>' 
$TargetWorkflow = '<Workflow Name>' 
$spSourceWeb = Get-SPWeb $sourceWebURL 
$spSourceList = $spSourceWeb.Lists[$sourceListName] 
$items = $spSourceList.getItems() 

#-- Getting a Workflow manager object to work with. 
$wfm = New-object Microsoft.SharePoint.WorkflowServices.WorkflowServicesManager($spSourceweb) 
#-- Getting the subscriptions 
$sub = $wfm.GetWorkflowSubscriptionService() 
#-- Getting the specific workflow within the list of subscriptions on the specific list. (SP2010 associated workflows basically) 
$WF = $sub.EnumerateSubscriptionsByList($spSourcelist.ID) | Where-Object {$_.Name -eq "$TargetWorkflow"} 
#-- Getting a Workflow instance in order to perform my commands. 
$wfis=$wfm.GetWorkflowInstanceService() 

Foreach($item in $items){ 
    #-- Creating the dictionary object I need to parse into StartWorkflow. This could be most other workflow commands. 
    $object = New-Object 'system.collections.generic.dictionary[string,object]' 
    $object.Add("WorkflowStart", "StartWorkflow"); 
    $wfis.StartWorkflowOnListItem($WF, $item.ID, $object) 
}