Создание типов контента SharePoint с помощью CSOM
Пример Core.SPD можно использовать для создания столбцов сайта и типов контента, а также связывания их между собой программным способом.
Вы также можете использовать API-интерфейсы SharePoint CSOM, доступные в пакете SDK клиентских компонентов SharePoint Server 2013, для добавления определенного идентификатора типа контента и локализации типов контента, списков и названий сайтов.
Подготовка
Чтобы приступить к работе, скачайте пример Core.SPD из проекта Office 365 Developer Patterns and Practices (Шаблоны и методики разработки для Office 365) на портале GitHub.
Примечание.
Код, приведенный в этой статье, предоставляется "как есть" без какой-либо явной или подразумеваемой гарантии, включая подразумеваемые гарантии пригодности для какой-либо цели, для продажи или гарантии отсутствия нарушения прав иных правообладателей.
Создание типов контента и столбцов сайта
В следующем примере кода показано, как создать тип контента с помощью класса ContentTypeCreationInformation, включая задание идентификатора.
ContentTypeCollection contentTypes = web.ContentTypes;
cc.Load(contentTypes);
cc.ExecuteQuery();
foreach (var item in contentTypes)
{
if (item.StringId == "0x0101009189AB5D3D2647B580F011DA2F356FB2")
return;
}
// Create a Content Type Information object.
ContentTypeCreationInformation newCt = new ContentTypeCreationInformation();
// Set the name for the content type.
newCt.Name = "Contoso Document";
// Inherit from oob document - 0x0101 and assign.
newCt.Id = "0x0101009189AB5D3D2647B580F011DA2F356FB2";
// Set content type to be available from specific group.
newCt.Group = "Contoso Content Types";
// Create the content type.
ContentType myContentType = contentTypes.Add(newCt);
cc.ExecuteQuery();
Using AddFieldAsXml you can add fields to the FieldCollection of a site collection:
FieldCollection fields = web.Fields;
cc.Load(fields);
cc.ExecuteQuery();
string FieldAsXML = @"<Field ID='{4F34B2ED-9CFF-4900-B091-4C0033F89944}' Name='ContosoString' DisplayName='Contoso String' Type='Text' Hidden='False' Group='Contoso Site Columns' Description='Contoso Text Field' />";
Field fld = fields.AddFieldAsXml(FieldAsXML, true, AddFieldOptions.DefaultValue);
cc.Load(fields);
cc.Load(fld);
cc.ExecuteQuery();
Свяжите поля с типом контента с помощью классов FieldLinkCollection и FieldLinkCreationInformation.
FieldCollection fields = web.Fields;
Field fld = fields.GetByInternalNameOrTitle("ContosoString");
cc.Load(fields);
cc.Load(fld);
cc.ExecuteQuery();
FieldLinkCollection refFields = myContentType.FieldLinks;
cc.Load(refFields);
cc.ExecuteQuery();
foreach (var item in refFields)
{
if (item.Name == "ContosoString")
return;
}
FieldLinkCreationInformation link = new FieldLinkCreationInformation();
link.Field = fld;
myContentType.FieldLinks.Add(link);
myContentType.Update(true);
cc.ExecuteQuery();
Локализации типов контента, списков и названий сайтов
Используйте следующий код для локализации названия сайта и его описания.
web.TitleResource.SetValueForUICulture("fi-FI", "Kielikäännä minut");
web.DescriptionResource.SetValueForUICulture("fi-FI", "Kielikäännetty saitti");
Для списка используется тот же подход, что и для сайта.
list.TitleResource.SetValueForUICulture("fi-FI", "Kielikäännä minut");
list.DescriptionResource.SetValueForUICulture("fi-FI", "Tämä esimerkki näyttää miten voit kielikääntää listoja.");
Для типов контента можно локализовать имя и описание. Для полей можно локализовать название и описание.
myContentType.NameResource.SetValueForUICulture("fi-FI", "Contoso Dokumentti");
myContentType.DescriptionResource.SetValueForUICulture("fi-FI", "Tämä on geneerinen Contoso dokumentti.");
fld.TitleResource.SetValueForUICulture("fi-FI", "Contoso Teksti");
fld.DescriptionResource.SetValueForUICulture("fi-FI", "Tää on niiku Contoso metadatalle.");
Создание типов контента документов и столбцов сайта
В следующем примере показано, как создать тип контента документов, а затем связать с ним шаблон документа.
В этом примере в семейство веб-сайтов добавляется новый тип контента Contoso Document
. При создании документа с этим типом контента связывается настраиваемый шаблон.
ContentType ct = web.ContentTypes.GetById("0x0101009189AB5D3D2647B580F011DA2F356FB2");
cc.Load(ct); cc.ExecuteQuery();
string ctFolderServerRelativeURL = "_cts/" + ct.Name;
Folder ctFolder = web.GetFolderByServerRelativeUrl(ctFolderServerRelativeURL);
cc.Load(ctFolder);
cc.ExecuteQuery();
string path = @"C:\Data\Test Documents\Doc CT File.docx";
string fileName = System.IO.Path.GetFileName(path);
byte[] filecontent = System.IO.File.ReadAllBytes(path);
using (System.IO.FileStream fs = new System.IO.FileStream(path, System.IO.FileMode.Open))
{
FileCreationInformation newFile = new FileCreationInformation();
newFile.Content = filecontent;
newFile.Url = ctFolderServerRelativeURL + "/" + fileName;
Microsoft.SharePoint.Client.File uploadedFile = ctFolder.Files.Add(newFile);
cc.Load(uploadedFile);
cc.ExecuteQuery();
//Microsoft.SharePoint.Client.File.SaveBinaryDirect(clientContext, ctFolderServerRelativeURL + "/" + fileName, fs, true);
cc.Load(ct); cc.ExecuteQuery();
ct.DocumentTemplate = fileName;
ct.Update(false);
cc.Load(ct); cc.ExecuteQuery();
Console.WriteLine("Content type updates");
}