Изменение типа столбца списка из поиска в Sharepoint - PullRequest
1 голос
/ 11 июня 2009

Я использую Поле поиска ilovesharepoint с Picker , которое находится в кодовом сплетении в стандартной среде 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 char: 8 + $ field.S <<<< chemaXml = $ schema.PSBase.OuterXml; </p>

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

1 Ответ

1 голос
/ 12 июня 2009

Хорошо, я исправил эту проблему. Проблема возникает, если вы запускаете сценарий 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."
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...