Свойство SPContentType.WorkflowAssociations
Получает объект SPWorkflowAssociationCollection , представляющий связей рабочих процессов для данного типа контента.
Пространство имен: Microsoft.SharePoint
Сборка: Microsoft.SharePoint (в Microsoft.SharePoint.dll)
Синтаксис
'Декларация
Public ReadOnly Property WorkflowAssociations As SPWorkflowAssociationCollection
Get
'Применение
Dim instance As SPContentType
Dim value As SPWorkflowAssociationCollection
value = instance.WorkflowAssociations
public SPWorkflowAssociationCollection WorkflowAssociations { get; }
Значение свойства
Тип: Microsoft.SharePoint.Workflow.SPWorkflowAssociationCollection
Коллекция рабочих процессов, связанных с типом контента.
Замечания
Свойство WorkflowAssociations возвращает объект SPWorkflowAssociationCollection с типом содержимого коллекции связей рабочих процессов. Ассоциацию можно извлечь из коллекции, используя значение свойства Id в качестве индексатора или путем передачи в метод GetAssociationByName имя сопоставления рабочего процесса.
Каждое сопоставление рабочего процесса в коллекции должно иметь уникальное значение в свойстве Name . При добавлении нового сопоставления рабочего процесса, следует проверить, если связи с рабочим процессом с таким именем уже существует в коллекции. Если требуется обновить существующее сопоставление связи с рабочим процессом уже является членом коллекции, следует вызовите метод Update .
Для проверки наличия связи с рабочим процессом в тип содержимого коллекции можно проверить путем вызова метода GetAssociationByName . Если возвращаемое значение этого метода не является пустая ссылка (Nothing в Visual Basic), затем ассоциации уже присутствует в коллекции. Следующий пример демонстрирует этот метод.
If contentType.WorkflowAssociations.GetAssociationByName(workflowAssociation.Name, site.Locale) Is Nothing Then
contentType.WorkflowAssociations.Add(workflowAssociation)
Else
contentType.WorkflowAssociations.Update(workflowAssociation)
End If
if (contentType.WorkflowAssociations.GetAssociationByName(workflowAssociation.Name, site.Locale) == null)
{
contentType.WorkflowAssociations.Add(workflowAssociation);
}
else
{
contentType.WorkflowAssociations.Update(workflowAssociation);
}
Примеры
Следующий пример является консольным приложением, которое создает связи с рабочим процессом, добавляет его в коллекцию связей рабочих процессов типа контента сайта и затем распространяет изменения на дочерние узлы с типом содержимого.
Imports System
Imports Microsoft.SharePoint
Imports Microsoft.SharePoint.Workflow
Module ConsoleApp
Sub Main()
Console.WriteLine()
Dim siteCollection As SPSite = New SPSite("https://localhost")
Dim site As SPWeb = siteCollection.OpenWeb()
Dim siteContentType As SPContentType = site.ContentTypes("Test Document")
Dim taskListTitle As String = "Tasks"
Dim historyListTitle As String = "Workflow History"
Dim workflowName As String = "Red-Yellow-Green"
' Get a template.
Dim workflowTemplate As SPWorkflowTemplate = Nothing
For Each template As SPWorkflowTemplate In site.WorkflowTemplates
workflowTemplate = template
' We'll take a template everyone has
If workflowTemplate.Name = "Three-state" Then
Exit For
End If
Next template
' Create an association.
Dim workflowAssociation As SPWorkflowAssociation = _
SPWorkflowAssociation.CreateSiteContentTypeAssociation(workflowTemplate, _
workflowName, _
taskListTitle, _
historyListTitle)
' Add the association to the content type or update it if it already exists.
Console.Write("Workflow association {0} has been ", workflowAssociation.Name)
If siteContentType.WorkflowAssociations.GetAssociationByName(workflowAssociation.Name, site.Locale) Is Nothing Then
siteContentType.WorkflowAssociations.Add(workflowAssociation)
Console.WriteLine("added.")
Else
siteContentType.WorkflowAssociations.Update(workflowAssociation)
Console.WriteLine("updated.")
End If
' Propagate to children of this content type.
siteContentType.UpdateWorkflowAssociationsOnChildren(False, True, True, False)
' Clean up.
site.Dispose()
siteCollection.Dispose()
Console.WriteLine()
Console.Write("Press ENTER to continue...")
Console.ReadLine()
End Sub
End Module
using System;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Workflow;
namespace Test
{
class ConsoleApp
{
static void Main(string[] args)
{
Console.WriteLine();
SPSite siteCollection = new SPSite("https://localhost");
SPWeb site = siteCollection.OpenWeb();
SPContentType siteContentType = site.ContentTypes["Test Document"];
string taskListTitle = "Tasks";
string historyListTitle = "Workflow History";
string workflowName = "Red-Yellow-Green";
// Get a template.
SPWorkflowTemplate workflowTemplate = null;
foreach (SPWorkflowTemplate template in site.WorkflowTemplates)
{
workflowTemplate = template;
// We'll take a template everyone has.
if (workflowTemplate.Name == "Three-state") break;
}
// Create an association.
SPWorkflowAssociation workflowAssociation =
SPWorkflowAssociation.CreateSiteContentTypeAssociation(workflowTemplate,
workflowName,
taskListTitle,
historyListTitle);
// Add the association to the content type or update it if it already exists.
Console.Write("Workflow association {0} has been ", workflowAssociation.Name);
if (siteContentType.WorkflowAssociations.GetAssociationByName(workflowAssociation.Name, site.Locale) == null)
{
siteContentType.WorkflowAssociations.Add(workflowAssociation);
Console.WriteLine("added.");
}
else
{
siteContentType.WorkflowAssociations.Update(workflowAssociation);
Console.WriteLine("updated.");
}
// Propagate to children of this content type.
siteContentType.UpdateWorkflowAssociationsOnChildren(false, // Do not generate full change list
true, // Push down to derived content types
true, // Push down to list content types
false); // Do not throw exception if sealed or readonly
site.Dispose();
siteCollection.Dispose();
Console.WriteLine();
Console.Write("Press ENTER to continue...");
Console.ReadLine();
}
}
}
Следующий пример является консольным приложением, которое удаляет сопоставление рабочего процесса, созданного в предыдущем примере.
Imports System
Imports Microsoft.SharePoint
Imports Microsoft.SharePoint.Workflow
Module ConsoleApp
Sub Main()
Dim site As SPSite = New SPSite("https://localhost")
Try
Dim web As SPWeb = site.OpenWeb()
Try
Dim ctName As String = "Test Document"
Dim wfName As String = "Red-Yellow-Green"
Dim contentType As SPContentType = web.ContentTypes(ctName)
If Not contentType Is Nothing Then
Dim wfAssociation As SPWorkflowAssociation = _
contentType.WorkflowAssociations.GetAssociationByName(wfName, web.Locale)
If Not wfAssociation Is Nothing Then
' Remove the workflow association.
contentType.WorkflowAssociations.Remove(wfAssociation)
Console.WriteLine("The association with {0} workflow has been removed.", wfAssociation.Name)
Else
Console.WriteLine("An association with {0} workflow was not found.", wfName)
End If
Else
Console.WriteLine("Content type {0} does not exist.", ctName)
End If
Finally
web.Dispose()
End Try
Finally
site.Dispose()
End Try
Console.Write(vbCrLf + "Press ENTER to continue...")
Console.ReadLine()
End Sub
End Module
using System;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Workflow;
namespace Test
{
class ConsoleApp
{
static void Main(string[] args)
{
using (SPSite site = new SPSite("https://localhost"))
{
using (SPWeb web = site.OpenWeb())
{
string ctName = "Test Document";
string wfName = "Red-Yellow-Green";
SPContentType contentType = web.ContentTypes[ctName];
if (null != contentType)
{
SPWorkflowAssociation wfAssociation =
contentType.WorkflowAssociations.GetAssociationByName(wfName, web.Locale);
if (null != wfAssociation)
{
// Remove the workflow association.
contentType.WorkflowAssociations.Remove(wfAssociation);
Console.WriteLine("The association with {0} workflow has been removed.", wfAssociation.Name);
}
else
{
Console.WriteLine("An association with {0} workflow was not found.", wfName);
}
}
else
{
Console.WriteLine("Content type {0} does not exist.", ctName);
}
}
}
Console.Write("\nPress ENTER to continue...");
Console.ReadLine();
}
}
}
См. также
Справочные материалы
Пространство имен Microsoft.SharePoint