私はこの問題ですべてを試しましたが、エラーを見つけることができません。
私のサイトの構造はこんな感じです
ミーティング(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");
}
}