问候,
我编写了自己的ContentType定义,可以应用于任何文档库。当用户将该项目复制到尚未附加我的ContentType定义的文档库时,我希望通过我的ContentType保留与项目关联的数据。
显而易见的是,要抓住新项目的ItemAdding或ItemUpdating事件,查看源项目以查看我的ContentType是否与之关联,然后将我的ContentType添加到目标文档实际发生复制之前的库。
问题是,我在这些事件中找不到告诉我源项目是什么的信息。唯一的此类数据是在最终的ItemUpdated事件中,但到那时为时已晚......项目已被复制,与我的ContentType相关联的数据被丢弃。
任何人都对如何获得我想要的行为有任何想法?
TIA提供任何帮助!
史蒂夫
PS:我想我可以做的一件事是在ItemUpdated事件中获取源Url,然后编写代码以添加ContentType,并手动将源中与该类型相关联的数据移动到目标。与我上面提出的解决方案相比,这似乎非常不优雅。答案 0 :(得分:0)
我明白了!答案是源URL位于ItemUpdating事件属性的AfterProperties字段中。你这样得到它:
properties.AfterProperties["_CopySource"];
我查看了这个字段,但是由于该对象中有一个成员在调试器中显示“Count = 0”这一事实引发了这种情况。我误解了这意味着那里什么也没有,但事实证明,那个数与那里有多少属性无关。糟糕!
不幸的是,我试图做的仍然不起作用。即使我在ItemUpdating事件中将我的ContentType添加到目标库,也不会复制与该类型相关联的字段。哦,好吧......
答案 1 :(得分:0)
只是跟进,以防有人对我的问题的最终解决方案感兴趣...
我做了什么来获得我想要的行为:
将我的代码移至ItemUpdated事件处理程序,以便在副本完全发生后我正在运行。
获取源项目URL(请参阅先前的答案)并将其解析为源SPList和SPListItem
查看我的ContentType是否在源中但不在目的地。
如果ContentType不在目标中,请在目标中安装ContentType并手动将该ContentType中的属性(通过查询ContentType本身)从源复制到目标。
此过程仅适用于复制到目标lib的第一个项目。之后,目标类型中已存在ContentType,SP本身会将该类型的字段值从源复制到目标。