none
Чистка списка RRS feed

  • Вопрос

  • Добрый день. Есть список из 10754 элементов (Журнал передачи прав). Планирую его чистить от неиспользуемых элементов через SQL. Как можно определить что элемент в списке ни кем не используется?
    21 января 2017 г. 6:15

Ответы

  • Добрый день,

    так делать не стоит.

    Лучше почистите список через PowerShell.


    MS,MCTS,MCP,MCPD: SharePoint Developer 2010

    Хотелось бы автоматизировать этот процесс. Есть списки где количество элементов 753961.

    Можно запланировать расписание запуска скрипта через Task Sсheduler. И чистить к примеру определенное количество элементов, вот пример очистки списка в 1000 элементов с последующим удалением из корзины:

    if(!(Get-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction:SilentlyContinue)) 
    { 
        Add-PsSnapin Microsoft.SharePoint.PowerShell 
    }
    $siteUrl = "http://server80/sites/sharepoint"
    $listName = "YourList"
    $batchSize = 1000
    $site = new-object Microsoft.SharePoint.SPSite($siteUrl)
    $web = $site.OpenWeb()
    write-host "Web is: $($web.Title)"
    $list = $web.Lists[$listName];
    write-host "List is: $($list.Title)"
    while ($list.ItemCount -gt 0)
    {
      write-host "Item count: $($list.ItemCount)"
      $batch = "<?xml version=`"1.0`" encoding=`"UTF-8`"?><Batch>"
      $i = 0
      foreach ($item in $list.Items)
      {
        $i++
        write-host "`rProcessing ID: $($item.ID) ($i of $batchSize)" -nonewline
        $batch += "<Method><SetList Scope=`"Request`">$($list.ID)</SetList><SetVar Name=`"ID`">$($item.ID)</SetVar><SetVar Name=`"Cmd`">Delete</SetVar><SetVar Name=`"owsfileref`">$($item.File.ServerRelativeUrl)</SetVar></Method>"
        if ($i -ge $batchSize) { break }
      }
      $batch += "</Batch>"
      $result = $web.ProcessBatchData($batch)
      write-host "Emptying Recycle Bin..."
      $web.RecycleBin.DeleteAll()
      write-host
      $list.Update()
    }

    Если интересует удаление через БД, то DELETE (Transact-SQL), на сколько это надежно и безопасно можете написать здесь же.

     
    23 января 2017 г. 10:45

Все ответы

  • Добрый день,

    так делать не стоит.

    Лучше почистите список через PowerShell.


    MS,MCTS,MCP,MCPD: SharePoint Developer 2010

    • Предложено в качестве ответа Mikhail Zhuikov 24 января 2017 г. 7:44
    • Отменено предложение в качестве ответа delpavel 25 января 2017 г. 4:46
    22 января 2017 г. 4:20
  • Добрый день,

    так делать не стоит.

    Лучше почистите список через PowerShell.


    MS,MCTS,MCP,MCPD: SharePoint Developer 2010

    Хотелось бы автоматизировать этот процесс. Есть списки где количество элементов 753961.
    И еще на сколько я понял про PowerShell, то это скрипты, которые взаимодействуют с БД. Зачем мне посредник, если я могу напрямую это делать?
    • Изменено delpavel 23 января 2017 г. 10:41
    23 января 2017 г. 9:35
  • Добрый день,

    так делать не стоит.

    Лучше почистите список через PowerShell.


    MS,MCTS,MCP,MCPD: SharePoint Developer 2010

    Хотелось бы автоматизировать этот процесс. Есть списки где количество элементов 753961.

    Можно запланировать расписание запуска скрипта через Task Sсheduler. И чистить к примеру определенное количество элементов, вот пример очистки списка в 1000 элементов с последующим удалением из корзины:

    if(!(Get-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction:SilentlyContinue)) 
    { 
        Add-PsSnapin Microsoft.SharePoint.PowerShell 
    }
    $siteUrl = "http://server80/sites/sharepoint"
    $listName = "YourList"
    $batchSize = 1000
    $site = new-object Microsoft.SharePoint.SPSite($siteUrl)
    $web = $site.OpenWeb()
    write-host "Web is: $($web.Title)"
    $list = $web.Lists[$listName];
    write-host "List is: $($list.Title)"
    while ($list.ItemCount -gt 0)
    {
      write-host "Item count: $($list.ItemCount)"
      $batch = "<?xml version=`"1.0`" encoding=`"UTF-8`"?><Batch>"
      $i = 0
      foreach ($item in $list.Items)
      {
        $i++
        write-host "`rProcessing ID: $($item.ID) ($i of $batchSize)" -nonewline
        $batch += "<Method><SetList Scope=`"Request`">$($list.ID)</SetList><SetVar Name=`"ID`">$($item.ID)</SetVar><SetVar Name=`"Cmd`">Delete</SetVar><SetVar Name=`"owsfileref`">$($item.File.ServerRelativeUrl)</SetVar></Method>"
        if ($i -ge $batchSize) { break }
      }
      $batch += "</Batch>"
      $result = $web.ProcessBatchData($batch)
      write-host "Emptying Recycle Bin..."
      $web.RecycleBin.DeleteAll()
      write-host
      $list.Update()
    }

    Если интересует удаление через БД, то DELETE (Transact-SQL), на сколько это надежно и безопасно можете написать здесь же.

     
    23 января 2017 г. 10:45
  • Добрый день,

    так делать не стоит.

    Лучше почистите список через PowerShell.


    MS,MCTS,MCP,MCPD: SharePoint Developer 2010

    Хотелось бы автоматизировать этот процесс. Есть списки где количество элементов 753961.

    Можно запланировать расписание запуска скрипта через Task Sсheduler. И чистить к примеру определенное количество элементов, вот пример очистки списка в 1000 элементов с последующим удалением из корзины:

    if(!(Get-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction:SilentlyContinue)) 
    { 
        Add-PsSnapin Microsoft.SharePoint.PowerShell 
    }
    $siteUrl = "http://server80/sites/sharepoint"
    $listName = "YourList"
    $batchSize = 1000
    $site = new-object Microsoft.SharePoint.SPSite($siteUrl)
    $web = $site.OpenWeb()
    write-host "Web is: $($web.Title)"
    $list = $web.Lists[$listName];
    write-host "List is: $($list.Title)"
    while ($list.ItemCount -gt 0)
    {
      write-host "Item count: $($list.ItemCount)"
      $batch = "<?xml version=`"1.0`" encoding=`"UTF-8`"?><Batch>"
      $i = 0
      foreach ($item in $list.Items)
      {
        $i++
        write-host "`rProcessing ID: $($item.ID) ($i of $batchSize)" -nonewline
        $batch += "<Method><SetList Scope=`"Request`">$($list.ID)</SetList><SetVar Name=`"ID`">$($item.ID)</SetVar><SetVar Name=`"Cmd`">Delete</SetVar><SetVar Name=`"owsfileref`">$($item.File.ServerRelativeUrl)</SetVar></Method>"
        if ($i -ge $batchSize) { break }
      }
      $batch += "</Batch>"
      $result = $web.ProcessBatchData($batch)
      write-host "Emptying Recycle Bin..."
      $web.RecycleBin.DeleteAll()
      write-host
      $list.Update()
    }

     
    Спасибо. А как понять что это чистка не повредит? Например есть журнал передачи прав, данные в него записывает система.
    23 января 2017 г. 11:05
  • Через PowerShell проблем не будет, а вот через T-SQL не уверен.
    23 января 2017 г. 11:10