Compartilhar via


SPContentType.Update method (Boolean, Boolean)

Atualiza a definição de tipo de conteúdo que é armazenada no banco de dados, opcionalmente atualiza todos os tipos de conteúdo que herdam deste tipo de conteúdo e, opcionalmente, lança uma exceção quando ele encontra um tipo de conteúdo filho que não pode ser modificado.

Namespace:  Microsoft.SharePoint
Assembly:  Microsoft.SharePoint (in Microsoft.SharePoint.dll)

Syntax

'Declaração
Public Sub Update ( _
    updateChildren As Boolean, _
    throwOnSealedOrReadOnly As Boolean _
)
'Uso
Dim instance As SPContentType
Dim updateChildren As Boolean
Dim throwOnSealedOrReadOnly As Boolean

instance.Update(updateChildren, throwOnSealedOrReadOnly)
public void Update(
    bool updateChildren,
    bool throwOnSealedOrReadOnly
)

Parâmetros

  • updateChildren
    Type: System.Boolean

    true para enviar as alterações feitas ao tipo de conteúdo para tipos de conteúdo que herdam deste tipo de conteúdo.

  • throwOnSealedOrReadOnly
    Type: System.Boolean

    true para acionar uma exceção quando esse método encontra um tipo de conteúdo que não pode ser modificado porque ele está selado ou é somente leitura; Caso contrário, false.

Exceptions

Exception Condition
SPContentTypeSealedException

A propriedade Sealed desse tipo de conteúdo ou de um filho desse tipo de conteúdo tem um valor de true.

SPContentTypeReadOnlyException

A propriedade ReadOnly desse tipo de conteúdo tem um valor de true.

- ou -

updateChildren é true e a propriedade ReadOnly de um filho desse tipo de conteúdo tem um valor de true.

Comentários

Como fazer alterações a um tipo de conteúdo de site por meio do modelo de objeto, seu código está fazendo, na verdade, essas alterações à representação em memória do tipo de conteúdo de site. Somente quando você chamar o método UpdateSharePoint Foundation tornar essas alterações permanentes, por confirmá-las na definição de tipo de conteúdo que é armazenada no banco de dados do site.

Para obter mais informações, consulte Updating Content Types.

Quando você faz alterações em um tipo de conteúdo do site, você pode escolher propagar ou empurre para baixo, as alterações feitas no tipo de conteúdo pai para seu filho de site e listam tipos de conteúdo.

Para obter mais informações, consulte Updating Child Content Types.

Examples

O exemplo a seguir é um aplicativo de console que enumera todos os tipos de conteúdo no conjunto de sites, procurando referências a um campo de site chamado "Proprietário". Se uma for encontrada, o aplicativo tentará excluir o objeto de SPFieldLink do tipo de conteúdo de site e de todos os tipos de conteúdo filhos. O aplicativo relata exceções por imprimir mensagens no console.

Observe que o aplicativo opta por não lançar uma exceção se a atualização encontrar um tipo de conteúdo filho está selado ou somente leitura.

Imports System
Imports Microsoft.SharePoint

Module ConsoleApp
    Sub Main()
        Dim site As SPSite = New SPSite("https://localhost")
        Try
            Dim web As SPWeb = site.OpenWeb()
            Try
                Dim fldName As String = "Owner"
                Dim id As Guid = GetFieldId(fldName, web.Fields)
                ' Try to delete links to the field from site content types.
                Dim found As Boolean = False
                For Each ct As SPContentType In web.ContentTypes
                    Dim fldLnk As SPFieldLink = ct.FieldLinks(id)
                    If fldLnk IsNot Nothing Then
                        found = True
                        Console.WriteLine("Content type {0} links to field {1}.", ct.Name, fldName)
                        ct.FieldLinks.Delete(id)
                        Try
                            ' Do not throw an exception if child is readonly or sealed.
                            ct.Update(true, false) 
                            Console.Write("Field deleted from the site content type and all children ")
                            Console.WriteLine("except those that are sealed or read-only.”)
                        Catch ex As SPException
                            Console.Write("Update failed. ")
                            Console.WriteLine(ex.Message)
                        End Try
                    End If
                Next ct
                If Not found Then
                    Console.WriteLine("No site content type links to field {0}", fldName)
                End If
            Finally
                web.Dispose()
            End Try
            Finally
                site.Dispose()
            End Try
        Console.Write(vbCrLf + "Press ENTER to continue...")
        Console.ReadLine()
    End Sub

    Function GetFieldId(ByVal name As String, ByVal fields As SPFieldCollection) As Guid
        Dim id As Guid = Guid.Empty
        Dim fld As SPField = Nothing
        Try
            fld = fields.GetField(name)
        Catch ex As ArgumentException
            Console.WriteLine("Exception thrown by a call to {0} with argument '{1}'", ex.TargetSite, name)
        End Try
        If fld IsNot Nothing Then
            id = fld.Id
        End If
        Return id 'Might be Guid.Empty
    End Function
End Module
using System;
using Microsoft.SharePoint;

namespace Test
{
    class ConsoleApp
    {
        static void Main(string[] args)
        {
            using (SPSite site = new SPSite("https://localhost"))
            {
                using (SPWeb web = site.OpenWeb())
                {
                    string fldName = "Owner";
                    Guid id = GetFieldId(fldName, web.Fields);
                    // Try to delete links to the field from site content types.
                    bool found = false;
                    foreach (SPContentType ct in web.ContentTypes)
                    {
                        SPFieldLink fldLnk = ct.FieldLinks[id];
                        if (fldLnk != null)
                        {
                            found = true;
                            Console.WriteLine("Content type {0} links to field {1}.",
                                              ct.Name, fldName);
                            ct.FieldLinks.Delete(id);
                            try
                            {
                                // Do not throw an exception if child is readonly or sealed.
                                ct.Update(true, false); 
                                Console.Write("Field deleted from the site content type and all children ");
                                Console.WriteLine("except those that are sealed or read-only.");
                            }
                            catch (SPException ex)
                            {
                                Console.Write("Update failed. "); 
                                Console.WriteLine(ex.Message);
                            }
                        }
                    }
                    if (!found)
                        Console.WriteLine("No site content type links to field {0}", fldName);
                }
            }
            Console.Write("\nPress ENTER to continue...");
            Console.ReadLine();
        }

        static Guid GetFieldId(string name, SPFieldCollection fields)
        {
            Guid id = Guid.Empty;
            SPField fld = null;
            try
            {
                fld = fields.GetField(name);
            }
            catch (ArgumentException ex)
            {
                Console.WriteLine("Exception thrown by a call to {0} with argument '{1}'", ex.TargetSite, name);
            }
            if (null != fld)
                id = fld.Id;
            return id; //Might be Guid.Empty
        }
    }
}

Ver também

Referência

SPContentType class

SPContentType members

Update overload

Microsoft.SharePoint namespace