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


Класс SPContentType

Представляет тип контента сайта или списка.

Иерархия наследования

System.Object
  Microsoft.SharePoint.SPContentType

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

Синтаксис

'Декларация
Public NotInheritable Class SPContentType
'Применение
Dim instance As SPContentType
public sealed class SPContentType

Замечания

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

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

Примеры

Следующий пример является консольным приложением, которое создает тип контента и добавляет его в коллекцию типов контента сайта. Затем в примере создается поле (столбец) и ссылки на новый тип содержимого поля. Наконец в примере создается список и добавляет новый тип содержимого в коллекцию типа содержимого, к которому относится к списку.

Перед запуском приложения, необходимо добавить в проект ссылку на Microsoft.Sharepoint.dll .

Imports System
Imports Microsoft.SharePoint

Module Test

#Region "fields"
   Private requestUrl As String = "https://localhost"

   ' Name and type of content type to create.
   Private ctName As String = "Customer"
   Private parentId As SPContentTypeId = SPBuiltInContentTypeId.Contact

   ' Name and type of site column to create.
   Private fldName As String = "LastOrder"
   Private fldType As SPFieldType = SPFieldType.DateTime

   ' Name, type, and description of list to create.
   Private lstName As String = "Customers"
   Private lstType As SPListTemplateType = SPListTemplateType.Contacts
   Private lstDesc As String = "A list of customers."
#End Region

   Sub Main()
      Using site As SPSite = New SPSite(requestUrl)
         Using web As SPWeb = site.OpenWeb()
            If ValidNames(web) Then
               ' Create a new site content type.
               Dim cts As SPContentTypeCollection = web.ContentTypes
               Dim ct As New SPContentType(cts(parentId), cts, ctName)

               ' Add the content type to the site collection.
               cts.Add(ct)
               Console.WriteLine( _
                  "Added {0} content type to site collection.", ct.Name)

               ' Create a site field to link to.
               Dim fields As SPFieldCollection = web.Fields
               fldName = fields.Add(fldName, fldType, False)
               Console.WriteLine("Created {0} site column.", fldName)

               ' Link the content type to the field.
               Dim field As SPField = fields.GetField(fldName)
               Dim fieldLink As SPFieldLink = New SPFieldLink(field)
               ct.FieldLinks.Add(fieldLink)
               Console.WriteLine( _
                  "Linked {0} content type to {1} column.", _
                  ct.Name, field.InternalName)

               ' Commit changes to the database.
               ct.Update()

               ' Create a list.
               Dim lists As SPListCollection = web.Lists
               Dim listID As Guid = lists.Add(lstName, lstDesc, lstType)
               Dim list As SPList = lists(listID)
               list.OnQuickLaunch = True
               list.Update()
               Console.WriteLine("Created {0} list.", list.Title)

               ' Apply the new content type to the list.
               list.ContentTypesEnabled = True
               If list.IsContentTypeAllowed(ct) Then
                  ' Add the new content type.
                  Dim lstCT As SPContentType = list.ContentTypes.Add(ct)
                  ' Remove the default content type.
                  list.ContentTypes(0).Delete()
                  ' Commit changes to the list.
                  list.Update()
                  Console.WriteLine("Applied {0} content type to {1} list.", _
                                    lstCT.Name, list.Title)
               Else
                  Console.WriteLine("{0} list does not allow {1} content type.", _
                                    list.Title, ct.Name)
               End If
            End If
         End Using
      End Using
      Console.Write(vbCrLf + "Press ENTER to continue...")
      Console.ReadLine()
   End Sub

   ' Checks for duplicate content type, field, and list names.
   Private Function ValidNames(ByRef web As SPWeb) As Boolean
      Dim valid As Boolean = True

      ' Duplicate content type name?
      If web.AvailableContentTypes(ctName) IsNot Nothing Then
         valid = False
         Console.WriteLine("Duplicate content type name.")
      End If

      ' Invalid characters in content type name?
      Try
         SPContentType.ValidateName(ctName)
      Catch ex As SPException
         valid = False
         Console.WriteLine("Invalid character in content type name.")
      End Try

      ' Duplicate field name?
      If web.Fields.ContainsField(fldName) Then
         valid = False
         Console.WriteLine("Duplicate field name.")
      End If

      ' Duplicate list name?
      Try
         Dim list As SPList = web.Lists(lstName) ' Exception if not found
         valid = False
         Console.WriteLine("Duplicate list name.")
      Catch ex As ArgumentException
         ' List name does not exist.
      End Try

      Return valid
   End Function

End Module
using System;
using Microsoft.SharePoint;

namespace Test
{
   class ConsoleApp
   {
      #region fields
      private static string requestUrl = "https://localhost";

      // Name and type of content type to create.
      private static string ctName = "Customer";
      private static SPContentTypeId parentId = SPBuiltInContentTypeId.Contact;

      // Name and type of site column to create.
      private static string fldName = "LastOrder";
      private static SPFieldType fldType = SPFieldType.DateTime;

      // Name, type, and description of list to create.
      private static string lstName = "Customers";
      private static SPListTemplateType lstType = SPListTemplateType.Contacts;
      private static string lstDesc = "A list of customers.";
      #endregion

      static void Main(string[] args)
      {
         using (SPSite site = new SPSite(requestUrl))
         {
            using (SPWeb web = site.OpenWeb())
            {
               // Check for duplicate content type, field, and list names.
               if (ValidNames(web))
               {
                  // Create a new site content type.
                  SPContentTypeCollection cts = web.ContentTypes;
                  SPContentType ct = new SPContentType(cts[parentId], // parent
                                                       cts,           // collection
                                                       ctName);       // name

                  // Add the content type to the site collection.
                  cts.Add(ct);
                  Console.WriteLine(
                      "Added {0} content type to site collection.", ct.Name);

                  // Create a site field to link to.
                  SPFieldCollection fields = web.Fields;
                  fldName = fields.Add(fldName, fldType, false);
                  Console.WriteLine("Created {0} site column.", fldName);

                  // Link the content type to the field.
                  SPField field = fields.GetField(fldName);
                  SPFieldLink fieldLink = new SPFieldLink(field);
                  ct.FieldLinks.Add(fieldLink);
                  Console.WriteLine(
                            "Linked {0} content type to {1} column.",
                             ct.Name, field.InternalName);

                  // Commit changes to the database.
                  ct.Update();

                  // Create a list.
                  SPListCollection lists = web.Lists;
                  Guid listID = lists.Add(lstName, lstDesc, lstType);
                  SPList list = lists[listID];
                  list.OnQuickLaunch = true;
                  list.Update();
                  Console.WriteLine("Created {0} list.", list.Title);

                  // Apply the new content type to the list.
                  list.ContentTypesEnabled = true;
                  if (list.IsContentTypeAllowed(ct))
                  {
                     // Add the new content type.
                     SPContentType lstCT = list.ContentTypes.Add(ct);
                     // Remove the default content type.
                     list.ContentTypes[0].Delete();
                     // Commit changes to the list.
                     list.Update();
                     Console.WriteLine("Applied {0} content type to {1} list.",
                                        lstCT.Name, list.Title);
                  }
                  else
                  {
                     Console.WriteLine("{0} list does not allow {1} content type.",
                                        list.Title, ct.Name);
                  }

               }
            }
         }
         Console.Write("\nPress ENTER to continue...");
         Console.ReadLine();
      }

      // Checks for duplicate content type, field, and list names.
      static bool ValidNames(SPWeb web)
      {
         bool valid = true;

         // Duplicate content type name?
         if (web.AvailableContentTypes[ctName] != null)
         {
            valid = false;
            Console.WriteLine("Duplicate content type name.");
         }

         // Invalid characters in content type name?
         try
         {
            SPContentType.ValidateName(ctName);
         }
         catch (SPException ex)
         {
            Console.WriteLine("Invalid character in content type name.");
         }


         // Duplicate field name?
         if (web.Fields.ContainsField(fldName))
         {
            valid = false;
            Console.WriteLine("Duplicate field name.");
         }

         // Duplicate list name?
         try
         {
            SPList list = web.Lists[lstName]; // Exception if not found
            valid = false;
            Console.WriteLine("Duplicate list name.");
         }
         catch (ArgumentException ex)
         {
            // List name does not exist.
         }

         return valid;
      }
   }
}

Потокобезопасность

Любые общедоступные элементы static (Shared в Visual Basic) этого типа являются потокобезопасными. Не гарантируется, что любые элементы экземпляров потокобезопасны.

См. также

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

Элементы SPContentType

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

Другие ресурсы

Introduction to Content Types

Site and List Content Types

Base Content Type Hierarchy