【问题标题】:Create a folder in document library using Sharepoint event receiver使用 Sharepoint 事件接​​收器在文档库中创建文件夹
【发布时间】:2012-09-22 11:51:56
【问题描述】:

我正在使用以下代码在我的文档库中创建一个文件夹。该事件被触发并执行到我的代码的最后一行,没有任何问题。但是,该文件夹未在我的文档库中创建或列出。

public override void ItemAdded(SPItemEventProperties properties)
{
    base.ItemAdded(properties);        

    string strDashListRoot = "http://win-hmpjltdbh5q:37642";
    using (SPSite site = new SPSite(strDashListRoot))
    {
        using (SPWeb web = site.OpenWeb())
        {
            web.AllowUnsafeUpdates = true;                    

            SPList spl = web.Lists["client_documents"];
            spl.Items.Add("", SPFileSystemObjectType.Folder, "Helllworld");
            spl.Update();
            web.AllowUnsafeUpdates = false;
        }
    }           
}

【问题讨论】:

  • 您可能可以使用当前上下文,而不是新建站点/网络(尽管可能不是您的问题)。您是否有任何异常,或者它只是没有被创建?您确定该帐户有足够的权限来创建文件夹吗?

标签: c# sharepoint-2010 event-receiver


【解决方案1】:

你需要

var i = spl.Items.Add("", SPFileSystemObjectType.Folder, "Helllworld");
i.Update(); 

而不是

spl.Items.Add("", SPFileSystemObjectType.Folder, "Helllworld");
spl.Update();

(假设您的 Add 通话没问题 - 我觉得没问题)

(另外,你确定你需要AllowUnsafeUpdates 处理吗?当你在ItemAdded 处理程序中时,我没想到它是必要的。)

【讨论】:

  • 看起来很奇怪.. 所有目录都被创建但无法在列表视图中看到。我可以从 URL 按名称访问目录。即文件夹“Hellllworld”存在但在我的列表中不可见。当我执行win-hmpjltdbh5q:37642/client_documents/HelloWorld 时我怎么能看到它:(
  • +1。在AllowUnsafeUpdates - 如果使用SPContext.Current.Web 则不需要,但由于OP 通知SPWeb,它需要设置(即,如果在GET 期间进行原始调用并在另一个处理程序中设置AllowUnsafeUpdates)。缺少处理使用足够强大的帐户更新另一个网站的代码是可疑的,但目前还不太可能成为问题。
  • 使用AddItem而不是Items.Add在性能方面会更好,见这里:sharepoint.stackexchange.com/a/54989/17191
【解决方案2】:

我根据 Rawling 的回答开发了以下代码:

private static void CreateFolder(SPWeb web, SPList spList, SPListItem currentItem, string folderName)
{
    if (currentItem.FileSystemObjectType != SPFileSystemObjectType.Folder)
    {
        string itemUrl = web.Url + "/" + currentItem.Url.Substring(0, currentItem.Url.LastIndexOf('/'));

        var folder = spList.Items.Add(itemUrl, SPFileSystemObjectType.Folder, folderName);
        string folderUrl = itemUrl + "/" + folder.Name;

        if (!FolderExists(folderUrl, web))
        {
            try
            {
                folder.Update();
            }
            catch (Exception)
            {
                throw;
            }
        }
    }
}


public static bool FolderExists(string url, SPWeb web)
{
    if (url.Equals(string.Empty))
    {
        return false;
    }

    try
    {
        return web.GetFolder(url).Exists;
    }
    catch (ArgumentException)
    {
        throw;
    }
    catch (Exception)
    {
        throw;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-20
    • 2021-01-06
    • 1970-01-01
    • 1970-01-01
    • 2018-10-04
    • 2010-10-08
    • 2010-12-10
    相关资源
    最近更新 更多