C# 如何在文档库中创建新项目作为文件链接?

C# 如何在文档库中创建新项目作为文件链接?,c#,sharepoint-online,sharepointdocumentlibrary,C#,Sharepoint Online,Sharepointdocumentlibrary,我必须使用SPFileCollection.Add方法将新项添加到文档库中,但该方法似乎不适合重载 塞纳里奥: 如果将文件添加到文档库中,并且具有多选功能的“部门选择”字段(复选框)具有选定值,则itemUpdated事件应在选定的“部门采购”文件夹中创建指向添加文件的链接 目前发生的情况: 代码将文件添加为新文件,而不是链接 我尝试了以下方法 string departments = Convert.ToString(properties.ListItem[Constants.Departme

我必须使用SPFileCollection.Add方法将新项添加到文档库中,但该方法似乎不适合重载

塞纳里奥: 如果将文件添加到文档库中,并且具有多选功能的“部门选择”字段(复选框)具有选定值,则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在评论中的链接

我无法复制粘贴它,因为该方法中使用的重载不存在,但它有一些有趣的点,比如hashtable,用于在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
链接到文档


但是,删除原始文件不会禁用“链接”。它仍然可以正常工作。所以它毕竟不是一个链接。

我设法通过post找到了一个解决方案
简而言之:

它似乎不可能直接添加夹板,你必须伪造它。本文介绍了如何创建sharepoint在使用GUI添加链接时生成的.aspx文件。然后,此文件将作为新项目添加到库中,并表示链接。

我只能提供此博客文章,可能会有所帮助:。不是我所知道的最优雅的帮助!