2009-07-09 6 views
0

Ich habe einen benutzerdefinierten Listenschablonentyp für SharePoint definiert. Ich installiere es mit VSeWSS 1.3 und alles scheint sich korrekt zu verhalten.Problem beim Hinzufügen eines Felds zu einem benutzerdefinierten Listentyp in SharePoint

Ich habe eine benutzerdefinierte Aktion hinzugefügt, die zusätzliche Spalten (SPFields) zur Liste hinzufügen wird. Jedes Mal, wenn dieser Code ausgeführt wird, wird jedoch die ArgumentException mit "Wert nicht im erwarteten Bereich" ausgelöst. Fehlermeldung. Dieses Verhalten scheint für benutzerdefinierte Typen spezifisch zu sein, wie in this blog post vorgeschlagen.

Hier der entsprechende Code ist (thisList ist eine Instanz meiner benutzerdefinierten Liste Vorlagentyp den Browser interace erstellt), die ein Feld mit dem SPFieldCollection von thisList hinzuzufügen versucht:

   SPFieldType fieldType = Format2SPFieldType(format); 
       SPField field = new SPField(thisList.Fields, fieldType.ToString(), fieldName); 
       thisList.Fields.Add(field); 

Die letzte Anweisung (thisList .Fields.Add (Feld)) führt die folgende Ausnahme:

Message "Value does not fall within the expected range." 

    at Microsoft.SharePoint.SPFieldCollection.GetFieldByInternalName(String strName, Boolean bThrowException) 
    at Microsoft.SharePoint.SPFieldCollection.GetFieldByInternalName(String strName) 
    at Microsoft.SharePoint.SPFieldCollection.AddFieldAsXmlInternal(String schemaXml, Boolean addToDefaultView, SPAddFieldOptions op) 
    at Microsoft.SharePoint.SPFieldCollection.AddFieldAsXml(String schemaXml, Boolean addToDefaultView, SPAddFieldOptions op) 
    at Microsoft.SharePoint.SPFieldCollection.Add(SPField field) 

das gleiche Code ausführt nur in Ordnung, wenn das SPList Element die Basisliste ist (integrierte benutzerdefinierte Liste).

Gibt es Felder, die explizit im CAML und mit Hilfe der AddFieldAsXml() -Methode direkt machen diesen Code Arbeit mit benutzerdefinierter Liste Template-Typen festgelegt werden müssen?

Update: Ich sollte auch erwähnen, dass die Felder in einigen Fällen tatsächlich erstellt werden, obwohl der Aufruf eine Ausnahme auslöst!

Antwort

1

Es stellte sich heraus, dass diese verursacht wurde, weil Aufruf der SPList Objekt in einen Zustand thisList.SchemaXML zu setzen, dass ich nicht in der Lage war zu erholen! Eine neue Referenz auf dieselbe SharePoint-Liste erhalten, z. B. SPList newList = thisList.ParentWeb.Lists [thisList.ID] löste das Problem!

0

Was ist der Feldtyp, den Sie hinzufügen möchten? Ist das ein internes Feld oder ein benutzerdefinierter Feldtyp, was liefert diese Funktion Format2SPFieldType? Wenn es ein Inbuilt Feld ist, können Sie versuchen Sie, mit dem

thisList.Fields.Add("DisplayName", SPFieldType.Integer, false); 
+0

Ich versuche, normale Typen wie die oben erwähnte hinzuzufügen. Die Funktion Format2SPFieldType gibt zurück und SPFieldType (es ist eine switch-Anweisung, die eine Formatzeichenfolge einem SPFieldType zuordnet). Bis jetzt habe ich SPFieldType.Text und SPFieldType.Boolean versucht. –

Verwandte Themen