SharePoint Suche – *** Index was outside the bounds of the array

Dieser Fehler im Suchprotokoll hat mich gute zwei Wochen lang beschäftigt. Vorweg gesagt: Es gibt einige Möglichkeiten, die dieses Verhalten hervorrufen. Daher ist es meist nicht ganz einfach die genaue Ursache des Problems zu finden.

In der Regel wird dieser Fehler in SharePoint 2010 durch die Verwendung von “Verwalteten Metadaten” ausgelöst. Microsoft ist sich der Problematik bewusst, es gibt aber bisher keinen offiziellen Hotfix auf Grund der Vielfältigkeit des Problems.

Ich möchte hier zwei Ursachen dokumentieren, durch die der Fehler bei mir reproduzierbar aufgetreten ist:

1. Leerzeichen in den Spaltennamen von “Verwalteten Metadatenfeldern”:

Dieser Blogeintrag beschreibt eine der häufigsten Fehlerursachen -> Managed Metadata Felder in Listen oder Dokumentbibliotheken in Kombination mit eigenen Inhaltstypen sollten keine Leerzeichen im Spaltennamen enthalten. Ansonsten kann es vorkommen, dass der Such-Crawler die entsprechenden SharePoint Elemente nicht korrekt in den Index aufnimmt bzw. die übergebenen Werte als korrupt interpretiert.

Workarounds:

1. betreffende Spalten löschen und neu anlegen
2. Wenn der erste Punkt nicht möglich ist bleibt nur der folgende Weg:

  • Dokument auschecken
  • Bearbeitungsdialog öffnen
  • Speichern ohne etwas zu ändern
  • Dokument wieder einchecken
  • Beim nächsten Crawl sollte der Fehler für das betreffende Dokument behoben sein

2. Dokumente werden progammatisch in die Dokumentbibliothek geladen (z.B. durch einen eigenen Upload-Dialog):

Hier habe ich feststellen müssen, dass der Crawler nur einen einzigen Weg akzeptiert, über den Werte in die betreffenden Spalten eines Elementes geschrieben werden können.

Folgende Möglichkeiten gibt es, bzw. werden häufig angewendet, um Werte in Spalten vom Typ “Verwaltete Metadaten” zu schreiben.

TaxonomyFieldValue setzen:

item["VerwalteteMetadatenSpalte"] =  TaxonomyFieldControl.GetTaxonomyValue(MyTaxonomyWebControl.Text);
item.Update();

!Dieses Setzen der Werte führt nach meinen Beobachtungen zu dem oben beschriebenen Fehler!

Besonders böse ist, dass die Werte mit der oben beschriebenen Methode offensichtlich korrekt gespeichert und auch beim nächsten Aufruf eines Formulars korrekt dargestellt werden. Der Crawler interpretiert diese Werte aber offensichtlich als korrupt und crawlt daraufhin diese Dokumente nicht mehr.

Stattdessen kann man eine alternative Methode nutzen, welche nicht dazu führt, dass der o.g. Fehler auftritt und somit die Felder korrekt interpretiert werden.
Hier ein Codebeispiel:

TaxonomyField taxField = (TaxonomyField)item.Fields.GetField("VerwalteteMetadatenSpalte"); TaxonomySession session = new TaxonomySession(SPContext.Current.Site); var termStore = session.TermStores["Termstore"]; var group = termStore.Groups["TermGroup"]; TermSet termSet = group.TermSets["Termset"]; Term term = termSet.GetTerm(new Guid("DisplayName")); taxField.SetFieldValue(item, term);
item.Update();

 

Desweiteren greift auch bei angepassten/custom Dialogen der o.g. Workaround:

  • Dokument auschecken
  • Bearbeitungsdialog öffnen
  • Speichern
  • Dokument einchecken

Ich persönlich gehe davon aus, dass SharePoint bei den Standarddialogen ebenfalls die Methode “taxField.SetFieldValue(…)” nutzt und dadurch der Fehler behoben wird.

Kommentar verfassen

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.