Problem
Adding a web part (or app part) via CSOM remote provisioning to a on-premise SharePoint web part page results in a
Specified argument was out of the range of valid values
exception when calling this method
webPartManager.AddWebPart(webPartToAdd, "RightColumnZone", 0);
clientContext.ExecuteQuery();
I cannot find the issue. What am I doing wrong?
Environment
- SharePoint 2013 on-premise
- Visual Studio 2013
- Provider-hosted app (but also tried console)
Code
If I use the code from this example (Section Adding a web part to a page) it does not work:
http://msdn.microsoft.com/en-us/library/office/ee539301(v=office.14).aspx
Error log
One of the errors (there are a few variations of this but all basically the same "Specified argument was out of the range of valid values" issue) listed in ULS is this one:
Exception occured in scope Microsoft.SharePoint.WebPartPages.SPLimitedWebPartManager.AddWebPart. Exception=System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values.
at Microsoft.SharePoint.WebPartPages.SPLimitedWebPartCollection.get_Item(Guid storageKey)
at Microsoft.SharePoint.SPObjectFactory.GetObjectById(String id)
at Microsoft.SharePoint.Client.ClientCallableObjectFactory.GetObjectByIdWithMonitoredScope(String objectId, ProxyContext proxyContext)
at Microsoft.SharePoint.Client.ClientMethodsProcessor.GetObjectFromObjectPath(XmlElement xe)
at Microsoft.SharePoint.Client.ClientMethodsProcessor.GetObjectFromObjectPathId(String objectPathId)
at Microsoft.SharePoint.Client.ClientMethodsProcessor.GetObjectFromObjectPath(XmlElement xe)
at Microsoft.SharePoint.Client.ClientMethodsProcessor.GetObjectFromObjectPathId(String objectPathId)
at Microsoft.SharePoint.Client.DataConverter.GetObject[T](XmlNode node, ProxyContext proxyContext)
at Microsoft.SharePoint.ServerStub.WebParts.SPLimitedWebPartManagerServerStub.AddWebPart_MethodProxy(SPLimitedWebPartManager target, XmlNodeList xmlargs, ProxyContext proxyContext)
at Microsoft.SharePoint.ServerStub.WebParts.SPLimitedWebPartManagerServerStub.InvokeMethod(Object target, String methodName, XmlNodeList xmlargs, ProxyContext proxyContext, Boolean& isVoid)
at Microsoft.SharePoint.Client.ServerStub.InvokeMethodWithMonitoredScope(Object target, String methodName, XmlNodeList args, ProxyContext proxyContext, Boolean& isVoid)
Also in ULS recorded is the actual CSOM request:
<Request AddExpandoFieldTypeSuffix="true" SchemaVersion="15.0.0.0" LibraryVersion="15.0.0.0" ApplicationName=".NET Library" xmlns="http://schemas.microsoft.com/sharepoint/clientquery/2009">
<Actions>
<ObjectPath Id="102" ObjectPathId="101" />
<ObjectIdentityQuery Id="103" ObjectPathId="101" />
<Query Id="104" ObjectPathId="101">
<Query SelectAllProperties="true">
<Properties />
</Query>
</Query>
</Actions>
<ObjectPaths>
<Method Id="101" ParentId="86" Name="AddWebPart">
<Parameters>
<Parameter ObjectPathId="95" />
<Parameter Type="String">Top</Parameter>
<Parameter Type="Int32">0</Parameter>
</Parameters>
</Method>
<Method Id="86" ParentId="83" Name="GetLimitedWebPartManager">
<Parameters>
<Parameter Type="Enum">1</Parameter>
</Parameters>
</Method>
<Property Id="95" ParentId="92" Name="WebPart" />
<Identity Id="83" Name="740c6a0b-85e2-48a0-a494-e0f1759d4aa7:site:40a25464-4926-4fd8-946b-d3ec87744537:web:5596ddd1-34f6-4faa-991c-529597113203:file:/sites/contosopublishing/Pages/test.aspx" />
<Identity Id="92" Name="740c6a0b-85e2-48a0-a494-e0f1759d4aa7:site:40a25464-4926-4fd8-946b-d3ec87744537:web:5596ddd1-34f6-4faa-991c-529597113203:file:/sites/contosopublishing/Pages/test.aspx:wpd:1,00000000-0000-0000-0000-000000000000" />
</ObjectPaths>
</Request>
What have I tried?
Lots of different things, anything I could think of:
- CSOM in provider-hosted app (high-trust) on dev on-premise environment
- CSOM with console app (just to rule out app-connection issue but same error)
Using parts of this solution (this is JSOM but similar) How to add Client Web Parts (App Parts) to a page from JavaScript CSOM?
Using different versions of the Microsoft.SharePoint.Client and Microsoft.SharePoint.Client.Runtime (15.0.0.0 and 16.0.0.0)
- Flushing the cache explained here
- Changing the ZoneID: As it might be an issue I made sure the zone on the page exists and also tried using "Right", "Right Column" or "RightColumnZone" as Zone IDs when adding the web part.
As the used XML code for adding the web part might be a factor I tried
- The XML of this MS example (Section: Adding a web part to a page)
- The XML export of a web part added using the UI (mentioned here)
- The markup usually used for adding it directly in the aspx page like mentioned here but that gave the expected error of invalid xml format