【问题标题】:SharePoint: Apply source ContentType to destination when copying a SPListItemSharePoint:复制 SPListItem 时将源 ContentType 应用到目标
【发布时间】:2010-01-20 03:13:58
【问题描述】:

您好,

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

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

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

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

TIA 寻求帮助!

史蒂夫

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

【问题讨论】:

    标签: sharepoint moss copy splistitem


    【解决方案1】:

    我想通了!答案是 Source URL 位于 ItemUpdating 事件属性的 AfterProperties 字段中。你可以这样处理:

    properties.AfterProperties["_CopySource"];
    

    我曾查看过该字段,但由于该对象中有一个成员在调试器中显示“Count = 0”而被抛出。我误读了这意味着那里什么都没有,但事实证明,这个计数与那里有多少房产无关。哎呀。

    不幸的是,我尝试做的仍然不起作用。即使我在 ItemUpdating 事件中将我的 ContentType 添加到目标库,与该类型关联的字段也不会被复制。哦,好吧……

    【讨论】:

      【解决方案2】:

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

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

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

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2011-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多