Не знаете с чего начать. У меня есть настройка кода для создания нового сайта, а затем скопируйте внешний вид, списки и веб-страницы с сайта шаблона.SharePoint - клонирование веб-частей с сайта шаблона на новый сайт - ошибка XML
ЭТО РАБОТАЕТ ИСПЫТАНИЕ КОГДА ВХОДИТ В СИСТЕМУ ADMIN!
foreach (Microsoft.SharePoint.WebPartPages.WebPart webPartTemplate in webPartCollectionTemplate)
{
try
{
MemoryStream memoryStream = new MemoryStream();
XmlTextWriter xmlWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
webPartManagerTemplate.ExportWebPart(webPartTemplate, xmlWriter);
xmlWriter.Flush();
memoryStream.Flush();
memoryStream.Position = 0;
XmlTextReader xmlReader = new XmlTextReader(memoryStream);
Microsoft.SharePoint.WebPartPages.ListViewWebPart listViewWebPartTemplate = null;
Microsoft.SharePoint.WebPartPages.ListViewWebPart listViewWebPartTarget = null;
Microsoft.SharePoint.WebPartPages.WebPart webPartTarget = null;
bool webPartIsListViewWebPart = false;
// If it throws an exception, the web part is not a ListViewWebPart
try
{
listViewWebPartTemplate = (ListViewWebPart)webPartTemplate;
webPartIsListViewWebPart = true;
}
catch { }
if (webPartIsListViewWebPart)
{
string errorMessage = "";
listViewWebPartTarget = (Microsoft.SharePoint.WebPartPages.ListViewWebPart)webPartManagerTarget.ImportWebPart(xmlReader, out errorMessage);
if (errorMessage != null)
// log it
// Drop the brackets from the Guid and create a Guid object from the string. Then use it to find the list so we can get the title.
SPList listTemplate = webTemplate.Lists[new Guid(listViewWebPartTemplate.ListName.ToString().TrimStart('{').TrimEnd('}'))];
SPList listTarget = webTarget.Lists[listTemplate.Title];
listViewWebPartTarget.ListName = listTarget.ID.ToString("B").ToUpper();
listViewWebPartTarget.WebId = webTarget.ID;
listViewWebPartTarget.TitleUrl = webPartTemplate.TitleUrl.ToString().Replace(siteTemplate.ServerRelativeUrl, siteTarget.ServerRelativeUrl);
listViewWebPartTarget.Title = webPartTemplate.Title;
listViewWebPartTarget.ZoneID = webPartTemplate.ZoneID;
webPartDictTarget.Add(listViewWebPartTarget.ZoneID + webPartTemplate.ZoneIndex.ToString(), listViewWebPartTarget);
}
else
{
string errorMessage = "";
webPartTarget = (Microsoft.SharePoint.WebPartPages.WebPart)webPartManagerTarget.ImportWebPart(xmlReader, out errorMessage);
if (errorMessage != null)
// log it
webPartTarget.ChromeType = webPartTemplate.ChromeType;
webPartTarget.TitleUrl = webPartTemplate.TitleUrl.ToString().Replace(siteTemplate.ServerRelativeUrl, siteTarget.ServerRelativeUrl);
webPartTarget.Title = webPartTemplate.Title;
webPartTarget.ZoneID = webPartTemplate.ZoneID;
webPartDictTarget.Add(webPartTarget.ZoneID + webPartTemplate.ZoneIndex.ToString(), webPartTarget);
}
}
catch (Exception ex)
{
}
}
// Acquire keys and sort them.
List<string> list = new List<string>(webPartDictTarget.Keys);
list.Sort();
// Loop through keys.
int i = 0;
foreach (var key in list)
{
try
{
Microsoft.SharePoint.WebPartPages.WebPart wpTmp = (Microsoft.SharePoint.WebPartPages.WebPart)webPartDictTarget[key];
webPartManagerTarget.AddWebPart(wpTmp, wpTmp.ZoneID, i);
}
catch (Exception ex)
{
}
i++;
}
Ошибка генерируется на следующей строке:
webPartManagerTarget.AddWebPart(wpTmp, wpTmp.ZoneID, i);
Трассировка стека следует { "Был ошибка при генерации документа XML."}:
в System.Xml.Serialization.XmlSerializer.Serialize (XmlWriter xmlWriter, Object o, XmlSerializerNamespaces пространства имен, строка encodingStyle, String ID) в System.Xml.Serialization.XmlSerializer.Serialize (XmlWriter XMLWriter, Object о) на Microsoft.SharePoint.WebPartPages.WebPart.SerializeXml (XmlWriter писатель, XMLSerializer XMLs, Boolean shouldSerializeAll) в Microsoft .SharePoint.WebPartPages.WebPart.WriteXmlAsBytes (XMLSerializer XMLs) при Microsoft.SharePoint.WebPartPages.WebPart.WriteXmlGlobal (Boolean disableSafeControlsCheck) при Microsoft.SharePoint.WebPartPages.BinaryWebPartSerializer.Serialize (PersonalizationScope охват) на Microsoft.SharePoint .WebPartPages.BinaryWebPartSerializer.get_Links() по адресу Microsoft.SharePoint.WebPartPages.SPWebPartManager.AddWebPartToStore (WebPart WebPart, Int32 viewId, String viewGuid) на Microsoft.SharePoint.WebPartPages.SPWebPartManager.AddWebPartInternal (SPSupersetWebPart надмножеству, Boolean throwIfLocked) в Microsoft.SharePoint.WebPartPages.SPLimitedWebPartManager. AddWebPartInternal (WebPart WebPart, Строка ZoneId, Int32 zoneIndex, булева throwIfLocked) при Microsoft.SharePoint.WebPartPages.SPLimitedWebPartManager.AddWebPart (WebPart WebPart, Строка ZoneId, Int32 zoneIndex) при admSitePanelSolution.admSiteCreateCollection. <> c_ DisplayClasse.b _c()
И InnerException { "Доступ запрещен (Исключение из HRESULT: 0x80070005 (E_ACCESSDENIED))."}:
в Microsoft.SharePoint .SPGlobal.HandleUnauthorizedAccessException (UnauthorizedAccessException ех) в Microsoft.SharePoint.Library.SPRequest.GetViewsSchemaXml (String bstrUrl, String bstrListName, Boolean bFullBlown, ISP2DSafeArrayWriter p2DWriter, Int32 & plDefaultViewIndex) в Microsoft.SharePoint.SPViewCollection.EnsureViewSchema (Boolean fullBlownSchema) в Microsoft.SharePoint.SPViewCollection..ctor (список SPList) в Microsoft.SharePoint.SPList.get_Views() в Microsoft.SharePoint.SPList. get_DefaultView() в Microsoft.SharePoint.SPList.get_DefaultViewUrl() в Microsoft.SharePoint.WebPartPages.ListViewWebPart.ShouldSerializeDetailLink() на Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterListViewWebPart.Write9_ListViewWebPart (String н, String нс, ListViewWebPart о, булевой IsNullable, булева needType) на Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterListViewWebPart.Write10_WebPart (Объект o)
Может ли кто-нибудь помочь, почему это происходит, когда вы не вошли в систему как администратор системы. Этот весь блок также работает внутри повышенных привилегий, а SPSite и SPWeb также создаются внутри повышенного блока. Этот код является выдержкой.
UPDATE
Если я пользователь владелец коллекции сайта коллекции базового сайта, то выше код работает отлично. Итак, что в приведенном выше коде сбрасывает контекст или требует ссылки на базовый сайт. Спасибо.