Ситуация: На сайте 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();
Добавить комментарий