private static Field CreateTaxonomyFieldInternal(this List list, Guid id, string internalName, string displayName, string group, TaxonomyItem taxonomyItem, bool multiValue) { internalName.ValidateNotNullOrEmpty("internalName"); displayName.ValidateNotNullOrEmpty("displayName"); taxonomyItem.ValidateNotNullOrEmpty("taxonomyItem"); try { List <KeyValuePair <string, string> > additionalAttributes = new List <KeyValuePair <string, string> >(); additionalAttributes.Add(new KeyValuePair <string, string>("ShowField", "Term1033")); FieldCreationInformation fieldCI = new FieldCreationInformation(multiValue ? "TaxonomyFieldTypeMulti" : "TaxonomyFieldType") { Id = id, InternalName = internalName, AddToDefaultView = true, DisplayName = displayName, Group = group, AdditionalAttributes = additionalAttributes }; var _field = list.CreateField(fieldCI); WireUpTaxonomyFieldInternal(_field, taxonomyItem, multiValue); _field.Update(); list.Context.ExecuteQuery(); return(_field); } catch (Exception) { ///If there is an exception the hidden field might be present FieldCollection _fields = list.Fields; list.Context.Load(_fields, fc => fc.Include(f => f.Id, f => f.InternalName)); list.Context.ExecuteQuery(); var _hiddenField = id.ToString().Replace("-", ""); var _field = _fields.FirstOrDefault(f => f.InternalName == _hiddenField); if (_field != null) { _field.Hidden = false; // Cannot delete a hidden column _field.Update(); _field.DeleteObject(); list.Context.ExecuteQuery(); } throw; } }
/// <summary> /// Sets the default value for a managed metadata field /// </summary> /// <param name="field">Field to be wired up</param> /// <param name="taxonomyItem">Taxonomy TermSet or Term</param> /// <param name="defaultValue">default value for the field</param> public static void SetTaxonomyFieldDefaultValue(this Field field, TaxonomyItem taxonomyItem, string defaultValue) { if (string.IsNullOrEmpty(defaultValue)) { throw new ArgumentException("defaultValue"); } var clientContext = field.Context as ClientContext; taxonomyItem.ValidateNotNullOrEmpty("taxonomyItem"); var anchorTerm = taxonomyItem as Term; if (anchorTerm != default(Term) && !anchorTerm.IsPropertyAvailable("TermSet")) { clientContext.Load(anchorTerm.TermSet); clientContext.ExecuteQueryRetry(); } var termSet = taxonomyItem is Term ? anchorTerm.TermSet : taxonomyItem as TermSet; if (termSet == default(TermSet)) { throw new ArgumentException("Bound TaxonomyItem must be either a TermSet or a Term"); } // set the SSP ID and Term Set ID on the taxonomy field var taxField = clientContext.CastTo<TaxonomyField>(field); if (!termSet.IsPropertyAvailable("Terms")) { clientContext.Load(termSet.Terms); clientContext.ExecuteQueryRetry(); } Term defaultValTerm = termSet.Terms.GetByName(defaultValue); if (defaultValTerm != null) { clientContext.Load(defaultValTerm); clientContext.ExecuteQueryRetry(); taxField.DefaultValue = string.Format("-1;#{0}{1}{2}", defaultValTerm.Name, TaxonomyGuidLabelDelimiter, defaultValTerm.Id); taxField.Update(); clientContext.ExecuteQueryRetry(); } }
/// <summary> /// Wires up MMS field to the specified term set or term. /// </summary> /// <param name="field">Field to be wired up</param> /// <param name="taxonomyItem">Taxonomy TermSet or Term</param> /// <param name="multiValue">Allow multiple selection</param> private static void WireUpTaxonomyFieldInternal(Field field, TaxonomyItem taxonomyItem, bool multiValue) { var clientContext = field.Context as ClientContext; taxonomyItem.ValidateNotNullOrEmpty("taxonomyItem"); var anchorTerm = taxonomyItem as Term; if (anchorTerm != default(Term) && !anchorTerm.IsPropertyAvailable("TermSet")) { clientContext.Load(anchorTerm.TermSet); clientContext.ExecuteQueryRetry(); } var termSet = taxonomyItem is Term ? anchorTerm.TermSet : taxonomyItem as TermSet; if (termSet == default(TermSet)) throw new ArgumentException("Bound TaxonomyItem must be either a TermSet or a Term"); if (!termSet.IsPropertyAvailable("TermStore")) { clientContext.Load(termSet.TermStore); clientContext.ExecuteQueryRetry(); } // set the SSP ID and Term Set ID on the taxonomy field var taxField = clientContext.CastTo<TaxonomyField>(field); taxField.SspId = termSet.TermStore.Id; taxField.TermSetId = termSet.Id; if (anchorTerm != default(Term)) { taxField.AnchorId = anchorTerm.Id; } taxField.AllowMultipleValues = multiValue; taxField.Update(); clientContext.ExecuteQueryRetry(); }
/// <summary> /// Sets the default value for a managed metadata field /// </summary> /// <param name="field">Field to be wired up</param> /// <param name="taxonomyItem">Taxonomy TermSet or Term</param> /// <param name="defaultValue">default value for the field</param> public static void SetTaxonomyFieldDefaultValue(this Field field, TaxonomyItem taxonomyItem, string defaultValue) { if (string.IsNullOrEmpty(defaultValue)) { throw new ArgumentException("defaultValue"); } var clientContext = field.Context as ClientContext; taxonomyItem.ValidateNotNullOrEmpty("taxonomyItem"); var anchorTerm = taxonomyItem as Term; if (anchorTerm != default(Term) && !anchorTerm.IsPropertyAvailable("TermSet")) { clientContext.Load(anchorTerm.TermSet); clientContext.ExecuteQueryRetry(); } var termSet = taxonomyItem is Term ? anchorTerm.TermSet : taxonomyItem as TermSet; if (termSet == default(TermSet)) { throw new ArgumentException("Bound TaxonomyItem must be either a TermSet or a Term"); } // set the SSP ID and Term Set ID on the taxonomy field var taxField = clientContext.CastTo<TaxonomyField>(field); if (!termSet.IsPropertyAvailable("Terms")) { clientContext.Load(termSet.Terms); clientContext.ExecuteQueryRetry(); } Term defaultValTerm = termSet.Terms.GetByName(defaultValue); if (defaultValTerm != null) { clientContext.Load(defaultValTerm); clientContext.ExecuteQueryRetry(); TaxonomyFieldValue taxValue = new TaxonomyFieldValue(); taxValue.WssId = -1; taxValue.TermGuid = defaultValTerm.Id.ToString(); taxValue.Label = defaultValTerm.Name; //get validate string var validateValue = taxField.GetValidatedString(taxValue); field.Context.ExecuteQueryRetry(); taxField.DefaultValue = validateValue.Value; taxField.Update(); clientContext.ExecuteQueryRetry(); } }
private static Field CreateTaxonomyFieldInternal(this Web web, Guid id, string internalName, string displayName, string group, TaxonomyItem taxonomyItem, bool multiValue) { internalName.ValidateNotNullOrEmpty("internalName"); displayName.ValidateNotNullOrEmpty("displayName"); taxonomyItem.ValidateNotNullOrEmpty("taxonomyItem"); try { List<KeyValuePair<string, string>> additionalAttributes = new List<KeyValuePair<string, string>>(); additionalAttributes.Add(new KeyValuePair<string, string>("ShowField", "Term1033")); FieldCreationInformation fieldCI = new FieldCreationInformation(multiValue ? "TaxonomyFieldTypeMulti" : "TaxonomyFieldType") { Id = id, InternalName = internalName, AddToDefaultView = true, DisplayName = displayName, Group = group, AdditionalAttributes = additionalAttributes }; var _field = web.CreateField(fieldCI); WireUpTaxonomyFieldInternal(_field, taxonomyItem, multiValue); _field.Update(); web.Context.ExecuteQuery(); return _field; } catch (Exception) { ///If there is an exception the hidden field might be present FieldCollection _fields = web.Fields; web.Context.Load(_fields, fc => fc.Include(f => f.Id, f => f.InternalName)); web.Context.ExecuteQuery(); var _hiddenField = id.ToString().Replace("-", ""); var _field = _fields.FirstOrDefault(f => f.InternalName == _hiddenField); if (_field != null) { _field.DeleteObject(); web.Context.ExecuteQuery(); } throw; } }