2009-06-11 73 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."