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.Booleantrue 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.Booleantrue 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
}
}
}