2012-09-21 86 views
1

我有这个事件接收器C#类,我试图在SharePoint站点上实现。它不起作用。在构建好后,我已经从Visual Studio 2010部署了它。有人看到有什么问题吗?代码是否正确?或者是SP上的问题?谢谢。 - 这里是新代码EventReceiver创建文件夹共享点2010

using System; 
using System.Security.Permissions; 
using Microsoft.SharePoint; 
using Microsoft.SharePoint.Security; 
using Microsoft.SharePoint.Utilities; 
using Microsoft.SharePoint.Workflow; 

namespace EventReceiverCFolder.EventReceiver1 
{ 
    /// <summary> 
    /// List Item Events 
    /// </summary> 
    public class EventReceiver1 : SPItemEventReceiver 
    { 
     /// <summary> 
     /// An item is being added. 
     /// </summary> 
     public override void ItemAdded(SPItemEventProperties properties) 
     { 

      try 
      { 
       if (properties.ListTitle == "CF") // list where the item was added 
       { // if item was added to this list then create a folder on - Dlib - list 
        UpdateFolder(properties); 
       } 
      } 
      catch (Exception ex) 
      { 
       properties.Status = SPEventReceiverStatus.CancelWithError; 
       properties.ErrorMessage = ex.Message; 
       properties.Cancel = true; 
      } 
     } 

     private void UpdateFolder(SPItemEventProperties properties) 
     { 
      string foldername = properties.ListItem["Title"].ToString(); 

      try 
      { 
       SPSecurity.RunWithElevatedPrivileges(delegate() 
       { 
        //inside RunWithElevatedPriviliges I need to open a new site (an elevated site) 
        using (SPSite site = new SPSite(properties.Web.Site.ID)) 
        { 
         using (SPWeb web = site.OpenWeb()) 
         { 
          web.AllowUnsafeUpdates = true; 
          SPList list = web.Lists.TryGetList("DLib"); // this is doc Library where the new folder will be created 
          //note that we are creating a list item, not a folder - a folder IS a list item 
          SPListItem createdFolder = list.Items.Add(list.RootFolder.ServerRelativeUrl, SPFileSystemObjectType.Folder, null); 
          if (createdFolder != null) 
          { 
          createdFolder["Name"] = foldername; 
           createdFolder.Update(); 
          } 
          list.Update(); 
         } 
        } 
       }); 
      } 
      finally { } 
     } 
    } 
} 

回答

0

我得文件夹名称如下:

string foldername = Convert.ToString(properties.AfterProperties["Title"]); 
0

你尝试调试呢?尝试调试并告诉我们你得到了什么错误。 但在调试之前首先使用sharepoint manager来查看您的事件接收器是否正确连接。

如果你不知道如何调试的SharePoint事件接收器,那么请see this

+0

它调试很好。而且我知道它在sharepoint中起作用。看到我的其他评论。你可以看看更新的代码。最好的祝福。 – FAA

1

不要这样做:SPUser privilegedAccount = properties.Web.AllUsers[@"SHAREPOINT\SYSTEM"]; 阅读上使用SPSecurity.RunWithElevatedPrivileges。请参阅MSDN documentation here

也不要做一个使用(...的SPSite和使用块你尝试通过SPContext.Current让网络内 - 该网页将不再升高

正确的方法是沿着这些东西。线(我没有尝试这一点,所以它只是给你一个想法,你在哪里为首):

private void UpdateFolder(SPItemEventProperties properties) 
{ 
    string foldername = properties.ListItem["Title"].ToString(); 

    SPSecurity.RunWithElevatedPrivileges(delegate() 
    { 
      //inside RunWithElevatedPriviliges I need to open a new site (an elevated site) 
     using (SPSite site = new SPSite(properties.Web.Site.ID)) 
     { 
      using (SPWeb web = site.OpenWeb()) 
      { 
       web.AllowUnsafeUpdates = true; 
       SPList list = web.Lists.TryGetList("ListTitle"); //is that really the list title? 
       //note that we are creating a list item, not a folder - a folder IS a list item 
       SSPListItem createdFolder = list.Items.Add(list.RootFolder.ServerRelativeUrl, SPFileSystemObjectType.Folder, null); 
       if (newFolder != null) 
       { 
        createdFolder["Name"] = foldername; 
        createdFolder.Update(); 
       } 
       list.Update(); 
      } 
     } 
    }); 
} 

还尝试调试代码,设置断点等

+0

我已经更新了代码。有人可以看看它。看来我缺少简单的东西。如果我只使用一个列表在代码中创建定义的文件夹名称,代码将起作用。但它不适用于2个列表。有任何想法吗。谢谢 – FAA

+0

你的例外到底在哪里,异常的信息是什么。如果你能够调试,你可以给我们更多的信息。 –

+0

这里是有问题的行:-------------------- stringfoldername = properties.ListItem [“Title”]。ToString(); ------------------------------ 未将对象引用设置为对象的实例。你也可以通过newfolder指向哪里:----------------- if(newFolder!= null)---------------- - - - -谢谢 – FAA