1

问题:我有一个列表,如果我创建一个新项目,我想执行以下操作:

  1. 在 [AutoGeneratedID] 列中创建一个新的自动增量数
  2. 使用 [Titel] 和 [AutoGeneratedID] 在 List 中创建一个 HyperLink 和一个新的子站点

问题是我无法让 [AutogeneratedID] 填充一个值,因为它是一个 itemadd 事件,但是如果我尝试将代码放在一个 ItemAdding 事件中,我会遇到以下链接中描述的问题:

http://www.sharepoint-tips.com/2006/09/synchronous-add-list-event-itemadding.html

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

namespace KuC_Solution.EventReceiver1
{
/// <summary>
/// List Item Events
/// </summary>
public class EventReceiver1 : SPItemEventReceiver
{

   /// <summary>
   /// An item was added.
   /// </summary>
    public override void ItemAdded(SPItemEventProperties properties)
    {
        base.ItemAdded(properties);

        // -----------------------------------------------------------

        try
        {
            this.EventFiringEnabled = false;
            // Column name AutoGeneratedID
            string columnName = "AutoGeneratedID";
            SPSecurity.RunWithElevatedPrivileges(delegate()
            {
                using (SPWeb web = properties.OpenWeb())
                {
                    web.AllowUnsafeUpdates = true;
                    //get the current list
                    SPList list = web.Lists[properties.ListId];
                    int highestValue = 0;
                    foreach (SPListItem item in list.Items)
                    {
                        if (item[columnName] != null && item[columnName].ToString().Trim() != "")
                        {
                            string value = item[columnName].ToString();
                            try
                            {
                                int currValue = int.Parse(value);
                                if (currValue > highestValue)
                                    highestValue = currValue;
                            }
                            catch (Exception ex)
                            {
                                Trace.WriteLine(ex.Message);
                            }
                        }
                    }
                    SPListItem currItem = list.Items.GetItemById(properties.ListItem.ID);
                    currItem[columnName] = (highestValue + 1).ToString();
                    currItem.SystemUpdate(false);
                    web.AllowUnsafeUpdates = false;
                }
            });
            this.EventFiringEnabled = true;
        }
        catch (Exception ex)
        {
            Trace.WriteLine(ex.Message);
        }

        // -----------------------------------------------------------



    }
   /// <summary>
   /// An item is being added.
   /// </summary>
   public override void ItemAdding(SPItemEventProperties properties)
   {
       base.ItemAdding(properties);

       //-------------------------------------------------------------

       // Get the web where the event was raised
       SPWeb spCurrentSite = properties.OpenWeb();

       //Get the name of the list where the event was raised         
       String curListName = properties.ListTitle;

       //If the list is our list named SubSites the create a new subsite directly below the current site
       if (curListName == "TESTautoNumber")
       {
           //Get the SPListItem object that raised the event
           SPListItem curItem = properties.ListItem;
           //Get the Title field from this item. This will be the name of our new subsite
           String curItemSiteName2 = properties.AfterProperties["Title"].ToString();
           //String curItemSiteName3 = properties.AfterProperties["ID"].ToString();
           String mia = properties.AfterProperties["AutoGeneratedID"].ToString();
           String curItemSiteName = curItemSiteName2 + mia;
           //Get the Description field from this item. This will be the description for our new subsite
           //String curItemDescription = properties.AfterProperties["Projekt-ID"].ToString();
           string curItemDescription = "CREWPOINT";
           //String testme = "1";

           //Update the SiteUrl field of the item, this is the URL of our new subsite
           properties.AfterProperties["tLINK"] = spCurrentSite.Url + "/" + curItemSiteName;


           //Create the subsite based on the template from the Solution Gallery
           SPWeb newSite = spCurrentSite.Webs.Add(curItemSiteName, curItemSiteName, curItemDescription, Convert.ToUInt16(1033), "{4ADAD620-701D-401E-8DBA-B4772818E270}#myTemplate2012", false, false);
           //Set the new subsite to inherit it's top navigation from the parent site, Usefalse if you do not want this.
           newSite.Navigation.UseShared = true;
           newSite.Close();

       }
//---------------------------------------------------------------
   }
  }
}
4

0 回答 0