代码之家  ›  专栏  ›  技术社区  ›  AboutDev

从SharePoint中的查找更改列表的列类型

  •  1
  • AboutDev  · 技术社区  · 16 年前

    我正在使用 ilovesharepoint Lookup Field with Picker 这是在Moss2007标准环境中的codeplex上。我运行了安装程序项目,然后在PowerShell中发出了相应的命令,将查找字段更改为具有选择器的查找(convertLookupLookupFieldWithPicker.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-9fedbad6ce1 异常设置“schemaXML”:“不支持字段类型更改。 无法将字段更改为新类型。请检查新类型,然后重试。“ 位于c:\documents and settings\xgrmmart\desktop\icgpm\deploy\convertLookupLookupFieldWithPicker.ps1:29 char:8 +$field.s<<<<chemaxml=$schema.psbase.outerxml;

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

    1 回复  |  直到 16 年前
        1
  •  1
  •   AboutDev    16 年前

    好的,我解决了这个问题。如果在运行批处理文件之前运行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."
    
    推荐文章