1

ページ ドキュメント ライブラリに表示されるフィールドをカスタマイズしています (サイト アクション -> すべてのサイト コンテンツ -> ページをクリックして表示されるテーブル)。

私よりも共有ポイントについて詳しい人から、機能のアクティブ化時にプログラムでデフォルトのビューから不要なフィールドを削除する必要があるかもしれないと提案されたので、非常に洗練されていないように感じるこのコードを書きました。解決策、また機能しません。

SPWeb web = properties.Feature.Parent as SPWeb;

        if (web != null)
        {
            SPList list = web.Lists["Pages"] as SPList;
            if (list != null)
            {
                foreach (SPField field in list.Fields)
                {
                    if (field.Title != "Type" &&
                        field.Title != "Name" &&
                        field.Title != "Modified" &&
                        field.Title != "Checked Out To" &&
                        field.Title != "Page Layout")
                    {
                        if (list.DefaultView.ViewFields.Exists(field.InternalName))
                        {
                            list.DefaultView.ViewFields.Delete(field);                                
                        }
                    }
                }

                list.DefaultView.Update();
            }
        }
    }

コードは間違いなく機能のアクティブ化時に実行されるため、明らかに何か間違ったことをしています。私はこれに対する解決策を探していたので、グーグルまたはこのサイトで盲目的に明らかな何かを見逃していた場合はお詫び申し上げます.

4

1 に答える 1

2

これは、list.DefaultView.ViewFields への変更が範囲外になるためです。Update() の呼び出しに到達する前に、コレクションがデータベースから更新されています。試す:

if (list != null)
{
    SPView view = list.DefaultView;

    foreach (SPField field in list.Fields)
    {
        if (field.Title != "Type" &&
            ...
            field.Title != "Page Layout")
        {
            if (view.ViewFields.Exists(field.InternalName))
            {
                view.ViewFields.Delete(field);                                
            }
        }
    }

    view.Update();
}
于 2009-04-22T10:52:05.640 に答える