我在导入数据时遇到了有关查找字段行为的问题。我想知道当他们指向的列表被替换/导入时,查找字段的行为如何。为了解释这个问题,我将在下面提供一个简单的例子:
例如,假设我们有两个共享点列表:
Product Types
-------------
+ Type Name
+ Code Nr
+ etc
Products
--------
+ Product Name
+ Product Type (Lookup field to list "Product Types")
+ etc
在我的方案中,产品列表包含生产Sharepoint平台上的生产数据。它由业务用户填充数据。 但是,“产品类型”列表包含相当静态的数据,由开发人员维护。
现在,在开发周期之后,开发人员想要部署他的新webparts和他的新数据(产品类型列表)。开发人员执行以下过程:
这意味着我们基本上会替换生产服务器上的“产品类型”列表,同时保持“产品”列表不变。
现在的问题是:
感谢所有反馈和建议!
更新1 导入的“产品类型”项目具有与先前删除的ID相同的ID。
更新2 开始获得奖励以获得更多反馈/意见。
答案 0 :(得分:2)
之前我们有过完全相同的情况。这有点棘手,取决于你将如何接近它。
1)通过UI
删除并重新创建产品类型列表如果您通过UI删除并重新创建查找列表(在您的案例中为产品类型),那么您将失去连接,因为List的id GUID将在重新创建时更改。所以不要走那条路。
2)通过功能删除和重新创建产品类型
如果 使用feature.xml
元素通过<ListInstance>
文件创建了“产品类型”列表,那么如果删除该列表,然后使用相同的功能重新创建它(基本上ListInstance的Id属性保持不变,列表项的数量,即<Row>
元素的数量可能会改变),将保持关联。因此,如果您要添加另外5种产品类型,那么如果您使用某项功能创建了列表,则可以删除该列表并使用相同功能配置新列表,并为新项目提供额外信息,一切都会正常工作!
作为旁注,这是更好的方法,因为如果你必须在很多服务器上进行升级,那么通过stsadm进行列表导出导入,而不是功能停用和激活是一个更推荐的解决方案。这就是我们做到的。
3)从产品类型中删除所有列表项并添加新项目(列表永不删除)
如果要将查找字段(在产品列表中)链接到查找列表(产品类型)的ID字段,则必须记住ID是自动递增的,因此如果删除所有项目,则添加新的,然后他们的ID将是不同的。假设您在列表中有5个具有ID的项目(在数据库视图中编辑时,ID字段未在UI中显示)1-5。如果删除它们并添加新项目,它们的ID将从6开始,而不是从1开始。因此,如果您的查找字段已链接到其中包含ID 1的项目,则此方法不起作用,因为“产品类型”列表中不再存在ID为1的项目。因此,在使用此方法进行生产之前,您可能想要真正尝试一下。
4)在适当的位置编辑列表
如果列表不是非常庞大,并且您只需要对一个或两个实例进行此更改,那么您是否可以直接在prod服务器上的数据表视图中编辑列表?在数据表视图中进行编辑时,请勿删除该项,而只是覆盖其列的值。如果需要,您可以添加更多项目。这将确保您的ID有效。
我主要谈到在列表中添加新项目。现在,如果您要删除现有项目,那么您的查找字段将受到影响,因为假设您按ID链接了该字段,因此该项目已被删除后ID不再存在。基本上,您使用的任何方法,维护您的ID都是至关重要的。
现在关于你的疑惑/问题: 我不太确定stsadm export import for list(从来没有自己完成),但stsadm可能很棘手,因为某些操作只适用于某些范围。所以你最好在dev env上尝试你的确切场景。
根据确切的时间安排,导入过程中会发生什么变得棘手。我确信SP有自己的并发机制,但你不能有一个明确的答案,因为它可能会根据导入的阶段而有所不同。如果可能,建议的方法是在计划停机期间进行导入。
关于更改列表的架构,列表架构的更改不会影响现有列表实例(大多数情况下)。如果您通过UI执行此操作,我相信SP会直接更改内容数据库。我不确定您打算如何执行此操作,但如果您要使用功能向现有列表添加列,则执行此操作的方法是在功能激活期间向列表添加新内容类型并添加新列这种内容类型。这样就可以添加列,但不会影响现有的列表项。
祝你好运......答案 1 :(得分:1)
特定查找有两个组件:字段和字段值。字段值仅包含其引用的项目的ID以及显示字段。没有该字段,此信息毫无意义,该字段指定要查看的列表以及用作显示字段的字段。