どこから開始するのかわかりません。新しいサイトを作成し、テンプレートサイトからルック、リスト、Webパーツをコピーするコード設定があります。SharePoint - テンプレートサイトから新しいサイトにWebパーツを複製する - 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++;
}
誤差は次の行に投げられる:スタックトレースが{ "XMLドキュメントを生成中にエラーが発生しました"}以下
webPartManagerTarget.AddWebPart(wpTmp, wpTmp.ZoneID, i);
:
XmlWriter xmlWriter、Object o、XmlSerializerNamespaces名前空間、文字列マイクロソフトの Microsoft.SharePoint.WebPartPages.WebPart.SerializeXml(XmlWriterを ライター、のXmlSerializer XMLS、ブールshouldSerializeAll)で System.Xml.Serialization.XmlSerializer.Serialize(XmlWriterをしたXmlWriter、 オブジェクトO)で3210 encodingStyleを、文字列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.SPLimitedWebPartManagerでMicrosoft.SharePoint.WebPartPages.SPWebPartManager.AddWebPartInternal(SPSupersetWebPart スーパーセット、ブールthrowIfLocked)で210 Microsoft.SharePoint.WebPartPages.SPWebPartManager.AddWebPartToStore(Webパーツ Webパーツ、のInt32のviewId、ストリングviewGuid)。 admSitePanelSolution.admSiteCreateCollectionでMicrosoft.SharePoint.WebPartPages.SPLimitedWebPartManager.AddWebPart(Webパーツ Webパーツ、文字するzoneid、のInt32 zoneIndex)でAddWebPartInternal(Webパーツ Webパーツ、文字するzoneid、のInt32 zoneIndex、ブールthrowIfLocked)。 <> C_ DisplayClasse.b _c()
とのInnerException { "アクセスが拒否されました(HRESULTからの例外:0x80070005(E_ACCESSDENIED))。"}: Microsoft.SharePointで
Microsoft.SharePoint.Library.SPRequest.GetViewsSchemaXml(文字列 bstrUrl、文字列bstrListName、ブールbFullBlown、ISP2DSafeArrayWriter p2DWriter、のInt32で.SPGlobal.HandleUnauthorizedAccessException(UnauthorizedAccessException EX) Microsoft.SharePoint.SPListで Microsoft.SharePoint.SPList.get_Views()で Microsoft.SharePoint.SPViewCollection..ctor(SPListリスト)で Microsoft.SharePoint.SPViewCollection.EnsureViewSchemaでplDefaultViewIndex)(ブール fullBlownSchema)。 get_DefaultView()を に設定します。Microsoft.SharePoint.SPList.get_DefaultViewUrl()( )Microsoft.SharePoint.WebPartPages.ListViewWebPart。 Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterListViewWebPart.Write10_WebPart(オブジェクトでShouldSerializeDetailLink() でMicrosoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterListViewWebPart.Write9_ListViewWebPart(文字列 N、ストリングNS、ListViewWebPart O、ブールISNULLABLE、ブールneedType) o)
システム管理者としてログインしていないと、何故このようなことが起こるのか、助けてもらえますか?この全体ブロックも昇格された権限内で実行され、SPSiteとSPWebも昇格ブロック内でインスタンス化されました。このコードは抜粋です。
UPDATE
私は、ユーザーベースのサイトコレクションのサイトコレクションの所有者にする場合は、上記のコードは正常に動作。したがって、上記のコードでは、コンテキストをリセットしたり、ベースサイトコレクションを参照する必要があります。ありがとうございました。