Take the 2-minute tour ×
SharePoint Stack Exchange is a question and answer site for SharePoint enthusiasts. It's 100% free, no registration required.

I have tried everything with this issue, but cant find the error.

THe structure of my site is like this

  1. Meetings (SiteCollection, RootWeb)

    1.1 BoardOFDirectors (subsite)

    1.1.1 20120101 (subsite)

    1.1.2 20120202 (subsite)

Inside meetings there is a list called meetings. Inside each subsite there is a list called agenda points with document sets.

I created a custom action to copy agenda points from one meeting site to the next one.

I am getting the following exception in the CopyTo method. As you can see there I set the allowunsafeupdates=true everywhere. What am I missing??

Updates are currently disallowed on GET requests. To allow updates on a GET, set the 'AllowUnsafeUpdates' property on SPWeb.

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");
            }
        }
share|improve this question

1 Answer 1

up vote 0 down vote accepted

no get requests allowed for the createdocumentset or copyto methods

http://social.technet.microsoft.com/Forums/en-IN/sharepoint2010programming/thread/b2d13a96-f32b-41c5-a1ac-0c9280921f59

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.