Compartir a través de


de la propiedad SPContentType.WorkflowAssociations

Obtiene un objeto SPWorkflowAssociationCollection que representa las asociaciones de flujo de trabajo para este tipo de contenido.

Espacio de nombres:  Microsoft.SharePoint
Ensamblado:  Microsoft.SharePoint (en Microsoft.SharePoint.dll)

Sintaxis

'Declaración
Public ReadOnly Property WorkflowAssociations As SPWorkflowAssociationCollection
    Get
'Uso
Dim instance As SPContentType
Dim value As SPWorkflowAssociationCollection

value = instance.WorkflowAssociations
public SPWorkflowAssociationCollection WorkflowAssociations { get; }

Valor de propiedad

Tipo: Microsoft.SharePoint.Workflow.SPWorkflowAssociationCollection
La colección de flujos de trabajo asociados con el tipo de contenido.

Comentarios

La propiedad WorkflowAssociations devuelve un objeto SPWorkflowAssociationCollection con la colección del tipo de contenido de las asociaciones de flujo de trabajo. Puede recuperar una asociación de la colección con el valor de la propiedad Id como un indizador o pasando el nombre de la asociación flujo de trabajo para el método GetAssociationByName .

Cada asociación de flujo de trabajo de una colección debe tener un valor único en la propiedad Name . Cuando se agrega una nueva asociación de flujo de trabajo, debe probar para ver si una asociación de flujo de trabajo con ese nombre ya existe en la colección. Si la asociación de flujo de trabajo ya es un miembro de la colección y desea actualizar la asociación existente, llame al método Update en su lugar.

Puede comprobar la existencia de una asociación de flujo de trabajo en la colección del tipo de contenido al llamar al método GetAssociationByName . Si el valor devuelto por este método no es una referencia null (Nothing en Visual Basic), a continuación, la asociación ya está en la colección. En el siguiente ejemplo se muestra esta técnica.

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

Ejemplos

En el siguiente ejemplo es una aplicación de consola que crea una asociación de flujo de trabajo, lo agrega a la colección de un sitio del tipo de contenido de las asociaciones de flujo de trabajo y, a continuación, se propaga el cambio a los elementos secundarios del tipo de contenido.

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

En el siguiente ejemplo es una aplicación de consola que quita la asociación de flujo de trabajo que se crea en el ejemplo anterior.

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

Vea también

Referencia

clase SPContentType

Miembros SPContentType

Espacio de nombres Microsoft.SharePoint

Add(SPWorkflowAssociation)

Remove(SPWorkflowAssociation)

Otros recursos

Introduction to Workflows in Windows SharePoint Services