快速 & 容易: 重命名已上载的文件使用 SharePoint 对象模型通过事件接收器

更新: 这工作,但有很大的局限性,介绍了在评论中. 这可能仍然是有用的一些基本状况.

更新 2: 我当前的项目中, 用户始终上载文件. 结果, 不会遇到一个问题 MS Word 正在运行,并且认为它重命名该文件. 我也遇到一个问题, "文件的修改由其他人" 并解决了这个问题通过一个简单的信号类型标志. 用户需要从其默认值的元数据字段更改为别的东西. Itemupdated() 寻找有效的值实际上执行重命名之前并自那时以来接收器, 我没有任何问题. 您的里程可能会发生变化.

我有一个客户端要求更改上载到以符合特定的命名约定的特定文档库的文件名称. 该 API 并不提供"重命名()" 方法. 相反, 我们使用 "MoveTo(…)". 这里是代码的最少来完成这位:

 公众 重写 无效 ItemAdded(SPItemEventProperties 属性)
        {
            SPFile f = 属性。ListItem.File;

            f.MoveTo(属性。ListItem.ParentList.RootFolder.Url + "/xyzzy.doc");
            f.Update();

        }

唯一麻烦的地方是"属性。"ListItem.ParentList.RootFolder.Url. MoveTo() 方法需要一个 URL. 那捣碎的字符串点我到我当前的文档库的根文件夹中. 这让我们避免任何硬编码在我事件接收器.

这是一个更有用的版本,做同样的事, 但分配的文件的名称为"标题":

 公众 重写 无效 ItemAdded(SPItemEventProperties 属性)
        {
            DisableEventFiring();

            // 将此项的标题分配给文件本身的名称.
 // 请注意: 这项任务必须发生之前我们修改文件本身.
 // 调用 update() 对 SPFile 似乎要使之无效的属性中
 // 某种意义上.  "标题的更新" 失败之前,更改 (和更新() 电话)
 // 在更改前被移到的文件的名称.
            属性。ListItem["标题"] = 属性。ListItem.File.Name;

            属性。ListItem.Update();

            SPFile f = 属性。ListItem.File;

            // 获取该文件的扩展名.  我们以后需要的.
 字符串 spfileExt = 新增功能 FileInfo(f.Name).扩展;

            // 重命名的文件到列表项 ID 和使用的文件扩展名来保存
 // 它不变的那一部分.
            f.MoveTo(属性。ListItem.ParentList.RootFolder.Url +
                "/" + 属性。ListItem["ID"] + spfileExt);

            // 犯下移动.
            f.Update();

            EnableEventFiring();
        }

4 上“的想法快速 & 容易: 重命名已上载的文件使用 SharePoint 对象模型通过事件接收器

  1. 没有名称
    还, 如果你在 Word 中做这从, 它将返回一个错误,并说该文件不存在. 它不是说新的 URL. 我尚未找到解决的办法.
    答复
  2. 保罗 · 高尔文
    谢谢你指出来. 我也不知道那个答案 … 将会感兴趣,请参阅如何管理它.
    RE: 异步 & 重定向
    我想知道是否将其移动到 ItemAdding 将解决它. 这就是一个大洞.
    谢谢!
    –保罗
    答复
  3. Nadeem 米塔
    因为该文件获取异步移动, 有的被重定向到 EditForm.aspx 之前,此举是致力于一种可能性 (这就是坏). 你会看到这发生是否你睡前 MoveTo 行的代码. 还没发现是关于这一问题除了使用自定义的编辑窗体可以做什么.
    答复

留言

您的电子邮件地址不会被公开. 必需的地方已做标记 *