【问题标题】:Why does owssvr.dll return an empty result for my list?为什么 owssvr.dll 为我的列表返回一个空结果?
【发布时间】:2011-03-24 17:50:54
【问题描述】:

我正在尝试在 SharePoint 2007 中使用 owssvr.dll and its URL API 来获取一些列表元数据。对于我感兴趣的网站中的大多数列表,我可以使用如下格式的 url:

http://hts-app1/compounds/_vti_bin/owssvr.dll?XMLDATA=1&List={F987723C-28A4-47D3-83D7-19094B0267DF}

我得到了默认视图的基于 xml 的字段元数据列表和列表中的记录列表。但是,当我尝试将另一个 guid 用于单独的列表时,我从 Web 服务器得到一个空响应。这是一个 200 响应代码,但其他标头看起来像:

Connection:close
Date:Thu, 24 Mar 2011 17:38:46 GMT
MicrosoftSharePointTeamServices:12.0.0.4518
Server:Microsoft-IIS/6.0
X-Powered-By:ASP.NET

我很确定列表 guid 是有效的,因为我可以将它与我在listedit.aspx 页面中看到的列表的 guid 匹配。如果我也像这样格式化我的网址:

http://hts-app1/compounds/_vti_bin/owssvr.dll?XMLDATA=1&List={F987723C-28A4-47D3-83D7-19094B0267DF}&Query=*

使用Query=* 参数,我可以获得有效的xml,但它只是显示所有内容,并没有针对我的视图进行过滤,我真的很想拥有该视图。

我查看了 SharePoint 日志文件,但找不到与此请求相关的任何内容。

那么,我该如何调试呢?我真的很想使用一个简单的 http GET 请求来取回这个元数据,而 owssvr.dll 似乎是理想的机制。

【问题讨论】:

    标签: sharepoint sharepoint-2007


    【解决方案1】:

    您也可以指定特定的视图。像这样

    http://{0}/_vti_bin/owssvr.dll?Cmd=Display&List={1}&view={2}&XMLDATA=TRUE
    

    例如:

    https://foo.com/extranet/_vti_bin/owssvr.dll?Cmd=Display&List=%7B7F7AFB9D%2D6D5D%2D4626%2DBD9D%2D085957DB79AB%7D&view=%7B111EC07E%2DF648%2D443B%2D8DE6%2DB53786BE6762%7D&XMLDATA=TRUE
    

    获取列表和视图 guid 的最简单方法是直接从地址栏中转到编辑视图并获取列表和视图信息。

    【讨论】:

      【解决方案2】:

      1. 在 URL 的查询字符串中提供 GUID 对一个列表有效,而对另一个列表无效,这可能是因为这些列表位于不同的站点上。验证站点名称是否正确以及 GUID 确实是列表 ID。

      但请注意,上述内容同时适用于 SharePoint 2007 和 2010,对于 SharePoint 2010,可能需要额外的措施,具体取决于您在 owssvr.dll 上执行命令的上下文。

      2. query=* 不是过滤器参数;它显示列表中所有可用列的架构和数据,包括 SharePoint 内部列,通常您永远不会通过编程访问以外的方式看到这些列。

      3. 要仅获取在 当前 默认 视图 中可见的列,请在 xmldata 参数设置为 true 时在 owssvr.dll 上调用 display 命令;像这样:

      http://hts-app1/compounds/_vti_bin/owssvr.dll?Cmd=Display&List={F987723C-28A4-47D3-83D7-19094B0267DF}&XMLDATA=TRUE

      同样,这仅适用于 SharePoint 2007,取决于执行上下文。

      4.

      使用 Query=* 参数,我可以得到 有效的xml,但它只是显示 一切,而不是为我过滤 视图,我真的很想拥有 查看。

      哦,但这不叫过滤;过滤仅基于列值。为此,请使用额外的 FilterField1 和 FilterValue1 参数。

      http://hts-app1/compounds/_vti_bin/owssvr.dll"
                  + "?Cmd=Display&List={F987723C-28A4-47D3-83D7-19094B0267DF}"
                  + "&XMLDATA=TRUE&FilterField1=YOUR_FILTER_COLUMN_NAME&FilterValue1"
                  + YOUR_FILTER_COLUMN_VALUE
      

      在浏览器中进行测试之前,请取消“(双引号)和+(加号)和(返回)。

      【讨论】:

      • 感谢您的回复。我确信 guid 是正确的,因为当我在 url 中添加 query=* 时,我可以看到正确的列表元数据。这些列表都在同一个 SPWeb 中。至于你的第二点,我同意。我最终不想使用Query=*,但我只是想表明我确实可以通过这种方式获得正确的原始列表数据。我尝试了您的 #3 建议,并得到了与没有 Cmd 参数相同的行为。对于 #4,我的列表的默认视图确实是基于字段值的行过滤(以及包括更少的显示列),这是我想在此处使用该视图的一个关键原因。
      猜你喜欢
      • 2014-05-08
      • 1970-01-01
      • 2023-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-05
      • 1970-01-01
      相关资源
      最近更新 更多