2009-06-11 43 views
1

我使用的是ilovesharepoint Lookup Field with Picker即在CodePlex上的MOSS 2007标准环境。我跑的设置项目,然后在Powershell的发出适当的命令以查阅字段更改为与选择器(ConvertLookupToLookupFieldWithPicker.ps1),其如下所示的查找。改变从查找列表的列类型在Sharepoint

# 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和Settings \ xgrmmart \桌面\ icgpm \部署\ ConvertLookupToLookupFieldWithPicker.ps1:29字符:8 + $ field.S < < < < chemaXml = $ schema.PSBase.OuterXml;

不知道为什么它不工作.... 在测试环境中完美运行。我不是PowerShell的专家,任何帮助都非常感谢。谢谢。

回答

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."