Поделиться через


Метод SPContentType.Update (Boolean, Boolean)

Обновление определения типа содержимого, которое хранится в базе данных, при необходимости обновляет все типы контента, наследующие от данного типа содержимого и при необходимости создает исключение при обнаружении дочерний тип контента, который не может быть изменен.

Пространство имен:  Microsoft.SharePoint
Сборка:  Microsoft.SharePoint (в Microsoft.SharePoint.dll)

Синтаксис

'Декларация
Public Sub Update ( _
    updateChildren As Boolean, _
    throwOnSealedOrReadOnly As Boolean _
)
'Применение
Dim instance As SPContentType
Dim updateChildren As Boolean
Dim throwOnSealedOrReadOnly As Boolean

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

Параметры

  • updateChildren
    Тип: System.Boolean

    true для принудительной отправки изменений, внесенных в этот тип контента на типы содержимого, наследующие от этого типа контента.

  • throwOnSealedOrReadOnly
    Тип: System.Boolean

    true для создания исключения, этот метод встречая тип контента, который не может быть изменен, так как он является запечатанным или только для чтения; в противном случае — false.

Исключения

Исключение Условие
SPContentTypeSealedException

Sealed свойство данного типа содержимого или потомка этого типа контента имеет значение true.

SPContentTypeReadOnlyException

Свойство ReadOnly этот тип контента имеет значение true.

- или -

updateChildren , true и ReadOnly свойства дочернего элемента этого типа содержимого имеет значение true.

Замечания

После внесения изменений в тип содержимого узла, через объектную модель, код фактически делает эти изменения в памяти представление типа контента сайта. Только при вызове метода UpdateSharePoint Foundation сделать эти изменения постоянными, путем их фиксации в определении типа содержимого, хранящегося в базе данных узла.

Дополнительные сведения содержатся в разделе Updating Content Types.

После изменения типа контента сайта, вы можете распространить или свалить, изменения, внесенные в родительский тип контента для дочернего сайта и списка типы содержимого.

Дополнительные сведения содержатся в разделе Updating Child Content Types.

Примеры

Следующий пример является консольным приложением, которое выполняет перечисление всех типов контента в семейство веб-сайтов, поиск ссылок для сайта поле с именем «Владелец». Если таковой найден, приложение пытается удалить объект SPFieldLink из типа контента сайта и всех дочерних типов содержимого. Исключения отчеты приложения, печать сообщения в консоль.

Обратите внимание, что приложение выбирает не создает исключение, если обнаруживает обновление дочернего типа контента, запечатан или только для чтения.

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

См. также

Справочные материалы

SPContentType класс

Элементы SPContentType

Перегрузка Update

Пространство имен Microsoft.SharePoint