使用内容数据库更新内部名称

时间:2010-09-24 03:29:45

标签: sharepoint sharepoint-2007 wss-3.0

我们目前有一个ID错误的字段。 Sharepoint字段的ID和内部名称仅在域模型上是只读的。我想知道是否有办法甚至通过使用内容数据库来更新它们。

一种可靠的方法是删除该字段并重新创建它。但它已有数据,有数千页。我想知道是否有办法更新ID和内部名称而不进行字段的删除和重新创建。

由于

3 个答案:

答案 0 :(得分:2)

即使可行,也不要这样做 它是:

  • 危险,因为你可能会跳过依赖
  • 不支持

使用某些脚本重新创建字段以保持数据更安全。

答案 1 :(得分:0)

我们遇到了同样的问题。与数据库混淆不是我们的选择(,不应该为你),但你可以解决它。不幸的是,它需要触摸每个页面来更新元数据。

首先,创建列应该在列表中的列。然后,您可以通过多种方式将旧列中的数据复制到新列:

  1. 数据表视图
  2. 以编程方式通过Web服务(不需要访问服务器)
  3. 以编程方式通过控制台应用程序(需要在服务器上本地运行)
  4. 老实说,编写一个小型控制台应用程序将是最快的。例如:

    string siteUrl = "http://server/sitecollection/";
    string webUrl = "subsite1/subsite2/";
    string listName = "Your List Name";
    using (SPSite site = new SPSite(siteUrl))
    {
        using (SPWeb web = site.OpenWeb(webUrl))
        {
            SPList list = web.Lists[listName];
            foreach (SPListItem item in list.Items)
            {
                item["New_x0020_Column_x0020_Name"] = item["Old_x0020_Column_x0020_Name"];
            }
        }
    }
    

    此外,它强烈建议首先在DEV环境中尝试此操作。只需从生产环境中进行STSADM还原并测试您的控制台应用程序。然后,验证您的数据并删除旧列!

答案 2 :(得分:0)

我不建议修改内容数据库,因为它是:

  • 不受支持(如果您这样做,即使您拥有MS Premier支持,Microsoft也无法帮助您解决问题)
  • 非常复杂。您必须更新许多表,否则您将无法确定是否确实更新了所有必需的内容。

您可以尝试做什么 - 查看内部名称属性是否实际上是“只读”还是定义为“朋友”,并且您无法从其他代码程序集中调用它。如果是后一种情况,您可以使用.Net反射来设置属性值。有关详细信息,请参阅此MSDN documentation link

相关问题