如何将带有元数据的新添加文档复制到另一个文档库?

时间:2010-04-02 05:50:42

标签: sharepoint copy

  1. 我需要复制用户刚添加的项目(例如.myresume.doc或financial.xls)和元数据(doc lib从内容类型获取列,ct从站点colum获取列)和将具有元数据的项目复制到名为“NativeFile”的文件夹中。每个文档库都有此文件夹。

  2. 我知道可以使用itemadded,但之后我听到了在用户有机会完成他们刚刚添加的项目的元数据之前的迭代激活。

  3. 我有什么选择? (对sp来说是新的,所以一些示例代码会有很大的帮助。或者类似于这个问题的一些好的链接)

    Sharepoint 2007,itemadded或itemadding或itemupdating或itemupdated ....

3 个答案:

答案 0 :(得分:1)

ccomet是对的。仅使用项目事件接收器就没有好的方法来复制元数据。如果您只是复制文件就可以解决问题:

public class MyItemEventReceiver : SPItemEventReceiver
{
    public override void ItemAdded(SPItemEventProperties properties)
    {
        base.ItemAdded(properties);

        SPListItem item = properties.ListItem;
        item.File.CopyTo(item.ParentList.RootFolder.Name + "/NativeFile/" + item.File.Name, true);
    }
}

答案 1 :(得分:0)

您听到的内容是正确的:ItemAdded会在元数据完成之前触发,因为在文档库中,ItemAdded会在首次上传文档时触发,而不是在填写表单时触发。

我认为最流畅的选择是使用在文档库中创建项目时触发的工作流程。特别是使用Visual Studio 2008的基于代码的代码,如果有的话。可以在此处找到使用Visual Studio 2008制作工作流的一般演练:Wrangling SharePoint Workflows with Visual Studio。那篇文章实际上是我从一开始就学会制作工作流程的方式,所以我希望它能帮助你,也帮助你。我建议这种方法优于事件处理程序,因为你必须使用ItemUpdated,这意味着你必须进行棘手的检查才能确保它只运行一次。我能想到的另一个选择是制作一个自定义形式,但是不能一直做到这一点。

现在,制作自己的工作流程。确保初始化workflowProperties,如onWorkflowActivated_Invoked的链接中所示。如果您在表单中填写所有必填字段,则这是一个非常简单的工作流程。在设计器视图中,除了OnWorkflowActivated活动之外,您还需要两个额外的活动:OnWorkflowItemChanged活动和Code活动。对于OnWorkflowItemChanged活动,您需要设置的唯一属性是CorrelationToken,它与OnWorkflowActivated活动的CorrelationToken相同。现在,双击Code活动以生成其codeActivity_Executed方法。在这种方法中,以下内容就足够了:

  

SPListItem item = workflowProperties.Item;

     

if (!item.File.Url.Contains("/NativeUrl/"))

     

{

     

string destination = item.ParentList.RootFolder.Name + "/NativeFile/" + item.File.Name;

     

item.File.CopyTo(destination, true);

     

}

我添加了if语句,因为工作流可能会触发你使用CopyTo创建的新项目,所以这将检查文件是否已经在文件夹中,如果是,它将不会执行复制。现在,将工作流程与您的网站相关联,如链接中所示,并将其与项目创建相关联。那应该有用。

即使此工作流技术上等待ItemUpdated,因为当填写字段时,通过将其与创建项目相关联,您可以确保它只运行一次。我承认我只使用了item.File.MoveTo(destination, true),但确实保留了所有字段和元数据,因此我非常确定CopyTo也应该如此。如果没有,那就给个大声喊叫。

答案 2 :(得分:0)

Properties集合从源项复制到目标项不适用于所有文件类型,尤其是当它们位于不同的文档库中时。

有关详细信息,请参阅此主题:https://sharepoint.stackexchange.com/questions/1151/what-is-the-best-way-to-copy-a-files-column-data-in-sharepoint