【问题标题】:How to create a new item as file link in document library?如何在文档库中创建一个新项目作为文件链接?
【发布时间】:2015-12-23 09:43:22
【问题描述】:

我必须使用 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 在他的评论中链接的blog post

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

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

【问题讨论】:

标签: c# sharepoint-online sharepointdocumentlibrary


【解决方案1】:

我设法通过this 帖子找到了解决方案。
简而言之:
似乎无法直接添加 SPLink,您必须伪造它。这篇文章描述了如何创建 sharepoint 在使用 GUI 添加链接时将生成的 .aspx 文件。该文件随后作为新项目添加到库中并表示链接。

【讨论】:

    猜你喜欢
    • 2011-08-20
    • 2022-09-24
    • 1970-01-01
    • 1970-01-01
    • 2011-06-19
    • 1970-01-01
    • 2016-04-26
    • 2017-11-17
    • 1970-01-01
    相关资源
    最近更新 更多