В нашей сборке SharePoint 2010 есть настраиваемый тип контента, который включает поле управляемых метаданных для ключевых слов.
Похоже, что поле развернуто нормально, потому что, если я редактирую элемент в списке, в котором оно находится, я получаю правильный элемент управления таксономией, и мои термины извлекаются из хранилища терминов.
Тем не мение; мы используем EditModePanel в PageLayout для элемента, чтобы разрешить редактирование элементов на сайте, и я не могу отобразить правильный элемент управления выбора таксономии.
Если я добавлю TaxonomyWebTaggingControl к макету страницы и жестко закодирую SSPId и т. Д., Тогда он заработает;
<TaxonomyControls:TaxonomyWebTaggingControl runat="server" SSPId="234234-234234-34341-343" TermSetId="234234-23342-34234-234-234"/>
Однако мы не можем жестко запрограммировать значения, поскольку хранилище терминов будет создано при развертывании сайта клиентом.
Когда мы создаем тип контента, у нас есть приемник событий, который связывает поле с правильным хранилищем / набором терминов, используя их имена, но я не понимаю, как получить поле в EditModePanel, чтобы получить / установить их.
Я действительно хочу что-то вроде:
<TaxonomyControls:TaxonomyWebTaggingControl runat="server" TermStore="My term store name" TermSet="Keywords"/>
Я что-то упускаю?
Мой приемник событий выглядит так:
try
{
SPSite site = ((SPWeb)properties.Feature.Parent).Site as SPSite;
Guid fieldId = new Guid("3211B052-5332-424C-A066-BBE21AEAB878");
if (site.RootWeb.Fields.Contains(fieldId))
{
TaxonomySession session = new TaxonomySession(site);
if (session.TermStores.Count != 0)
{
var termStore = session.TermStores["Managed Metadata Service"];
var group = termStore.Groups.GetByName("My Client");
var termSet = group.TermSets["Keywords"];
TaxonomyField field = site.RootWeb.Fields[fieldId] as TaxonomyField;
field.SspId = termSet.TermStore.Id;
field.TermSetId = termSet.Id;
field.AnchorId = Guid.Empty;
field.AllowMultipleValues = true;
field.TextField = fieldId;
field.TextField = new Guid("{574C5BCE-74E8-40C8-BE90-C9338135D491}");
field.Update();
Log.Logger.LogEvent("ContentType Activation", "Updated keywords field with MMS details");
}
}
}
catch (Exception ex)
{
Log.Logger.LogException(ex, "Content Type Activation", ex.Message);
}