SharePoint 2010 - Замена значений типа "Выбор" в элементах списка

imageСитуация: На сайте SharePoint 2010 создан какой-то Список в котором создан Столбец с типом значения "Выбор". В значение этого Столбца при настройке введено несколько предопределённых позиций, например: "Значение1", "Значение2", "Значение3".

"Значение1" определено в настройках как значение по умолчанию.

После создания и настройки Столбца в Списке создано определённое количество элементов, в которых произведён выбор соответствующих значений.

Со временем возникает ситуация, когда какое-то значение нужно заменить на новое, например "Значение1" заменить в настройках Списка на "Значение-А".

Проблема: При внесении изменений в настройки Списка, существующие элементы списка остаются неизменными.

Решение: Для того чтобы выполнить пакетную замену в существующих элементах Списка, можно воспользоваться PowerShell скриптом, который предоставил мне мой коллега Владимир Земляков в небольшой моей редакции:

# Блок переменных

# $siteUrl - Сайт SharePoint

# $listName - Имя списка в котором нужно произвести замену значений

# $fieldName - Имя столбца списка с типом значения "Выбор"

# $oldValue - Старое значение, которое нужно найти в элементах выбора

# $newValue - Новое значение, которым заменим старое значение.

#

$siteUrl = "http://kom-ad01-srv-web.holding.com"                 

$listName = "Перечень информационных ресурсов"   

$fieldName = "Группа ресурсов"           

$oldValue = "Инф.ресурсы Дирекции ИТ"

$newValue = "Инф.ресурсы ДИТ - АУП"

#

# Функция для замены значения в поле выбора

#

function Update-ChoiseField(){

    param(

        $spList,

        $fieldName,

        $oldValue,

        $newValue

    )   

      $field = $spList.Fields[$fieldName];

      if ($field.Type -eq "Choice")

      {      

      for ($i = 0; $i -le $field.Choices.Count; $i++)

      {       

            $value = $field.Choices[$i]       

            if ($value -eq $oldValue)

            {

                  $field.Choices[$i] = $newValue;    

                  }

      }

            If ($field.DefaultValue -eq $oldValue) {

                  $field.DefaultValue = $newValue;

                  $field.Update();

            }

      }

}

#

# Функция для замены значения во всех элементах списка

#

function UpdateChoiseField-List(){

    param(

        $spList,

        $fieldName,

        $oldValue,

        $newValue

    )   

      foreach ($item in $spList.Items)

      {

            [Microsoft.SharePoint.SPListItem]$spListItem = $item

            if ($spListItem.FileSystemObjectType -ne $spListItem.Folder)

            {

                  if ($spListItem[$fieldName] -eq $oldValue)

                  {

                        $spListItem[$fieldName] = $newValue;

                        $spListItem.Update()

                  }

            }

      }    

}

#

# Загружаем оснастку SharePoint, подключаемся к сайту/списку и вносим изменения

#

$snapin = Get-PSSnapin | Where-Object {$_.Name -eq 'Microsoft.SharePoint.Powershell'}

if ($snapin -eq $null) {

  Write-Host "Загрузка оснастки SharePoint Powershell"

  Add-PSSnapin "Microsoft.SharePoint.Powershell"

}

$spSite = new-object Microsoft.SharePoint.SPSite($siteUrl)

$spWeb = $spSite.OpenWeb()

$spList = $spWeb.Lists[$listName]

Update-ChoiseField -spList $spList -fieldName $fieldName -oldValue $oldValue -newValue $newValue

UpdateChoiseField-List -spList $spList -fieldName $fieldName -oldValue $oldValue -newValue $newValue

$spWeb.Close();

$spSite.Close();

 

Добавить комментарий