Программно установите TaxonomyField на элементе списка

Ситуация:

У меня есть набор Условий в Термине Хранилище и список, который использует их.

Много терминов еще не было использовано и еще не доступно в TaxonomyHiddenList. Если они еще не там, у них нет идентификатора, и я не могу добавить их к элементу списка.

Существует метод GetWSSIdOfTerm на Microsoft.SharePoint.Taxonomy.TaxonomyField это, как предполагается, возвращает идентификатор термина для определенного сайта.

Это отдает идентификаторы, если термин был уже использован и присутствует в TaxonomyHiddenList, но если это не затем 0, возвращается.

Там какой-либо путь состоит в том, чтобы программно добавить условия к TaxonomyHiddenList или вызвать его случай?

12
задан mjv 30 April 2010 в 15:45
поделиться

1 ответ

В MSDN вы можете узнать, как создать Term и добавить его в TermSet. Пример предоставлен из Описание класса TermSetItem . TermSet должен иметь метод CreateTerm (name, lcid), унаследованный от TermSetItem. Поэтому вы можете использовать его в приведенном ниже примере инструкции int catch, то есть:

catch(...)
{
   myTerm = termSet.CreateTerm(myTerm, 1030);
   termStore.CommitAll();
}

Что касается присвоения термина списку, этот код должен работать (я не уверен в названии поля «Теги», однако это легко узнать собственное внутреннее имя поля таксономии):

using (SPSite site = new SPSite("http://myUrl")) 
{
    using (SPWeb web = site.OpenWeb())
    {
        string tagsFieldName = "Tags";
        string myListName = "MyList";
        string myTermName = "myTerm";

        SPListItem myItem = web.Lists[myListName].GetItemById(1);
        TaxonomyField tagsField = (TaxonomyField) myList.Fields[tagsFieldName];
        TaxonomySession session = new TaxonomySession(site);
        TermStore termStore = session.TermStores[tagsField.SspId];
        TermSet termSet = termStore.GetTermSet(tagsField.TermSetId);
        Term myTerm = null;

        try
        {
            myTerm = termSet.Terms[myTermName];
        }
        catch (ArgumentOutOfRangeException)
        {
            // ?
        }

        string termString = String.Concat(myTerm.GetDefaultLabel(1033),
                                            TaxonomyField.TaxonomyGuidLabelDelimiter, myTerm.Id);

        if (tagsField.AllowMultipleValues)
        {
            TaxonomyFieldValueCollection tagsValues = new TaxonomyFieldValueCollection(tagsField);
            tagsValues.PopulateFromLabelGuidPairs(
                String.Join(TaxonomyField.TaxonomyMultipleTermDelimiter.ToString(),
                            new[] { termString }));
            myItem[tagsFieldName] = tagsValues;

        }
        else
        {
            TaxonomyFieldValue tagValue = new TaxonomyFieldValue(termString);
            myItem[tagsFieldName] = tagValue;
        }
        myItem.Update();
    }
}
5
ответ дан 2 December 2019 в 18:18
поделиться