2012-06-18 95 views
1

我已編譯沙盒Web部件並將其部署到Sharepoint 2010服務器。然而,當我嘗試將其添加到頁面,我得到以下錯誤將沙盒解決方案Web部件添加到Sharepoint 2010中的頁面時出錯

未處理的異常是由沙盒代碼封裝的執行方法在部分信任的應用程序域拋出:$資源:核心,ImportErrorMessage

我下面列出了我的沙盒Web代碼。我不知道如何解決這個錯誤,或者工作是什麼原因造成的問題

using System; 
using System.ComponentModel; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using Microsoft.SharePoint; 
using Microsoft.SharePoint.WebControls; 
using System.Web.UI.HtmlControls; 
using System.Collections.Generic; 
using System.Text; 

namespace Competency_Assessment.wp_selectRatings 
{ 
[ToolboxItemAttribute(false)] 
public class wp_selectRatings : WebPart 
{ 

    [Serializable] 
    private class Rating 
    { 
     public String rating; 
     public String competency; 
     public String accountname; 
     public String revieweraccount; 
     public String itemid; 
     public Boolean updatable; 
    } 

    //Start by declaring ASP.NET controls in the class scope 
    SPWeb thisWeb = SPContext.Current.Web; 
    SPList ratingsList; 
    SPList competencyList; 
    Panel hiddenPanel; 
    Button submitRatingsButton; 
    RadioButtonList exampleRadioButtonList; 
    TextBox t1; 
    //TextBox t2; 
    Button refreshPersonButton; 
    String cuser = ""; 
    String cusername = ""; 
    List<Rating> ratings = new List<Rating>(); 
    System.Web.Script.Serialization.JavaScriptSerializer js = new System.Web.Script.Serialization.JavaScriptSerializer(); 


    protected override void OnInit(EventArgs e) 
    { 
     ratingsList = thisWeb.Lists["Competency Ratings"]; 
     competencyList = thisWeb.Lists["Competencies"]; 
     LoadRatings(); 
     base.OnInit(e); 
    } 

    //protected override void RenderContents(HtmlTextWriter writer) 
    //{ 
    // StringBuilder js = new StringBuilder(); 

    // js.AppendLine(" var head = document.getElementsByTagName(\"head\")[0];"); 
    // js.AppendLine(" if(document.createStyleSheet)"); 
    // js.AppendLine(" {"); 
    // js.AppendLine(" document.createStyleSheet('" + SPContext.Current.Site.Url + "/Lists/Assets/Styles1.css" + "');"); 
    // js.AppendLine(" } else {"); 
    // js.AppendLine(" var css = document.createElement('link');"); 
    // js.AppendLine(" css.type = 'text/css';"); 
    // js.AppendLine(" css.rel = 'stylesheet';"); 
    // js.AppendLine(" css.href = '" + SPContext.Current.Site.Url + "/Lists/Assets/Styles1.css" + "';"); 
    // js.AppendLine(" head.appendChild(css);"); 
    // js.AppendLine(" }"); 

    // base.RenderContents(writer); 

    // writer.AddAttribute(HtmlTextWriterAttribute.Type, "text/javascript"); 
    // writer.RenderBeginTag(HtmlTextWriterTag.Script); 
    // writer.WriteLine(js.ToString()); 
    // writer.RenderEndTag(); 
    //} 

    protected override void CreateChildControls() 
    { 

     //Testing textboxes 
     t1 = new TextBox(); 
     //t2 = new TextBox(); 

     this.Controls.Add(t1); 
     //this.Controls.Add(t2); 

     refreshPersonButton = new Button(); 
     refreshPersonButton.Text = "Search"; 
     refreshPersonButton.Click += new EventHandler(refreshPersonButton_Click); 
     this.Controls.Add(refreshPersonButton); 

     //Set up the panel control 
     hiddenPanel = new Panel(); 
     hiddenPanel.GroupingText = "Competency Ratings"; 
     //We'll hide it by default. 
     hiddenPanel.Visible = false; 
     this.Controls.Add(hiddenPanel); 

     hiddenPanel.Controls.Add(new LiteralControl("<br/>")); 
     hiddenPanel.Controls.Add(new LiteralControl("<table id='table-6'>")); 


     //iterate the matching entries 
     string prevname = ""; 
     string currentname = ""; 
     foreach (Rating rating in ratings) 
     { 
      currentname = rating.accountname; 
      if (!currentname.Equals(prevname)) 
      { 
       //Table Heading 
       hiddenPanel.Controls.Add(new LiteralControl("<tr>")); 
       hiddenPanel.Controls.Add(new LiteralControl("<td colspan='2' class='namestyle'>" + currentname.ToUpper() + "</td>")); 
       hiddenPanel.Controls.Add(new LiteralControl("</tr>")); 
      } 
      prevname = rating.accountname; 

      hiddenPanel.Controls.Add(new LiteralControl("<tr>")); 

      hiddenPanel.Controls.Add(new LiteralControl("<td>")); 

      Label l1 = new Label(); 
      l1.Text = rating.competency; 
      hiddenPanel.Controls.Add(l1); 

      hiddenPanel.Controls.Add(new LiteralControl("</td><td>")); 

      //Set up the radio button list 
      exampleRadioButtonList = new RadioButtonList(); 

      exampleRadioButtonList.ID = rating.itemid; 

      exampleRadioButtonList.RepeatDirection = RepeatDirection.Horizontal; 

      exampleRadioButtonList.Items.Add("1"); 
      exampleRadioButtonList.Items.Add("2"); 
      exampleRadioButtonList.Items.Add("3"); 
      exampleRadioButtonList.Items.Add("4"); 
      exampleRadioButtonList.Items.Add("5"); 
      exampleRadioButtonList.SelectedValue = rating.rating; 
      exampleRadioButtonList.Enabled = rating.updatable; 

      hiddenPanel.Controls.Add(exampleRadioButtonList); 

      hiddenPanel.Controls.Add(new LiteralControl("</td>")); 
      hiddenPanel.Controls.Add(new LiteralControl("</tr>")); 
     } 
     hiddenPanel.Controls.Add(new LiteralControl("</table>")); 

     //Set up the Submit Ratings button 
     submitRatingsButton = new Button(); 
     submitRatingsButton.Text = "Submit ratings"; 
     //handle the button's click event 
     submitRatingsButton.Click += new EventHandler(submitRatingsButton_Click); 
     hiddenPanel.Controls.Add(submitRatingsButton); 
    } 


    private void LoadRatings() 
    { 
     //clear ratings 
     ratings.Clear(); 

     //Set the query to search for existing ratings 
     SPQuery query = new SPQuery(); 
     query.ViewFields = "<FieldRef Name='Rating'/>" + "<FieldRef Name='Title'/>" + "<FieldRef Name='Employee'/>"; 
     if (cuser.Equals("")) 
     { 
      query.Query = "<OrderBy><FieldRef Name='Employee' /></OrderBy>"; 
     } 
     else 
     { 
      query.Query = "<Where><Contains><FieldRef Name='Title' /><Value Type='Text'>" + cuser + "</Value></Contains></Where>" + "<OrderBy><FieldRef Name='Employee' /></OrderBy>"; 

     } 


     SPListItemCollection collListItems = ratingsList.GetItems(query); 

     foreach (SPListItem item in collListItems) 
     { 
      Rating thisrating = new Rating(); 
      SPFieldUser field = item.Fields["Employee"] as SPFieldUser; 

      if (field != null) 
      { 
       SPFieldUserValue fieldValue = field.GetFieldValue(item["Employee"].ToString()) as SPFieldUserValue; 
       if (fieldValue != null) 
       { 
        thisrating.accountname = fieldValue.User.Name; 
       } 
       else 
       { 
        thisrating.accountname = ""; 
       } 
      } 
      else 
      { 
       thisrating.accountname = ""; 
      } 
      //thisrating.accountname = cuser; 
      thisrating.rating = ((double)item["Rating"]).ToString(); 
      thisrating.competency = item.Title; 
      thisrating.itemid = item.ID.ToString(); 
      thisrating.revieweraccount = "SHAREPOINT\\system"; 
      if (canPersonRate(thisrating.competency)) 
      { 
       thisrating.updatable = true; 
      } 
      ratings.Add(thisrating); 
     } 


    } 


    private Boolean canPersonRate(string competencyname) 
    { 
     Boolean canrate = false; 
     SPQuery query = new SPQuery(); 
     query.Query = "<Where><Eq><FieldRef Name='Title'/><Value Type='Text'>" + competencyname + "</Value></Eq></Where>"; 
     query.ViewFields = "<FieldRef Name='Owner'/>"; 

     SPListItemCollection collListItems = competencyList.GetItems(query); 

     foreach (SPListItem item in collListItems) 
     { 

      SPFieldUser field = item.Fields["Owner"] as SPFieldUser; 

      if (field != null) 
      { 
       SPFieldUserValue fieldValue = field.GetFieldValue(item["Owner"].ToString()) as SPFieldUserValue; 
       if (fieldValue != null) 
       { 
        string str = fieldValue.User.LoginName; 
        if (str == SPContext.Current.Web.CurrentUser.LoginName) 
        { 
         canrate = true; 
        } 
       } 
      } 
     } 
     return canrate; 
    } 


    protected override object SaveViewState() 
    { 
     object[] state = new object[4]; 
     state[0] = cuser; 
     state[1] = cusername; 
     state[2] = js.Serialize(ratings); 
     state[3] = base.SaveViewState(); 
     return state; 
    } 

    protected override void LoadViewState(object savedState) 
    { 
     if (savedState != null) 
     { 
      object[] state = (object[])savedState; 
      cuser = (string)state[0]; 
      cusername = (string)state[1]; 
      //Rating[] myArray = (Rating[])state[2]; 
      //ratings = (List<Rating>)state[2]; 
      //ratings = new List<Rating>(myArray); 
      ratings = js.Deserialize<List<Rating>>((string)state[2]); 
      base.LoadViewState(state[3]); 
     } 
     else 
     { 
      base.LoadViewState(savedState); 
     } 
    } 

    void refreshPersonButton_Click(object sender, EventArgs e) 
    { 

     Controls.Clear(); 
     ClearChildViewState(); 
     ChildControlsCreated = false; 

     //Refresh ratings display 
     cuser = t1.Text; 
     //cusername = t2.Text; 
     LoadRatings(); 

     EnsureChildControls(); 
     t1.Text = cuser; 
     //t2.Text = cusername; 
     //Show the hidden panel 
     hiddenPanel.Visible = true; 

    } 

    void submitRatingsButton_Click(object sender, EventArgs e) 
    { 
     //hiddenPanel.Visible = false; 

     foreach (Rating rating in ratings) 
     { 
      //get current value of control to check if value has changed 
      Control ratingctrl = (FindControl(rating.itemid)); 
      if (ratingctrl == null) 
      { 
       //No matching rating control found 
      } 
      else 
      { 
       String cval = ((RadioButtonList)ratingctrl).SelectedValue; 
       //Only update List item if the rating has changed! 
       if (cval != rating.rating) 
       { 
        SPItem itemtoupdate = ratingsList.GetItemById(Convert.ToInt32(rating.itemid)); 
        itemtoupdate["Rating"] = cval; 
        itemtoupdate.Update(); 

       } 
      } 

     } 
    } 
} 

}

回答

1

JavaScriptSerializer需要ReflectionPermission運行。我認爲根據this article關於限制沙盒解決方案在SharePoint 2010中的限制,沙盒解決方案不會被授予此權限。

相關問題