我在Moss 2007标准环境中使用codeplex上的ilovesharepoint Lookup Field with Picker。我运行了安装项目,然后在Powershell中发出了相应的命令,将Lookup字段更改为带有Picker的Lookup(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;
不知道为什么它不起作用.... 在测试环境中完美运行。我不是PowerShell的专家,非常感谢任何帮助。感谢。
答案 0 :(得分:1)
好的我解决了这个问题。如果在运行批处理文件之前运行PowerShell脚本会出现问题(我以前没有意识到有人运行过它)。因此,您需要使用converse 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."