1

问候,

我编写了自己的 ContentType 定义,可以应用于任何文档库。当用户将项目复制到我的 ContentType 定义尚未附加到的文档库时,我想通过我的 ContentType 保留与项目关联的数据。

显然,要做的事情是捕获新项目的 ItemAdding 或 ItemUpdating 事件,查看源项目以查看我的 ContentType 是否与它相关联,然后将我的 ContentType 添加到目标文档库之前实际发生的副本。

问题是,我在这些事件中找不到任何信息来告诉我源项目是什么。唯一这样的数据是在最终的 ItemUpdated 事件中,但到那时为时已晚......该项目已经被复制并且与我的 ContentType 关联的数据被丢弃。

有人对我如何获得我想要的行为有任何想法吗?

TIA 寻求帮助!

史蒂夫

PS:我想我能做的一件事是在 ItemUpdated 事件中获取源 Url,然后编写代码添加 ContentType 并手动将源中与该类型关联的数据移动到目标。与我上面提出的解决方案相比,这似乎非常不雅。

4

2 回答 2

0

我想到了!答案是 Source URL 位于 ItemUpdating 事件属性的 AfterProperties 字段中。你得到它是这样的:

properties.AfterProperties["_CopySource"];

我看过这个字段,但是因为该对象中有一个成员在调试器中显示“Count = 0”而被抛出。我误读了这意味着那里没有任何东西,但事实证明该计数与那里有多少属性无关。哎呀。

不幸的是,我试图做的仍然行不通。即使我在 ItemUpdating 事件中将我的 ContentType 添加到目标库,与该类型关联的字段也不会被复制。那好吧...

于 2010-01-18T03:22:04.133 回答
0

只是跟进,以防有人对我的问题的最终解决方案感兴趣......

我做了什么来获得我想要的行为:

  1. 将我的代码移动到 ItemUpdated 事件处理程序,以便我在复制完全发生后进行操作。

  2. 获取源项目 URL(参见先前的答案)并将其解析为源 SPList 和 SPListItem

  3. 查看我的 ContentType 是否在源中但不在目标中。

  4. 如果 ContentType 不在目标中,请在目标中安装 ContentType 并手动将该 ContentType 中的属性(通过查询 ContentType 本身)从源复制到目标。

这个过程只发生在被复制到目标库的第一个项目上。之后,ContentType 已经存在于 dest 库中,并且 SP 本身将该类型的字段值从源复制到目标。

于 2010-01-19T19:13:58.977 回答