SharePoint オブジェクト モデルを使用して、特定のドキュメント ライブラリからすべてのドキュメントをプログラムで削除する明確で完全な例を探しています。doclib にはフォルダーが含まれていません。ドキュメントを完全に削除しようとしています (つまり、ごみ箱に入れたくありません)。
私は SPWeb.ProcessBatchData を知っていますが、どういうわけか私にはうまくいかないようです。
ありがとう!
SharePoint オブジェクト モデルを使用して、特定のドキュメント ライブラリからすべてのドキュメントをプログラムで削除する明確で完全な例を探しています。doclib にはフォルダーが含まれていません。ドキュメントを完全に削除しようとしています (つまり、ごみ箱に入れたくありません)。
私は SPWeb.ProcessBatchData を知っていますが、どういうわけか私にはうまくいかないようです。
ありがとう!
私は ProcessBatchData アプローチに固執しますが、これが役立つかもしれません:
Vincent Rothwellがこのベストをカバーしています: http://blog.thekid.me.uk/archive/2007/02/24/deleting-a-considerable-number-of-items-from-a-list-in-sharepoint.aspx
そうしないと、コレクション内のアイテムの数が削除ごとに変化することを Foreach ループが好まないため、他の推奨事項が機能するかどうかわかりません。
おそらく、逆の for ループを実行するのが最適です (このコードはテストしていません。単なる例です)。
for (int i = SPItems.Length - 1; i >= 0; i--)
{
SPListItem item = SPItems[i];
item.File.Delete();
}
これはアイテムを削除する正しい方法ではありません。ここの投稿に従ってください http://praveenbattula.blogspot.com/2009/05/deleting-list-items-at-time-from-list.html
ドキュメントライブラリのすべてのファイルを確認する必要があります。
foreach(SPListItem item in SPContext.Current.Web.Lists["YourDocLibName"].Items)
{
//TODO: Verify that the file is not checked-out before deleting
item.File.Delete();
}
APIからファイルのdeleteメソッドを呼び出すと、ごみ箱は使用されません。直接削除です。ファイルがチェックアウトされていないことを確認する必要があります。
ここにいくつかの参照があります:
PowerShellの方法:
function ProcessFolder {
param($folderUrl)
$folder = $web.GetFolder($folderUrl)
foreach ($file in $folder.Files) {
#Ensure destination directory
$destinationfolder = $destination + "/" + $folder.Url
if (!(Test-Path -path $destinationfolder))
{
$dest = New-Item $destinationfolder -type directory
}
#Delete file by deleting parent SPListItem
$list.Items.DeleteItemById($file.Item.Id)
}
}
#Delete root Files
ProcessFolder($list.RootFolder.Url)
#Delete files from Folders or Document Sets
foreach ($folder in $list.Folders) {
ProcessFolder($folder.Url)
}