2010-04-30 16 views
11

पर एक TaxonomyField सेट:प्रोग्राम स्थिति किसी सूची आइटम

मैं टर्म स्टोर में नियम का एक समूह है और उन्हें का उपयोग करता है एक सूची है।

शर्तों का एक बहुत अभी तक उपयोग नहीं किए गए हैं, और TaxonomyHiddenList में अभी तक उपलब्ध नहीं हैं। यदि वे अभी तक नहीं हैं तो उनके पास कोई आईडी नहीं है, और मैं उन्हें सूची आइटम में नहीं जोड़ सकता।

GetWSSIdOfTerm पर एक विधि Microsoft.SharePoint.Taxonomy.TaxonomyField पर एक विशिष्ट साइट के लिए एक शब्द की आईडी वापस करने के लिए माना जाता है।

इस आईडी वापस देता है अगर अवधि पहले से ही इस्तेमाल किया गया है और TaxonomyHiddenList में मौजूद है, लेकिन अगर यह तो नहीं है 0 लौटाया जाता है।

वहाँ किसी भी तरह से प्रोग्राम के रूप में TaxonomyHiddenList के शब्दों को जोड़ने या ऐसा हो मजबूर करने के लिए है?

उत्तर

5

एमएसडीएन पर आप टर्म कैसे बना सकते हैं और इसे टर्मसेट में जोड़ सकते हैं। नमूना TermSetItem class description से प्रदान किया गया है। टर्मसेट में TermSetItem से विरासत में बनाई गई CreateTerm (नाम, lcid) विधि होनी चाहिए। ,

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(); 
    } 
} 
+0

tagsField.SetFieldValue (myItem से पता चला की तरह , myTerm); myItem.Update() यह सबसे साफ तरीका है। यदि शेयरपॉइंट टीम ने अपने स्ट्रिंग प्रारूपों को बदल दिया है, तो उपरोक्त को तोड़ने की क्षमता है – statto

8

TaxonomyFieldValue tagValue = new TaxonomyFieldValue(termString); 
myItem[tagsFieldName] = tagValue;" 

का उपयोग न करें, क्योंकि आप त्रुटियों जब आप इस मद क्रॉल करना चाहते होंगे: वर्गीकरण क्षेत्र के समुचित आंतरिक नाम) पता लगाने के लिए आसान।

एक वर्गीकरण क्षेत्र में मान सेट के लिए, आप का उपयोग करने के लिए बस है:

tagsField.SetFieldValue(myItem , myTerm); 
myItem.Update();" 

सादर

7

उपयोग

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

के मामले में इन्स्टेन्शियशन TaxonomyFieldValue दौरान

TaxonomyFieldValue tagValue = new TaxonomyFieldValue(termString); 

अपवाद संदेश के साथ फेंक दिया जाएगा

मूल्य अपेक्षित सीमा में नहीं आती

इसके अतिरिक्त आपके अवधि स्ट्रिंग के निर्माण के लिए WssId प्रदान की है नीचे

// We don't know the WssId so default to -1 
     string termString = String.Concat("-1;#",myTerm.GetDefaultLabel(1033), 
                TaxonomyField.TaxonomyGuidLabelDelimiter, myTerm.Id); 
संबंधित मुद्दे