Как показать правильный элемент управления таксономией в EditModePanel SharePoint 2010?

В нашей сборке 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);
        }

person Andy Todd    schedule 10.02.2011    source источник


Ответы (1)


Для этого следует использовать TaxonomyFieldControl:

<%@ Register Tagprefix="Taxonomy" Namespace="Microsoft.SharePoint.Taxonomy" Assembly="Microsoft.SharePoint.Taxonomy, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>

<Taxonomy:TaxonomyFieldControl FieldName="My Field Name" runat="server" id="myField"/>

person Wictor Wilen MCA MCM MVP    schedule 11.02.2011
comment
Я изменил макет страницы, чтобы использовать TaxonomyFieldControl, но он отключен / затенен, а нажатие на значок тега ничего не делает? - person Andy Todd; 11.02.2011
comment
Кажется, что - я добавил код своего приемника событий в исходный пост. Я прошел через это в отладчике, и это не ошибка. - person Andy Todd; 14.02.2011
comment
Теперь он у меня работает - я удалил свой сайт и воссоздал его, что, очевидно, обновило столбцы библиотеки. Единственная загвоздка в том, что столбец MM не добавляется автоматически к столбцам библиотеки, мне приходится добавлять его вручную. - person Andy Todd; 15.02.2011