La définition de la valeur pour le champ Taxonomie produit La valeur ne se situe pas dans la plage attendue
-
10-12-2019 - |
Question
j'ai une coutume ASPX
page où l'utilisateur saisit les données et clique sur Enregistrer pour ajouter un nouvel élément à la liste.Le champ My Department
est un Managed Metadata field
(un seul choix).L'utilisateur définit la valeur de ce champ via TaxonomyWebTaggingControl
contrôle.Le problème se produit lorsque la valeur est censée être définie sur le nouvel élément de liste :
string departmentField = "My_x0020_Department"; //internal field name
SPListItem item = myList.Items.Add();
item[SPBuiltInFieldId.Title] = this.documentTitleTextBox.Text;
item[departmentField] = this.DepartmentTaxonomy.Text; //error fires here
item.Update();
L'erreur est ArgumentException: Value does not fall within the expected range.
Si l'utilisateur ne précise pas la valeur du département, c'est-à-diresi this.DepartmentTaxonomy.Text = string.Empty;
alors il n'y a pas d'erreur.
La solution 2
OK, j'ai trouvé la solution au problème, mais pas la cause.Au lieu de simplement écrire la valeur sous forme de chaîne this.DepartmentTaxonomy.Text
, j'ai vraiment dû faire un effort supplémentaire pour créer manuellement TaxonomyFieldValue
objet.
Ainsi, l’obtention de TaxonomyFieldValue se fait selon cette méthode :
public TaxonomyFieldValue GetTaxonomyValue(SPList list, string fieldName, string fieldValue)
{
string[] fieldValueParts;
TaxonomyField taxonomyField;
TaxonomyFieldValue taxonomyFieldValue;
fieldValueParts = fieldValue.Split(TaxonomyField.TaxonomyGuidLabelDelimiter);
taxonomyField = list.Fields[fieldName] as TaxonomyField;
taxonomyFieldValue = new TaxonomyFieldValue(taxonomyField);
taxonomyFieldValue.TermGuid = fieldValueParts[1];
taxonomyFieldValue.Label = fieldValueParts[0];
return taxonomyFieldValue;
}
Et voici comment j'ai utilisé cette méthode :
string departmentField = "My_x0020_Department"; //internal field name
SPListItem item = myList.Items.Add();
item[SPBuiltInFieldId.Title] = this.documentTitleTextBox.Text;
item[departmentField] = this.GetTaxonomyValue(myList, departmentField, this.DepartmentTaxonomy.Text);
item.Update();
Cela a résolu le problème.
Autres conseils
au lieu de
Item [Départementfield]= this.departmentTaxonomy.text;
essayer
Item [Départementfield]= this.DepartmentTaxonomy.label;