クイック & 簡単: イベント レシーバーで SharePoint オブジェクト モデルを使用してアップロードされたファイルの名前を変更します。

更新プログラム: これは、作品が、コメントで説明する重要な制限があります。. これはまだいくつかの状況で役に立つかもしれません.

更新プログラム 2: 私の現在のプロジェクトで, ユーザーは、常にドキュメントをアップロードします。. その結果, 私は MS Word を実行しているされ、ファイルがそれに改名されたと考えている問題に実行しないでください。. 問題に遭遇しました, 「ファイルに他の誰かによって変更されました。" 簡単なセマフォ型フラグでこれを解決し、. ユーザー既定値から何かをメタ データ フィールドを変更する必要. Itemupdated() 受信機の有効な値が実際には、名前の変更を実行する前に、その後に見える, 任意の問題を持っていなかった. あなたのマイレージは異なる場合があります。.

私は特定の名前付け規則に準拠する特定のドキュメント ライブラリにアップロードされたファイルの名前を変更するクライアントの要件があります。. API は"名前の変更を行いません。()" メソッド. 代わりに, 私たちを使用します。 「MoveTo(…)". ここではこれを達成するためにコードの最小ビットです。:

 パブリック オーバーライド void ItemAdded(SPItemEventProperties プロパティ)
        {
            SPFile f = プロパティ。ListItem.File;

            f.MoveTo(プロパティ。ListItem.ParentList.RootFolder.Url + 「/xyzzy.doc");
            f.Update();

        }

唯一のトリッキーなビットは」プロパティです。ListItem.ParentList.RootFolder.Url」. [Moveto]() メソッドには、URL が必要です。. 文字列のポイントをマッシュが私で私の現在のドキュメント ライブラリのルート フォルダーに. これにより、私のイベント レシーバーで、ハードコーディングを避けるために.

これは同じ事をするより役に立つのバージョンです。, しかし、「タイトル」に、ファイルの名前を割り当てます:

 パブリック オーバーライド void ItemAdded(SPItemEventProperties プロパティ)
        {
            される DisableEventFiring();

            // ファイル自体の名前をこのアイテムのタイトルを割り当てる.
 // メモ: 我々 は、ファイル自体を変更する前にこの割り当ての場所を取る必要があります。.
 // Update を呼び出す() SPFile のプロパティを無効にするようです。
 // いくつかの意味.  「タイトル更新" 変更されるまでに失敗しました (更新() 呼び出し)
 // 変更前のファイル名に移動されました。.
            プロパティ。ListItem[「タイトル"] プロパティを = します。ListItem.File.Name;

            プロパティ。ListItem.Update();

            SPFile f = プロパティ。ListItem.File;

            // ファイルの拡張子を取得します。.  我々 は後で必要があります。.
 文字列 spfileExt = 新機能 FileInfo(f.Name).拡張機能;

            // リスト アイテムの ID をファイルの名前を変更、ファイルの拡張子を使用して維持するには
 // その部分はそのままの.
            f.MoveTo(プロパティ。ListItem.ParentList.RootFolder.Url +
                "/" + プロパティ。ListItem[「ID"] + spfileExt);

            // 移動をコミットします。.
            f.Update();

            EnableEventFiring();
        }

4 「上の思考クイック & 簡単: イベント レシーバーで SharePoint オブジェクト モデルを使用してアップロードされたファイルの名前を変更します。

  1. ない名前
    また, これから内の単語を行う場合, それはエラーを返すし、ファイルが存在しないと言う. それは新しい URL について伝えられない. 私はまだこれを回避する方法を見つけていません。.
  2. ポール Galvin
    指摘いただきありがとうございます. いずれか 1 つへの答えを知らない … それを管理する方法を参照してくださいに興味深いものになります。.
    再: 非同期 & リダイレクト
    かどうか、ItemAdding に移動することはそれを解決するのだろうか. 大きな穴であります。.
    おかげで!
    –ポール
  3. Nadeem Mitha
    ファイルを非同期的に移動を取得しますので, 移動がコミットされる前の EditForm.aspx にリダイレクトされる可能性があります。 (そしてそれは悪いです。). これは [moveto] 行の前にスリープ コードを加えた場合に起こることが表示されます。. まだ別にカスタム編集フォームを使用してその問題について何を行うことができます考え出した.

返信にコメントを残す Nadeem Mitha 返信をキャンセル

あなたのメールアドレスが公開されることはありません. 必須フィールドは、マークされています *