Програмно създайте тип съдържание на SharePoint 2010, като използвате XML дефиниционния файл

Има ли някакъв начин за програмно създаване на тип съдържание на SharePoint 2010 с помощта на файл с XML дефиниция? SPFields могат да се добавят по следния начин:

SPContext.Current.Web.Fields.AddFieldAsXml("<xml />");

Има ли подобен начин за програмно добавяне на типове съдържание към колекция от сайтове/сайт?


person Marcus Blomberg    schedule 28.12.2011    source източник


Отговори (2)


Можете програмно да създавате/добавяте типове съдържание, но не и да използвате XML дефиниция (доколкото ми е известно). Трябва да го конструирате, да го добавите към колекция от типове съдържание и ръчно да добавите вашите препратки към полета към колекцията от връзки към полета.

Груб пример би бил:

using (SPSite site = new SPSite("http://localhost"))
{
    using (SPWeb web = site.OpenWeb())
    {
        SPContentType contentType = new SPContentType(web.ContentTypes["Document"], web.ContentTypes, "Financial Document");
        web.ContentTypes.Add(contentType);
        contentType.Group = "Financial Content Types";
        contentType.Description = "Base financial content type";
        contentType.FieldLinks.Add(new SPFieldLink(web.Fields.GetField("OrderDate")));
        contentType.FieldLinks.Add(new SPFieldLink(web.Fields.GetField("Amount")));
        contentType.Update();
    }
}

По този начин обаче не можете да контролирате идентификаторите на типа съдържание. Предпочитам да използвам функции според отговора на Грег Енслоу.

person Nigel Whatling    schedule 29.12.2011

Най-често срещаният начин е да използвате дефиниция на функция и след това да активирате функцията за вашата колекция от сайтове. XML файлът за функцията ще изглежда по следния начин:

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
   <!-- Parent ContentType: Document (0x0101) -->
  <ContentType ID="0x0101000728167cd9c94899925ba69c4af6743e"
               Name="Financial Document"
               Group="Financial Content Types"
               Description="Base financial content type"
               Version="0">
    <FieldRefs>
      <FieldRef ID="{1511BF28-A787-4061-B2E1-71F64CC93FD5}" Name="OrderDate" DisplayName="Date" Required="FALSE"/>
      <FieldRef ID="{060E50AC-E9C1-4D3C-B1F9-DE0BCAC300F6}" Name="Amount" DisplayName="Amount" Required="FALSE"/>
    </FieldRefs>
  </ContentType>
</Elements>

Вижте пълната извадка на http://msdn.microsoft.com/en-us/library/ms463449.aspx.

Имаше ли конкретна причина да се опитвате да използвате обектния модел вместо това?

person Greg Enslow    schedule 29.12.2011
comment
Исках да го направя в манипулатора на събития FeatureUpgrading за моята функция, заедно с останалите действия за надграждане (за да се съобразят с практиките, използвани в текущия проект), вместо да използвам елемента ApplyElementManifests. - person Marcus Blomberg; 29.12.2011