更新: 这工作,但有很大的局限性,介绍了在评论中. 这可能仍然是有用的一些基本状况.
更新 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(); } |