I want to programmatically set the values of the Enterprise Keywords
Managed Metadata field. This field supports multiple values, but I can only get it to take one at a time.
I have the following method:
public void AddKeywords(SPListItem item, string keywordString)
{
TaxonomyField managedField = item.Fields.GetFieldByInternalName(Fields.Keywords) as TaxonomyField;
if (managedField != null)
{
TaxonomySession session = new TaxonomySession(item.Web.Site, false);
TermStore termStore = session.TermStores[managedField.SspId];
TermSet termSet = termStore.GetTermSet(managedField.TermSetId);
string[] keywords = keywordString.Split(',').Select(s => s.Trim()).ToArray();
foreach (string keyword in keywords)
{
Term keywordTerm;
if (!termSet.Terms.Any(t => t.Name == keyword))
{
keywordTerm = termSet.CreateTerm(keyword, CultureInfo.CurrentCulture.LCID);
termStore.CommitAll();
}
else
{
keywordTerm = termSet.Terms[keyword];
}
managedField.SetFieldValue(item, keywordTerm);
}
}
}
After this is executed, only the last keyword is set at the value, overwriting any previous values on this field.
How can I set multiple values to the Enterprise Keywords
Managed Metadata Field?