Ситуация:
У меня есть набор Условий в Термине Хранилище и список, который использует их.
Много терминов еще не было использовано и еще не доступно в TaxonomyHiddenList. Если они еще не там, у них нет идентификатора, и я не могу добавить их к элементу списка.
Существует метод GetWSSIdOfTerm
на Microsoft.SharePoint.Taxonomy.TaxonomyField
это, как предполагается, возвращает идентификатор термина для определенного сайта.
Это отдает идентификаторы, если термин был уже использован и присутствует в TaxonomyHiddenList, но если это не затем 0, возвращается.
Там какой-либо путь состоит в том, чтобы программно добавить условия к TaxonomyHiddenList или вызвать его случай?
В 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();
}
}