0

SharePointのカスタムリストテンプレートタイプを定義しました。VSeWSS 1.3を使用してインストールしましたが、すべてが正しく動作しているようです。

リストに列(SPFields)を追加するカスタムアクションを追加しました。ただし、そのコードが実行されるたびに、「期待される範囲外の値」でArgumentExceptionがスローされます。エラーメッセージ。このブログ投稿で提案されているように、この動作はカスタムタイプに固有のようです。

thisListのSPFieldCollectionにフィールドを追加しようとする関連コード(thisListは、ブラウザーインターフェイスを使用して作成されたカスタムリストテンプレートタイプのインスタンスです)は次のとおりです。

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

最後のステートメント(thisList.Fields.Add(field))は、次の例外をスローします。

   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)

SPListアイテムがベースリストタイプ(組み込みのカスタムリスト)の場合、この同じコードは問題なく実行されます。

このコードをカスタムリストテンプレートタイプで機能させるために、CAMLで明示的に設定し、 AddFieldAsXml()メソッドを直接使用する必要があるフィールドはありますか?

更新:呼び出しが例外をスローした場合でも、フィールドが実際に作成される場合があることにも言及する必要があります。

4

2 に答える 2

1

これは、thisList.SchemaXMLを呼び出すと、SPListオブジェクトが回復できない状態になったことが原因であることがわかりました。同じSharePointリストへの新しい参照を取得します(例:SPList newList = thisList.ParentWeb.Lists [thisList.ID])。

于 2009-07-10T23:33:44.610 に答える
0

追加しようとしているフィールドのタイプは何ですか?それは内部フィールドまたはカスタムフィールドタイプですか、この関数Format2SPFieldTypeは何を返しますか?組み込みフィールドの場合は、

thisList.Fields.Add("DisplayName", SPFieldType.Integer, false);
于 2009-07-10T07:27:12.720 に答える