Sharepoint 2007 AddList和AddListFromFeature缺少模板列和数据内容

时间:2009-07-16 18:21:44

标签: web-services sharepoint sharepoint-2007 moss

我做了什么

  • 在SharePoint内部,我根据项目任务模板
  • 创建了一个列表
  • 我删除了大多数默认列,并添加了新的自定义列
  • 我使用新格式添加数据
  • 然后我做了“另存为模板”,并选择使用内容
  • 保存模板

工作正常

现在,当我使用该模板在SharePoint中创建一个新的List时,它可以完美地运行。存在自定义列,并且数据全部按预期填充。

什么不工作

但是,当我使用SharePoint Web服务提供的AddListAddListFromFeature方法时,会创建新列表,但它只是基于原始项目任务模板和默认列无数据

我尝试过什么

系统设置

使用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>

我很难过!所以,如果你能提供帮助 - 我将是一个非常快乐的人!提前谢谢!

1 个答案:

答案 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甚至不会工作在用户界面。

如果你无法解决这个明显的限制,我的建议是:

  1. .NET,请注意this post如果您碰巧遇到同样的错误,会在第一条评论中出现一些伏都教
  2. 制作一个IFRAME,其中http://site/_layouts/new.aspx CustomTemplate = PT6.stp &amp; FeatureId = {00bfea71-513d-4ca0-96c2-6a47775c0119}&amp; ListTemplate = 150作为来源并填写字段使用javascript,然后触发OK按钮单击,进行一些整页加载过渡,它甚至看起来不错。
  3. 方法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服务有只有那些方法是你无法指定自定义模板。