我正在尝试使用SharePoint 2010附带的新Javascipt OM添加自定义Web部件(这是我自己编写的)。我的解决方案也在沙盒中运行。
我的内容编辑器Web部件(基于示例代码)可以正常工作,但是当我用自己的Web部件的内容替换内容编辑器Web部件定义时,出现以下错误:
---------------------------
Message from webpage
---------------------------
Request failed. The operation could not be completed because the Web Part is not on this page.
undefined
---------------------------
OK
---------------------------
我测试过的东西:
我可以成功地将.webpart定义上传到Web部件库,并且Web部件可以工作。
我可以使用“上传Web部件”功能以编程方式尝试将Web部件成功添加到页面中。
这是我用来添加Web部件的代码:
function addWebPart(serverRelativeUrl) {
//var webPartXml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
//webPartXml = webPartXml + "<WebPart xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns=\"http://schemas.microsoft.com/WebPart/v2\"> <Title>Content Editor</Title> <FrameType>Default</FrameType> <Description>Allows authors to enter rich text content.</Description> <IsIncluded>true</IsIncluded> <ZoneID>Main</ZoneID> <PartOrder>0</PartOrder> <FrameState>Normal</FrameState> <Height /> <Width /> <AllowRemove>true</AllowRemove> <AllowZoneChange>true</AllowZoneChange> <AllowMinimize>true</AllowMinimize> <AllowConnect>true</AllowConnect> <AllowEdit>true</AllowEdit> <AllowHide>true</AllowHide> <IsVisible>true</IsVisible> <DetailLink /> <HelpLink /> <HelpMode>Modeless</HelpMode> <Dir>Default</Dir> <PartImageSmall /> <MissingAssembly>Cannot import this Web Part.</MissingAssembly> <PartImageLarge>/_layouts/images/mscontl.gif</PartImageLarge> <IsIncludedFilter /> <Assembly>Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c</Assembly> <TypeName>Microsoft.SharePoint.WebPartPages.ContentEditorWebPart</TypeName> <ContentLink xmlns=\"http://schemas.microsoft.com/WebPart/v2/ContentEditor\" /> <Content xmlns=\"http://schemas.microsoft.com/WebPart/v2/ContentEditor\" /> <PartStorage xmlns=\"http://schemas.microsoft.com/WebPart/v2/ContentEditor\" /></WebPart>";
var webPartXml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
"<webParts><webPart xmlns=\"http://schemas.microsoft.com/WebPart/v3\">" +
"<metaData>" +
"<type name=\"Codezeven.Social.Views.WebParts.ItemViewTrackerWebPart, Codezeven.Social.Views, Version=1.0.0.0, Culture=neutral, PublicKeyToken=c56ab109c2917056\" />" +
"<importErrorMessage>Cannot import this Web Part.</importErrorMessage>" +
"<Solution SolutionId=\"f5984dff-f7c0-4108-8c08-671bbb9b5df0\" xmlns=\"http://schemas.microsoft.com/sharepoint/\" />" +
"</metaData>" +
"<data><properties>" +
"<property name=\"Title\" type=\"string\">ItemViewTrackerWebPart</property>" +
"</properties></data>" +
"</webPart></webParts>";
clientContext = new SP.ClientContext.get_current();
var oFile = clientContext.get_web().getFileByServerRelativeUrl(serverRelativeUrl);
var limitedWebPartManager = oFile.getLimitedWebPartManager(SP.WebParts.PersonalizationScope.shared);
var oWebPartDefinition = limitedWebPartManager.importWebPart(webPartXml);
this.oWebPart = oWebPartDefinition.get_webPart();
limitedWebPartManager.addWebPart(oWebPart, 'Main', 0);
clientContext.load(oWebPart);
clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));}
function onQuerySucceeded() {
alert('Web Part added: ' + oWebPart.get_title());
}
function onQueryFailed(sender, args) {
alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}
最佳答案
不知道您是否已解决此问题,但我认为您没有必要
clientContext.load(oWebPart);
就在executeQueryAsync之前。
如果您使用的是Firebug / Fiddler / IE9工具栏,请观察网络流量,ClientQuery的POST结果会包含一些有用的错误消息。
关于javascript - 无法使用JS OM将自定义Web部件添加到页面,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3243110/