如何在文档库中创建一个新项目作为文件链接
本文关键字:新项目 一个 链接 文件 文档 创建 | 更新日期: 2023-09-27 18:27:53
我必须使用SPFileCollection.Add方法将新项添加到文档库中,但似乎不适合重载此方法。
szenario:如果将文件添加到文档库,并且带有多选(复选框)的部门选择字段已选择值,则itemUpdated事件应创建指向所选部门采购文件夹中添加文件的链接。
当前发生的情况:代码将文件添加为新文件,而不是链接。
我尝试了以下。。。
string departments = Convert.ToString(properties.ListItem[Constants.Departments]);
if (!string.IsNullOrEmpty(departments))
{
string[] linkTargets = departments.Split(';', '#');
string purchasingLink = string.Concat(properties.Web.Url, "/", properties.List.RootFolder.Url, "/", Constants.Purchasing, "/");
foreach (string linkTarget in linkTargets)
{
if (!string.IsNullOrEmpty(linkTarget))
{
SPFolder targetFolder = properties.Web.GetFolder(purchasingLink + linkTarget);
SPFileCollection targetLibFiles = properties.List.RootFolder.Files;
targetLibFiles.Add()
string fileUrl = string.Concat(purchasingLink, linkTarget, "/", properties.ListItem.File.Name);
SPFile newFile = targetLibFiles.Add(fileUrl, properties.ListItem.File.OpenBinary());
SPListItem newItem = newFile.Item;
newItem[SPBuiltInFieldId.ContentType] = SPBuiltInContentTypeId.LinkToDocument;
SPFieldUrlValue linkFieldValue = new SPFieldUrlValue();
linkFieldValue.Url = fileUrl;
newItem[SPBuiltInFieldId.URL] = linkFieldValue;
newItem.Update();
}
}
}
更新:所以我查看了James Michal Lucas在他的评论中链接的博客文章。
我无法复制粘贴它,因为该方法中使用的重载不存在,但它有一些有趣的地方,比如在Add(…)方法中提供内容类型的哈希表。由此对我的代码进行的修改:
Hashtable itemProperties = new Hashtable();
SPContentTypeId ctId = SPBuiltInContentTypeId.LinkToDocument;
itemProperties["ContentTypeId"] = ctId.ToString();
string fileUrl = string.Concat(purchasingLink, linkTarget, "/", properties.ListItem.File.Name);
SPFile newFile = targetLibFiles.Add(fileUrl, properties.ListItem.File.OpenBinary(), itemProperties);
执行此操作,然后使用powershell检查新项目的内容类型,会显示:
PS C:''Users''xy>$file.Item.ContentType.Name
链接到文档
但是,删除原始文件并不会禁用"链接"。它仍然运行良好。所以这毕竟不是一个环节。
我设法找到了这篇文章的解决方案
简而言之:
直接添加SPLink似乎是不可能的,你必须伪造它。这篇文章描述了如何创建sharepoint在使用GUI添加链接时生成的.aspx文件。然后,该文件将作为新项目添加到库中,并表示链接。