Condividi tramite


SPContentType.WorkflowAssociations Property

Gets an SPWorkflowAssociationCollection object that represents the workflow associations for this content type.

Namespace:  Microsoft.SharePoint
Assembly:  Microsoft.SharePoint (in Microsoft.SharePoint.dll)
Available in Sandboxed Solutions: Yes
Available in SharePoint Online

Syntax

'Declaration
<ClientCallableAttribute> _
Public ReadOnly Property WorkflowAssociations As SPWorkflowAssociationCollection
    Get
'Usage
Dim instance As SPContentType
Dim value As SPWorkflowAssociationCollection

value = instance.WorkflowAssociations
[ClientCallableAttribute]
public SPWorkflowAssociationCollection WorkflowAssociations { get; }

Property Value

Type: Microsoft.SharePoint.Workflow.SPWorkflowAssociationCollection
The collection of workflows associated with the content type.

Remarks

The WorkflowAssociations property returns an SPWorkflowAssociationCollection object with the content type’s collection of workflow associations. You can retrieve an association from the collection by using the value of the Id property as an indexer or by passing the workflow association’s name to the GetAssociationByName method.

Each workflow association in a collection must have a unique value in the Name property. When you add a new workflow association, you should test to see if a workflow association by that name already exists in the collection. If your workflow association is already a member of the collection and you want to update the existing association, call the Update method instead.

You can test for the existence of a workflow association in the content type’s collection by calling the GetAssociationByName method. If the return value of that method is not a null reference (Nothing in Visual Basic), then the association is already in the collection. The following example demonstrates this technique.

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);
}

Examples

The following example is a console application that creates a workflow association, adds it to a site content type’s collection of workflow associations, and then propagates the change to children of the content type.

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();
        }
    }
}

The following example is a console application that removes the workflow association that is created by the previous example.

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();
        }
    }
}

See Also

Reference

SPContentType Class

SPContentType Members

Microsoft.SharePoint Namespace

Add(SPWorkflowAssociation)

Remove(SPWorkflowAssociation)

Other Resources

Introduction to Workflows in SharePoint Foundation