2011-11-30 76 views
2

在sharePoint 2010中,我想要設置文檔字段的分類標準值。該領域可以採取多種分類術語。如何將術語添加到TermCollection(分類法字段)

TaxonomyField taxoField = file.Item.Fields.GetFieldByInternalName(entry.Key) 
       as TaxonomyField; 

    TaxonomySession taxoSession = new TaxonomySession(web.Site); 

    TermStore store = taxoSession.TermStores[taxoField.SspId]; 

    TermSet termSet = store.GetTermSet(taxoField.TermSetId); 

    if (taxoField.AllowMultipleValues) 
    { 
     string[] taxoValues = entry.Value.Split(';'); 

     TermCollection taxoTerms = termSet.GetTerms(taxoValues[0], true); 

     for (int j = 1; j < taxoValues.Length; j++) 
     { 
      TermCollection terms = termSet.GetTerms(taxoValues[j], true); 

      if (terms.Count > 0) 
      { 
       taxoTerms = (TermCollection)taxoTerms.Concat(terms); 
      } 
     } 

     taxoField.SetFieldValue(file.Item, taxoTerms); 
    } 

你知道我怎麼可以添加條款,我TermCollection對象,所以我可以保存在該領域的長期價值:

因爲taxoTerms.Concat(terms)TermCollection類轉換失敗,我做了錯誤的方式?

謝謝。

回答

2

,我發現我的解決方案。這是它:

TaxonomyField taxoField = 
    file.Item.Fields.GetFieldByInternalName(entry.Key) as TaxonomyField; 

TaxonomySession taxoSession = new TaxonomySession(web.Site); 

TermStore store = taxoSession.TermStores[taxoField.SspId]; 

TermSet termSet = store.GetTermSet(taxoField.TermSetId); 

if (taxoField.AllowMultipleValues) 
{ 
    string[] taxoValues = entry.Value.Split(';'); 

    TermCollection terms = termSet.GetAllTerms(); 

    List<string> taxonomyValueList = taxoValues.ToList<string>(); 

    TaxonomyFieldValueCollection fieldValues = new TaxonomyFieldValueCollection(taxoField); 

    foreach (Term term in terms) 
    { 
     if (taxonomyValueList.Contains(term.Name)) 
     { 
      TaxonomyFieldValue fieldValue = new TaxonomyFieldValue(taxoField); 

      fieldValue.TermGuid = term.Id.ToString(); 
      fieldValue.Label = term.Name; 
      fieldValues.Add(fieldValue); 
     } 
    } 

    taxoField.SetFieldValue(file.Item, fieldValues); 
} 

希望它可以幫助別人。

1

下面是一個可以工作的例子:

var item = file.Item; 
var taxonomyField = item.Fields.GetFieldByInternalName(entry.Key); 
var values = new TaxonomyFieldValueCollection(taxonomyField); 
values.PopulateFromLabelGuidPairs(entry.Value); 
item[entry.Key] = values; 
item.Update(); 

我沒有測試它的生命系統上,因此可能有一些額外的工作,但我希望你得到的總體思路。 entry.Value字符串中的值必須包含|和;分開的標籤列表。如果標籤不存在,則必須先將其創建並獲取其標識,然後才能將其保存到該項目中。

HTH Vojta開發

+0

thanx爲您的主張。我增加了另一種方式來完成這項工作。 – Dino

相關問題