Frage

Ich habe einen benutzerdefinierte Liste Vorlagentyp für Sharepoint definiert. Ich installiere es mit VSeWSS 1.3 und alles scheint richtig zu verhalten.

Ich habe eine benutzerdefinierte Aktion hinzugefügt, die wird hinzufügen, um zusätzliche Spalten (SPFields) in die Liste . jedes Mal, wenn Code führt sie jedoch wirft und Argument mit einem ‚Wert nicht im erwarteten Bereich.‘ Fehlermeldung. Dieses Verhalten scheint benutzerdefinierte Typen spezifisch zu sein, wie in dieses Blog-Post .

Hier ist der entsprechende Code (thisList ist eine Instanz meines benutzerdefinierten Liste Vorlagentyp des 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 führt nur in Ordnung, wenn das SPList Element der Basislistentyp (integrierte benutzerdefinierte Liste) ist.

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

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

!
War es hilfreich?

Lösung

Es stellte sich heraus, dass dies verursacht wurde weil Aufruf der SPList Objekt in einen Zustand thisList.SchemaXML zu setzen, dass ich nicht in der Lage war zu erholen! Wie Sie einen neuen Verweis auf derselben Sharepoint-Liste, zum Beispiel, SPList newList = thisList.ParentWeb.Lists [thisList.ID] löste das Problem!

Andere Tipps

Was ist die Art von Feld, das Sie hinzufügen möchten? ist, dass ein internes Feld oder einer benutzerdefinierten Feldtyp, was diese Funktion zurückgibt Format2SPFieldType? Wenn es ein Inbuilt Feld ist, können Sie versuchen Sie mit der

thisList.Fields.Add("DisplayName", SPFieldType.Integer, false);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top