質問

私はこれについて私の知恵の終わりにいます。 SharePointドキュメントライブラリに保存されているドキュメントを作成および編集するユーザーインターフェイスがあります。トリックの部分は、ユーザーがドキュメントを更新できるようにする必要があることです。 SPFile.SaveBinary() 右?

これは間違いなくファイルの内容を更新しますが、どういうわけか古いファイル名と古い拡張子が持続します。これは問題です。リストアイテムの削除と再添加は、アイテムのIDがURLで参照されているため、解決策ではありません。

私の質問は、spfileアイテムの拡張機能とファイル名メタデータをどのように更新できるかということです。

これまでのところ、オブジェクトライブラリを使用した私の試みはすべて失敗しましたが、以下のフィールドを更新しようとしました。これを行うには簡単な方法が必要だと思われます。

SPFile file = item.File;
file.Item[SPBuiltInFieldId.FileLeafRef] = resolvedFileName;
file.Item[SPBuiltInFieldId.FileRef] = "/File/" + resolvedFileName;
file.Item[SPBuiltInFieldId.BaseName] = System.IO.Path.GetFileNameWithoutExtension(resolvedFileName);
file.Item["Name"] = System.IO.Path.GetFileNameWithoutExtension(resolvedFileName);
file.SaveBinary(conduitFile);
file.Update();

編集 - これが私の実用的なソリューションです。

SPFile file = item.File;
string resolvedFileName = item.ID.ToString() + "-" + conduitFileName;
item["Title"] = resolvedFileName;
file.SaveBinary(conduitFile);
file.MoveTo(item.ParentList.RootFolder.Url + "/" + resolvedFileName, true);
file.Item["Name"] = resolvedFileName;
file.Update();
役に立ちましたか?

解決

ファイルがライブラリに保存されたら、 MoveTo メソッドと、変更されたファイル名を渡します newUrl パラメーター。

spfile.movetoメソッド(文字列)
Quick&Easy:イベントレシーバーを介してSharePointオブジェクトモデルを使用してアップロードされたファイルの名前を変更します

他のヒント

Movetoを使用するよりも簡単な別の方法は、 ベースネーム splistitemのプロパティ。実行してこれを設定します

item["BaseName"] = resolvedFileName; //Whatever you want the new file name to be 
item.Update();

これは、フォルダーの階層について心配する必要がなく、ファイル拡張子を心配する必要がないため、Movetoよりも簡単です。

何らかの理由で、プロパティはにリストされていません MSDNドキュメント, 、しかし、それは問題なくうまく機能しているようです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top