2012-08-13 52 views
0

我试过这个问题的一切,但无法找到错误。GET请求目前不允许更新。 ON CopyDocumentSet

我的网站的结构是这样的

会议(SiteCollection,RootWeb)

1.1 BoardOFDirectors(子网站)

1.1.1 20120101(子网站)

1.1.2 20120202 (子网站)

内部会议有一个名为会议的列表。在每个子网站内部有一个名为议程点的文件集列表。

我创建了一个自定义操作,将议程点从一个会议站点复制到下一个会议站点。

我在CopyTo方法中遇到以下异常。正如你所看到的那样,我在任何地方都设置了allowunsafeupdates = true。我在想什么?

GET请求当前不允许更新。要允许更新GET,请在SPWeb上设置'AllowUnsafeUpdates'属性。

protected void Page_Load(object sender, EventArgs e) 
     { 
      Logger.LogDebug("CopyAgendaPointToNextMeetingWithAttachments", "Page_Load(object sender, EventArgs e)", "BEGIN"); 

      string source = Request.Url.ToString(); 
      string state = Request.GetQueryStringValue(MeetingsCommon.Constants.QUERYSTRINGPARAMETER_STATE_NAME); 
      string statusMessage = Request.GetQueryStringValue(MeetingsCommon.Constants.QUERYSTRINGPARAMETER_MESSAGE_NAME); 
      this.litMessage.Text = statusMessage; 

      if (!string.IsNullOrEmpty(state)) 
       return; 

      using (SPLongOperation operation = new SPLongOperation(this.Page)) 
      { 
       SPWeb currentWeb = SPContext.Current.Web; 
       SPSite currentSite = currentWeb.Site; 
       try 
       {      
        operation.Begin(); 
        currentSite.WebApplication.FormDigestSettings.Enabled = false; 
        currentSite.RootWeb.AllowUnsafeUpdates = true; 
        currentWeb.AllowUnsafeUpdates = true; 

        string listID = Request.QueryString[MeetingsCommon.Constants.QUERYSTRINGPARAMETER_LISTID_NAME]; 
        string listItemID = Request.QueryString[MeetingsCommon.Constants.QUERYSTRINGPARAMETER_ID_NAME]; 
        string webappUrl = currentSite.WebApplication.GetResponseUri(currentSite.Zone).ToString(); 
        source = source.Replace(webappUrl.ToLower(), currentWeb.Url.ToLower() + "/"); 

        SPSecurity.RunWithElevatedPrivileges(() => 
        { 
         SPList currentList = currentWeb.GetSafeListByGuid(new Guid(listID)); 
         SPListItem item = currentList.GetItemById(Convert.ToInt32(listItemID)); 
         SPWeb siteCollectionRootWeb = currentWeb.ParentWeb.ParentWeb.Site.RootWeb; 
         string type = currentWeb.Name.Substring(0, 2); 
         SPList listMeetingsRoot = siteCollectionRootWeb.GetSafeListByName(Meetings.Common.Constants.LISTS_MEETINGCALENDAR_NAME); 


         SPQuery query = new SPQuery(); 
         query.Query = string.Concat(
          "<Where>", 
          "<And>", 
          "<BeginsWith>", 
           "<FieldRef Name='" + Meetings.Common.Constants.FIELDS_TEXT_TITLE_NAME + "' />", 
           "<Value Type='Text'>" + type + "</Value>", 
          "</BeginsWith>", 
          "<Gt>", 
           " <FieldRef Name='" + Meetings.Common.Constants.FIELDS_EVENTDATE_NAME + "' />", 
           "<Value Type='DateTime'><Today /></Value>", 
          "</Gt>",         
          "</And>", 
          "</Where>"); 
         query.RowLimit = 1; 

         SPListItemCollection itemsMeetings = listMeetingsRoot.GetItems(query); 
         if (itemsMeetings.Count == 1) 
         { 
          SPFieldUrlValue value = new SPFieldUrlValue(itemsMeetings[0][Meetings.Common.Constants.FIELDS_MEETINGSITEURL_NAME].ToString()); 
          string urlOfNextMeetingSite = value.Url; 
          using (SPSite nextMeetingSite = new SPSite(urlOfNextMeetingSite)) 
          { 
           using (SPWeb nextMeetingWeb = nextMeetingSite.OpenWeb()) 
           { 
            try 
            { 
             nextMeetingSite.RootWeb.AllowUnsafeUpdates = true; 
             nextMeetingWeb.ParentWeb.AllowUnsafeUpdates = true; 
             nextMeetingWeb.AllowUnsafeUpdates = true; 
             SPList targetList = nextMeetingWeb.GetSafeListByName(MeetingsCommon.Constants.LISTS_AGENDAPOINTS_NAME); 
             SPDocumentLibrary targetDocumentLibrary = nextMeetingWeb.GetSafeDocumentLibraryByName(MeetingsCommon.Constants.LISTS_AGENDAPOINTS_NAME); 
             SPContentTypeId targetCTId = targetList.ContentTypes.BestMatch(new SPContentTypeId(MeetingsCommon.Constants.CONTENTTYPES_AGENDAPOINT_ID)); 
             string id = itemsMeetings[0]["UniqueId"].ToString(); 

             DocumentSet sourceDocumentSet = DocumentSet.GetDocumentSet(item.Folder); 
             DocumentSet targetDocumentSet = null; 
             if (sourceDocumentSet != null) 
             { 
              targetDocumentSet = sourceDocumentSet.CopyTo(targetList.RootFolder, targetCTId); 
              SPListItem destinationListItem = targetDocumentSet.Item; 
              destinationListItem[MeetingsCommon.Constants.FIELDS_AGENDAPOINTSRECURRENT_NAME] = "False"; 
              destinationListItem[MeetingsCommon.Constants.FIELDS_AGENDAPOINTSCOPYATTACHMENTS_NAME] = "False"; 
              destinationListItem.Update(); 
              statusMessage = string.Format(HelperFunctions.GetResourceString(MeetingsCommon.Constants.RESOURCES_FILE_NAME, "Message_CopyAgendaPoint"), nextMeetingWeb.Url, nextMeetingWeb.Name); 
             } 
            } 
            catch (Exception) 
            { 
             throw; 
            } 
            finally 
            { 
             nextMeetingWeb.AllowUnsafeUpdates = false; 
             nextMeetingWeb.ParentWeb.AllowUnsafeUpdates = false; 
             nextMeetingSite.RootWeb.AllowUnsafeUpdates = false; 
            }          
           } 
          } 
         } 
         else 
         { 
          statusMessage = HelperFunctions.GetResourceString(MeetingsCommon.Constants.RESOURCES_FILE_NAME, "Message_CopyAgendaPointNoNextSiteFound"); 
         } 
        }); 
       } 
       catch (Exception ex) 
       { 
        Logger.LogError("CopyAgendaPointToNextMeetingWithAttachments", "Page_Load(object sender, EventArgs e)", ex); 
        statusMessage = ex.Message; 
       } 
       finally 
       { 
        statusMessage = HttpUtility.UrlEncode(statusMessage);          
        currentWeb.AllowUnsafeUpdates = false; 
        currentSite.RootWeb.AllowUnsafeUpdates = false; 
        currentSite.WebApplication.FormDigestSettings.Enabled = true; 
        operation.End(source, Microsoft.SharePoint.Utilities.SPRedirectFlags.DoNotEncodeUrl, HttpContext.Current, "&state=completed&message=" + statusMessage); 
       } 
       Logger.LogDebug("CopyAgendaPointToNextMeetingWithAttachments", "Page_Load(object sender, EventArgs e)", "END"); 
      } 
     } 

回答

相关问题