어디에서 시작해야할지 잘 모르겠습니다. 새로운 사이트를 만들고 템플릿 사이트에서 모양, 목록 및 웹 파트를 복사하는 코드 설정이 있습니다.SharePoint - 템플릿 사이트에서 새 사이트로 웹 파트 복제 - XML 오류
시스템 관리자가 시스템 관리자로 로그인 할 때 유용한 정보!
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 문서를 생성하는 동안 오류가 발생했습니다."} :
XmlWriter xmlWriter, Object o, XmlSerializerNamespaces 네임 스페이스, 문자열 마이크로 소프트 Microsoft.SharePoint.WebPartPages.WebPart.SerializeXml (XmlWriter를 작가, XmlSerializer가의 XMLS, 부울 shouldSerializeAll)에서 System.Xml.Serialization.XmlSerializer.Serialize (XmlWriter를 XmlWriter를, 개체 O)에서3210 인코딩 스타일, 문자열 ID) Microsoft.SharePoint에서 Microsoft.SharePoint.WebPartPages.BinaryWebPartSerializer.Serialize (PersonalizationScope 범위)에서 Microsoft.SharePoint.WebPartPages.WebPart.WriteXmlGlobal (부울 disableSafeControlsCheck)에서 .SharePoint.WebPartPages.WebPart.WriteXmlAsBytes (XmlSerializer를 XMLS) .WebPartPages.BinaryWebPartSerializer.get_Links() at Microsoft.SharePoint.WebPartPages.SPWebPartManager.AddWebPartToStore Microsoft.SharePoint.WebPartPages.SPLimitedWebPartManager에서 Microsoft.SharePoint.WebPartPages.SPWebPartManager.AddWebPartInternal에서 (는 WebPart 는 WebPart, INT32는 viewId 문자열 viewGuid) (SPSupersetWebPart 수퍼 부울 throwIfLocked). admSitePanelSolution.admSiteCreateCollection에서 AddWebPartInternal (는 WebPart 는 WebPart, 문자열 zoneId, INT32 zoneIndex, 부울 throwIfLocked) Microsoft.SharePoint.WebPartPages.SPLimitedWebPartManager.AddWebPart에서 (는 WebPart 는 WebPart, 문자열 zoneId, INT32 zoneIndex). <> C_ DisplayClasse.b _C()
그리고의 InnerException { "액세스가 거부되었습니다 (HRESULT에서 예외 : 0x80070005입니다 (E_ACCESSDENIED))."} : Microsoft.SharePoint에서
.SPGlobal.HandleUnauthorizedAccessException Microsoft.SharePoint.Library.SPRequest.GetViewsSchemaXml에서 (UnauthorizedAccessException 예) (문자열 bstrUrl, 문자열 bstrListName, 부울 bFullBlown, ISP2DSafeArrayWriter p2DWriter, INT32 Microsoft.SharePoint.SPList에서 Microsoft.SharePoint.SPList.get_Views()에서 Microsoft.SharePoint.SPViewCollection..ctor (SPList 목록)에서 Microsoft.SharePoint.SPViewCollection.EnsureViewSchema에서 88,plDefaultViewIndex) (부울 fullBlownSchema). get_DefaultView() 에서 Microsoft.SharePoint.SPList.get_DefaultViewUrl() 에서 Microsoft.SharePoint.WebPartPages.ListViewWebPart. Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterListViewWebPart.Write10_WebPart에서 Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterListViewWebPart.Write9_ListViewWebPart (문자열 N 문자열 NS, ListViewWebPart 오 부울 ISNULLABLE 부울 needType) 에서 ShouldSerializeDetailLink() (개체 o)
누구든지 시스템 관리자로 로그인하지 않은 경우 사용자에게 도움을 줄 수 있습니까? 이 전체 블록은 상승 된 권한 내에서 실행되며 SPSite 및 SPWeb도 상승 된 블록 내부에서 인스턴스화됩니다. 이 코드는 발췌 부분입니다. 나는 사용자 기본 사이트 모음의 사이트 모음 소유자 할 경우
UPDATE
는 다음 위의 코드는 잘 실행됩니다. 따라서 위의 코드에서 컨텍스트를 다시 설정하거나 기본 사이트 모음을 참조해야합니다. 고맙습니다.