The following example shows code that attempts to run in a sandboxed solutuon. There are four buttons, each of which attempt a different type of action, as follows: - renderWebInfo_Click: This operation will be allowed to run in the sandbox. - renderWebInfoElevated_Click: This operation will not be allowed to run in the sandbox. The sandbox will catch the exception, so the catch{} block will not run. - accessProhibitedNamespace_Click: This operation will not be allowed to run in the sandbox. However, the exception will be caught by the catch{} block. - renderCrossSiteData_Click: This operation will not be allowed to run in the sandbox. The sandbox will catch the exception, so the catch{} block will not run
namespace SBWebPart.SandboxedWebPart{ [ToolboxItemAttribute(false)] public class SandboxedWebPart : WebPart { public SandboxedWebPart() { } LiteralControl output; protected override void CreateChildControls() { Button renderWebInfo = new Button(); renderWebInfo.Text = "Access data in this site"; renderWebInfo.Click += new EventHandler(renderWebInfo_Click); Button renderWebInfoElevated = new Button(); renderWebInfoElevated.Text = "Use elevated privileges"; renderWebInfoElevated.Click += new EventHandler(renderWebInfoElevated_Click); Button accessProhibitedNamespace = new Button(); accessProhibitedNamespace.Text = "Create an HTTP connection "; accessProhibitedNamespace.Click += new EventHandler(accessProhibitedNamespace_Click); Button renderCrossSiteData = new Button(); renderCrossSiteData.Text = "Access data in other site collections"; renderCrossSiteData.Click += new EventHandler(renderCrossSiteData_Click); output = new LiteralControl(); output.Text = ""; this.Controls.Add(output); this.Controls.Add(new LiteralControl("<br />")); this.Controls.Add(renderWebInfo); this.Controls.Add(renderWebInfoElevated); this.Controls.Add(accessProhibitedNamespace); this.Controls.Add(renderCrossSiteData); base.CreateChildControls(); }
void renderWebInfo_Click(object sender, EventArgs e) { try { SPWeb thisWeb = SPContext.Current.Web; string message = string.Format("This web contains {0} subwebs", thisWeb.Webs.Count); output.Text = message; } catch(Exception ex) { output.Text = ex.Message; } }
void renderWebInfoElevated_Click(object sender, EventArgs e) { try { SPSecurity.RunWithElevatedPrivileges(showWebCount); } catch (Exception ex) { output.Text = "My Caught Error: " + ex.Message; } } void showWebCount() { SPWeb thisWeb = SPContext.Current.Web; string message = string.Format("This web contains {0} subwebs", thisWeb.Webs.Count); output.Text = message; }
void accessProhibitedNamespace_Click(object sender, EventArgs e) { try { System.Net.HttpWebRequest.Create("http://intranet.contoso.com"); output.Text = "Success"; } catch (Exception ex) { output.Text = "My Caught Error: " + ex.Message; } }
void renderCrossSiteData_Click(object sender, EventArgs e) { try { SPWeb thisWeb = SPContext.Current.Web; SPSiteDataQuery crossSiteQuery = new SPSiteDataQuery(); crossSiteQuery.Lists = "<Lists ServerTemplate='104' />"; crossSiteQuery.Webs = "<Webs Scope='Recursive' />"; string message = string.Format("There are {0} lists", thisWeb.GetSiteData(crossSiteQuery).Rows.Count.ToString()); output.Text = message; } catch (Exception ex) { output.Text = "My Caught Error: " + ex.Message; } } protected override void RenderContents(HtmlTextWriter writer) { base.RenderContents(writer); } }}