Redirect user to another SharePoint page after adding List Items
Redirecting a user to another SharePoint Application page immediately after a new item is added to a list isn’t exactly an easy task. You would think that by adding a new SharePoint event handler to a list, you could easily intercept the newly submitted item and perform additional actions. But, you would be mistaken.For this example, a user needs to perform additional tasks after a new SharePoint list item has been added to a list. I my case, I wanted the user to create a new SharePoint list item of information that needed to be emailed to a certain group of people, based on what he/she selected in the new list item form.
What I had to do to redirect a user to another SharePoint application page
Create an Event Handler for the list and overriding the ‘ItemAdding’ method to:
- Create a new SharePoint list item
- Generate a unique ID for the new item. Since the ‘ItemAdding’ event happens before the item is added, no item ID exists.
- Redirect the user to a custom SharePoint application page, allowing the user to select the recipients of a custom email about the newly created list item. In my case, I wanted the user to select the recipients from another list. This new custom application page queries that list for recipients.
- On submit, update the newly created list item (from step 1) with the recipients of the email.
- Using System.Net.Mail, send an email and redirect the user to a “successful submission” application page.
SharePoint Code to make this work:
02.
using
System.IO;
03.
using
System.Web;
04.
using
Microsoft.SharePoint;
05.
using
Microsoft.SharePoint.Utilities;
06.
using
Microsoft.SharePoint.WebControls;
07.
using
System.Web.UI.WebControls;
08.
using
System.Web.UI;
09.
10.
namespace
SPD.MyCustomSolution {
11.
class
SPDEventHandlers : SPItemEventReceiver {
2.
private
string
itemID =
string
.Empty;
3.
4.
public
SPDEventHandlers() {
5.
if
(context ==
null
) {
6.
context = HttpContext.Current;
7.
}
8.
}
02.
Guid entryGuid = Guid.NewGuid();
03.
04.
try
{
05.
using
(SPSite site =
new
SPSite(properties.SiteId)) {
06.
using
(SPWeb web = site.OpenWeb(properties.RelativeWebUrl)) {
07.
SPList list = web.Lists[properties.ListId];
08.
09.
DisableEventFiring();
//BREAK THE ORIGINAL LIST ITEM THREAD AND START FROM SCRATCH
02.
SPListItem itemToAdd = list.Items.Add();
03.
04.
//GET NEW FORM ENTRIES (aka 'AfterProperties') AND ADD THEM TO THE NEW LIST ITEM
05.
try
{
06.
if
(properties.AfterProperties["Title"] !=
null
) {
07.
itemToAdd["Title"] = properties.AfterProperties["Title"];
08.
}
09.
}
catch
(Exception ex) {
10.
//LogEventError(ex.ToString());
11.
}
12.
13.
//since new list item isn't know yet, create and add a unique id for this new entry
14.
// the 'myEntryGUIDField' is a metadata field in the list.
15.
try
{
16.
itemToAdd["myEntryGUIDField"] = entryGuid.ToString();
17.
}
catch
(Exception ex) {
18.
//LogEventError(ex.ToString());
19.
}
20.
21.
//must update this list item to get the ID of the new item being created
22.
itemToAdd.SystemUpdate();
01.
//IF USER ADD's ATTACHMENT, ADD THEM TO THE NEW LIST ITEM
02.
Stream fStream;
03.
string
fileName =
string
.Empty;
04.
byte
[] contents;
05.
if
(context !=
null
) {
06.
if
(context.Request.Files.Count < 0) {
07.
try
{
08.
09.
HttpFileCollection aFiles = context.Request.Files;
10.
for
(
int
i = 0; i < aFiles.Count; i++) {
11.
HttpPostedFile userFile = aFiles[i];
12.
fileName = userFile.FileName.Substring(3);
13.
14.
fStream = userFile.InputStream;
15.
contents =
new
byte
[fStream.Length];
16.
fStream.Position = 0;
17.
18.
fStream.Read(contents, 0, (
int
)fStream.Length);
19.
fStream.Close();
20.
21.
itemToAdd.Attachments.Add(fileName, contents);
22.
itemToAdd.SystemUpdate();
23.
}
24.
25.
}
catch
(Exception ex) {
26.
//LogEventError(ex.ToString());
27.
}
28.
}
else
{
29.
// do something
30.
}
31.
}
02.
03.
//must cancel otherwise duplicate list entry will be made
04.
properties.Status = SPEventReceiverStatus.CancelNoError;
05.
06.
}
07.
}
08.
}
catch
(Exception ex) {
09.
//LogEventError(ex.ToString());
10.
}
2.
SPUtility.Redirect(properties.RelativeWebUrl +
3.
"http:
//myownsite/Pages/CustomPage.aspx?myID=" +
4.
entryGuid.ToString(), SPRedirectFlags.Trusted, context);
5.
}
6.
}
7.
}
No comments:
Post a Comment