Изменение типа столбца списка из поиска в Sharepoint

Я использую поле поиска ilovesharepoint с помощью средства выбора, которое включено codeplex в стандартной среде Moss 2007. Я запустил проект установки, а затем в Powershell выполнил соответствующую команду, чтобы изменить поле «Поиск» на «Поиск с помощью средства выбора» (ConvertLookupToLookupFieldWithPicker.ps1), как показано ниже.

# http://www.iLoveSharePoint.com
# by Christian Glessner

param([string]$webUrl=$(throw 'Parameter -webUrl is missing!'), 
    [string]$listName=$(throw 'Parameter -listName is missing!'), 
    [string]$fieldTitle=$(throw 'Parameter -fieldTitle is missing!'))

$ErrorActionPreference = "Stop";

$env:12HivesDir = "$env:CommonProgramFiles\Microsoft Shared\web server extensions\12\";
$null = [System.Reflection.Assembly]::LoadFrom("$env:12HivesDir\ISAPI\Microsoft.SharePoint.dll");
$site =  New-Object -TypeName "Microsoft.SharePoint.SPSite" -ArgumentList $webUrl;
$web = $site.OpenWeb();
$list = $web.Lists[$listName];

$field = $list.Fields[$fieldTitle];
$schema = [xml]$field.SchemaXml;

$schema.Field.Type = "LookupFieldWithPicker"

if($schema.SelectSingleNode("//@SearchFields") -eq $null)
{
    $searchFields = $schema.CreateAttribute("SearchFields");
    $searchFields.PSBase.Value = [Microsoft.SharePoint.SPBuiltInFieldId]::ID.ToString();
    $schema.Field.PSBase.Attributes.Append($searchFields);
}

$field.SchemaXml = $schema.PSBase.OuterXml;

Write-Output "Done."

Я постоянно вижу эту ошибку

1d22ea11-1e32-424e-89ab-9fedbadb6ce1 Параметр исключения «SchemaXml»: «Изменение неподдерживаемого типа поля. Поле не может быть изменено на новый тип. Проверьте новый тип и повторите попытку». По адресу C: \ Documents and Settings \ xgrmmart \ Desktop \ icgpm \ deploy \ ConvertLookupToLookupFieldWithPicker.ps1: 29 символов: 8 + $ field.S ‹*** chemaXml = $ schema.PSBase.OuterXml;

Понятия не имею, почему он не работает .... отлично работал в тестовой среде. Я не эксперт по PowerShell, и любая помощь приветствуется. Спасибо.


person AboutDev    schedule 11.06.2009    source источник


Ответы (1)


Хорошо, я исправил эту проблему. Проблема возникает, если вы запускаете сценарий PowerShell перед запуском командного файла (я не знал, что кто-то запускал его раньше). Итак, вам нужно использовать преобразованный файл сценария PowerShell ConvertLookupFieldWithPickerToLookup.ps1 и применить его к столбцам. Как только вы закончите, повторно примените первый файл выше, и все должно работать.

Код выглядит следующим образом:

# http://www.iLoveSharePoint.com
# by Christian Glessner

param([string]$webUrl=$(throw 'Parameter -webUrl is missing!'), 
    [string]$listName=$(throw 'Parameter -listName is missing!'), 
    [string]$fieldTitle=$(throw 'Parameter -fieldTitle is missing!'))

$ErrorActionPreference = "Stop";

$env:12HivesDir = "$env:CommonProgramFiles\Microsoft Shared\web server extensions\12\";
$null = [System.Reflection.Assembly]::LoadFrom("$env:12HivesDir\ISAPI\Microsoft.SharePoint.dll");
$site =  New-Object -TypeName "Microsoft.SharePoint.SPSite" -ArgumentList $webUrl;
$web = $site.OpenWeb();
$list = $web.Lists[$listName];

$field = $list.Fields[$fieldTitle];
$schema = [xml]$field.SchemaXml;

if ($schema.Field.AllowMultipleValues -eq $true)
{
    $schema.Field.Type = "LookupMulti"
}
else
{
    $schema.Field.Type = "Lookup"
}

$schema.Field.RemoveAttribute("SearchFields");
$schema.Field.RemoveAttribute("EntityEditorRows");
$schema.Field.RemoveAttribute("MaxSearchResults");

$field.SchemaXml = $schema.PSBase.OuterXml;

Write-Output "Done."
person AboutDev    schedule 11.06.2009