Error from SharePoint site: *** Index was outside the bounds of the array
18 novembre 2011 Un commentaire
Le probleme
L’indexation retourne des erreurs du type :
Error from SharePoint site: *** Index was outside the bounds of the array
Cause
Ces erreurs proviennent sur des documents ajoutés ou modifiés via du code personnalisé. Pour être plus précis cela n’arrive uniquement sur des documents avec des métadonnées gérées.
C’est la méthode d’enregistrement des « Fields » du type métadonnées gérées qui est en cause.
Vous trouverez sur Internet la méthode suivante :
TaxonomyWebTaggingControl taxCountry = new TaxonomyWebTaggingControl(); TaxonomyFieldValueCollection portfolioCountriesValues = new TaxonomyFieldValueCollection(String.Empty); portfolioCountriesValues.PopulateFromLabelGuidPairs(taxCountry.Text); item["CountryManagedMetadata"] = portfolioCountriesValues[0]; item.Update();
Le résultat semble concluant la métadonnée est bien visible dans les propriétés du document.
Mais lors du crawl (indexation) le document n’est pas correctement indexer. Voir erreur dans le paragraphe 1.
Correction
C’est la méthode d’enregistrement ci-dessus qui est en cause.
Voici la bonne marche à suivre :
TaxonomyWebTaggingControl taxCountry = new TaxonomyWebTaggingControl(); TaxonomySession taxonomySession = new TaxonomySession(objSPSite); TermStore termStore = taxonomySession.TermStores[0]; Group groupecoll = termStore.Groups["mytermstoregroup")]; TermSet countrytermset = groupecoll.TermSets["termsetCountry"]; TaxonomyFieldValueCollection portfolioCountriesValues = new TaxonomyFieldValueCollection(String.Empty); portfolioCountriesValues.PopulateFromLabelGuidPairs(taxCountry.Text); TaxonomyField taxField = item.Fields.GetFieldByInternalName("CountryManagedMetadata") as TaxonomyField; Term term = countrytermset.GetTerm(new Guid(portfolioCountriesValues[0].TermGuid)); taxField.SetFieldValue(item, term); item.Update();
Vous pouvez relancer une indexation complète, le document est maintenant correctement indexer.