Добавьте поле поиска к типу контента в sharepoint
Как я могу добавить поле поиска к типу контента в sharepoint, используя определение xml? (Я получаю ошибки).
Что следует отметить: - Список поиска будет существовать при добавлении типа контента в библиотеку документов. - Список поиска всегда будет иметь одинаковое имя. - В списке поиска есть пробел в имени.
Вот что я добавил в xml:
<Field ID="{GUID}"
Type="Lookup"
List="$Resources:core,lists_Folder;/List%20Name"
ShowField="Title"
Name="MyLookupFieldName"
DisplayName="MyLookupFieldName"
StaticName="MyLookupFieldName"
Hidden="FALSE"
Required="FALSE"
Sealed="TRUE"
>
Когда я затем программно добавляю тип контента в библиотеку документов, я получаю исключение (без полезной информации), и в журнал sharepoint заносится следующее:
18.08.2009 17:13:39.50 w3wp.exe (0x08B8) 0x11B0 База данных Windows SharePoint Services 6f8g Неожиданный непредвиденный сбой выполнения запроса, код ошибки 8114. Дополнительная информация об ошибках из SQL Server приведена ниже. "Ошибка преобразования типа данных nvarchar в uniqueidentifier." Текст запроса (если имеется): "{?= Call proc_GetListMetaDataAndEventReceivers(?,?,?,?,?,?)}"
3 ответа
К счастью, в SharePoint 2010 вы можете декларативно сделать это, установив все необходимые свойства, как показано в следующем рабочем примере.
<Field Type="Lookup" DisplayName="Link Type" Description="Represents link type."
Required="TRUE" EnforceUniqueValues="FALSE" List="Lists/Links Types" WebId="~sitecollection"
Overwrite="TRUE" PrependId="TRUE" ShowField="Title" UnlimitedLengthInDocumentLibrary="FALSE"
Group="Research Links Columns" ID="{a15e9fa2-4ea0-41f1-a583-b21d53cf72d3}"
SourceID="{30650f6f-fbb8-4acc-a935-29745f5d3c59}" StaticName="Link_x0020_Type"
Name="Link_x0020_Type" Hidden="FALSE" ReadOnly="FALSE"></Field>
Важно установить для WebId значение "~sitecollection" и установить для параметра Overwrite значение TRUE.
Больше информации
Проблема в том, что вам нужно ссылаться на GUID списка, а не на его заголовок. Поскольку вы, вероятно, не будете знать GUID списка, вы не сможете сделать это, не выполнив после этого некоторый пользовательский код.
Даже если вы не используете VSeWSS, последние шаги в посте dahlbyk связаны, чтобы показать вам, как это сделать. Крис О'Брайен решил создать проект CodePlex, который поможет вам, если вы не используете VSeWSS.
Итак, по какой-то причине я не смог получить определение поля xml для типа контента. Я узнал, как это сделать в коде. Решение, которое сработало для меня, состоит в том, чтобы не добавлять определение поля в XML, а добавить его в коде:
- Добавьте тип содержимого в список (в коде определения сайта или где-либо еще).
- Добавьте поиск по полю к указанному SPWeb (чтобы поле было веб-полем, а не полем сайта)
- Добавьте ссылку на новое поле в тип содержимого списка.
- Обновите тип контента.
Например:
SPContentType myContentType = myWeb.Site.RootWeb.ContentTypes["MyContentType "];
myLib.ContentTypes.Add(myContentType);
myContentType = myLib.ContentTypes["MyContentType "];
myWeb.Fields.AddLookup("MyLookupFieldName", myWeb.Lists["MyLookupListName"].ID, false);
SPFieldLink myFIeldLink = new SPFieldLink(myWeb.Fields["MyLookupFieldName"]);
myContentType.FieldLinks.Add(myFIeldLink);
myContentType.Update();