我做了什么
工作正常
现在,当我使用该模板在SharePoint中创建一个新的List时,它可以完美地运行。存在自定义列,并且数据全部按预期填充。
什么不工作
但是,当我使用SharePoint Web服务提供的AddList或AddListFromFeature方法时,会创建新列表,但它只是基于原始项目任务模板和默认列和无数据!
我尝试过什么
系统设置
使用SharePoint 2007(我认为?),使用PHP与NuSOAP进行连接。连接肯定有效,因为我已经将项目添加到列表,创建列表和读取数据。
代码示例
请求 - 针对上面的阶段2方法模板
<?xml version="1.0" encoding="ISO-8859-1"?><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns2034="http://tempuri.org"><SOAP-ENV:Body>
<AddListFromFeature xmlns="http://schemas.microsoft.com/sharepoint/soap/">
<listName>2Test Milestone Release</listName>
<description>Testing this out</description>
<featureID>{00BFEA71-513D-4CA0-96C2-6A47775C0119}</featureID>
<templateID>151</templateID>
</AddListFromFeature></SOAP-ENV:Body></SOAP-ENV:Envelope>
响应 - 由于未识别templateID而失败
<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><soap:Fault><faultcode>soap:Server</faultcode><faultstring>Exception of type 'Microsoft.SharePoint.SoapServer.SoapServerException' was thrown.</faultstring><detail><errorstring xmlns="http://schemas.microsoft.com/sharepoint/soap/">Cannot complete this action.
Please try again.</errorstring><errorcode xmlns="http://schemas.microsoft.com/sharepoint/soap/">0x81072101</errorcode></detail></soap:Fault></soap:Body></soap:Envelope>
我很难过!所以,如果你能提供帮助 - 我将是一个非常快乐的人!提前谢谢!
答案 0 :(得分:1)
我会追逐为什么你不能首先通过界面创建列表,这两个web服务调用在从自定义模板创建时似乎不包含重要参数,让我们分析查询字符串:
新项目任务(开箱即用)
http://site/_layouts/new.aspx?FeatureId= {00bfea71-513d-4ca0-96c2-6a47775c0119}&安培; ListTemplate = 150
新项目任务自定义(保存在列表模板库中)
http://site/_layouts/new.aspx的 CustomTemplate = PT6.stp 强>&安培; FEATUREID = {00bfea71-513d-4ca0-96c2-6a47775c0119}&安培; ListTemplate = 150
新项目任务自定义(manifest.xml编辑为151)
http://site/_layouts/new.aspx的 CustomTemplate = PT6.stp 强>&安培; FEATUREID = {00bfea71-513d-4ca0-96c2-6a47775c0119}&安培; ListTemplate = <强> 151 强>
它们都可以工作,所以我的意思是Web服务对于自定义模板是不可能的,或者它有一些秘密魔法(在列表定义中很常见),因为只指定ListTemplate而不是显式CUSTOM甚至不会工作在用户界面。
如果你无法解决这个明显的限制,我的建议是:
方法2需要从同一个域完成,如果你没有从同一个域运行PHP(不太可能)你需要在SharePoint站点内创建一个页面来包含这个hack,它可以像一个简单的其中包含内容编辑器Web部件的Web部件页,您读取了一些查询字符串参数,将它们放在字段上,触发OK并等待页面更改,以便您可以重定向到“成功”页面。
编辑:我很好奇并查看了New.aspx的来源,它有这个小片段(bIsCustomTemplate = strCustomTemplate!= null,strCustomTemplate = querystring“CustomTemplate”):
<% if (bIsCustomTemplate) { %>
<input id="onetidCustomTemplate" type="Hidden" name="CustomTemplate" value=<%SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(strCustomTemplate),Response.Output);%> />
<% } %>
我查看了反汇编的代码,但我认为我们不能在这里发布它,但它只能证明UI是从帖子(Request.Form)构建它并查找CustomTemplate参数,而Web服务有只有那些方法是你无法指定自定义模板。