对结果进行查询的SOAP调用(SSRS,Sharepoint)

时间:2009-07-02 14:00:23

标签: sql xml sharepoint visual-studio-2005 reporting

我使用连接到共享点列表的共享数据源在VS中创建了一个报表。在报告中,我创建了一个数据集,其中包含对数据源的SOAP调用,因此我从表中的sharepoint列表中获取结果。

这是肥皂电话

<Query>
<SoapAction>http://schemas.microsoft.com/sharepoint/soap/GetListItems</SoapAction>
<Method Namespace="http://schemas.microsoft.com/sharepoint/soap/" Name="GetListItems">
  <Parameters>
     <Parameter Name="listName">
        <DefaultValue>{BD8D39B7-FA0B-491D-AC6F-EC9B0978E0CE}</DefaultValue>
     </Parameter> 
     <Parameter Name="viewName">
        <DefaultValue>{E2168426-804F-4836-9BE4-DC5F8D08A54F}</DefaultValue>
     </Parameter>
     <Parameter Name="rowLimit">
        <DefaultValue>9999</DefaultValue>
     </Parameter>   
  </Parameters>
</Method>   
<ElementPath IgnoreNamespaces="True">*</ElementPath>
</Query>

这样可以正常工作,我有一个可以在报告中显示的结果,但我希望能够选择一个参数来过滤结果。我创建了一个参数,当我预览报告时,我看到了可以用来从标题字段中进行选择的下拉框,当我这样做时它仍然显示第一条记录,显然它还没有工作(DUH!)因为我需要在某处创建一个查询,但是!我不知道在哪里,我试图包括

   <Where>
    <Eq>
     <FieldRef Name="ows_Title" />
     <Value Type="Text">testValue</Value>
    </Eq>
   </Where>

在肥皂请求但它没有用...我搜索了intarwebz但找不到任何类似的问题...有点卡住了...对此有什么想法?

修改

这是我根据Alex Angas博客链接使用的查询。

<Query>
   <SoapAction>http://schemas.microsoft.com/sharepoint/soap/GetListItems</SoapAction>
   <Method Namespace="http://schemas.microsoft.com/sharepoint/soap/" Name="GetListItems">
<queryOptions></queryOptions> 
<query><Query> 

<Where> 

<Eq> 

<FieldRef Name="ows_Title"/> 

<Value Type="Text">someValue</Value> 

</Eq> 

</Where> 

</Query></query>   
      <Parameters>
         <Parameter Name="listName">
         <DefaultValue>{BD8D39B7-FA0B-491D-AC6F-EC9B0978E0CE}</DefaultValue>
     </Parameter> 
     <Parameter Name="viewName">
        <DefaultValue>{E2168426-804F-4836-9BE4-DC5F8D08A54F}</DefaultValue>
     </Parameter>
     <Parameter Name="rowLimit">
        <DefaultValue>9999</DefaultValue>
     </Parameter> 

  </Parameters>
</Method>   
<ElementPath IgnoreNamespaces="True">*</ElementPath>
</Query>

我试图在现有的每种可能的方式中放置新的查询语句,但它根本不起作用,虽然代码有效但我没有收到错误,但我仍然得到一个未过滤的列表作为返回...... 把我的头发拉出来!

4 个答案:

答案 0 :(得分:2)

帖子:

http://social.msdn.microsoft.com/forums/en-US/sqlreportingservices/thread/1562bc7c-8348-441d-8b59-245d70c3d967/

建议使用此语法放置&lt; Query&gt; node(此示例是检索ID为1的项目):

<Query>
  <SoapAction>http://schemas.microsoft.com/sharepoint/soap/GetListItems</SoapAction>
  <Method Namespace="http://schemas.microsoft.com/sharepoint/soap/" Name="GetListItems">
    <Parameters>
      <Parameter Name="listName">
        <DefaultValue>{CE7A4C2E-D03A-4AF3-BCA3-BA2A0ADCADC7}</DefaultValue>
      </Parameter>
      <Parameter Name="query" Type="xml">
        <DefaultValue>
          <Query>
            <Where>
              <Eq>
                <FieldRef Name="ID"/>
                <Value Type="Integer">1</Value>
              </Eq>
            </Where>
          </Query>
        </DefaultValue>
      </Parameter>
    </Parameters>
  </Method>
  <ElementPath IgnoreNamespaces="True">*</ElementPath>
</Query>

然而,这会给我以下错误:

无法执行指定网址的网络请求

详细信息如下:

元素&amp; lt;查询&amp; gt;参数查询缺失或无效

通过使用Microsoft Network Monitor查看SOAP消息,它看起来就像&lt; Query&gt;节点正在转移到&amp; lt;查询&amp; gt;等,这就是它失败的原因。

然而,我能够使用Martin Kurek在回复中描述的方法来实现这一目标:

http://www.sharepointblogs.com/dwise/archive/2007/11/28/connecting-sql-reporting-services-to-a-sharepoint-list-redux.aspx

所以,我用这个作为我的查询:

<Query>
  <SoapAction>http://schemas.microsoft.com/sharepoint/soap/GetListItems</SoapAction>
   <Method Namespace="http://schemas.microsoft.com/sharepoint/soap/" Name="GetListItems">
      <Parameters>
         <Parameter Name="listName">
            <DefaultValue>{CE7A4C2E-D03A-4AF3-BCA3-BA2A0ADCADC7}</DefaultValue>
         </Parameter>
         <Parameter Name="query" Type="xml">
        </Parameter>   
      </Parameters>
   </Method>
   <ElementPath IgnoreNamespaces="True">*</ElementPath>
</Query>

然后在名为query的数据集上定义一个参数,其值如下:

<Query><Where><Eq><FieldRef Name="ID"/><Value Type="Integer">1</Value></Eq></Where></Query>

我还可以通过将查询数据集参数设置为以下表达式来使我的查询依赖于报表参数:

="<Query><Where><Eq><FieldRef Name=""ID""/><Value Type=""Integer"">" & 
Parameters!TaskID.Value & 
"</Value></Eq></Where></Query>"

答案 1 :(得分:1)

查看GetListItems Webservice ignores my query filter的问题和答案。这将向您展示如何(以及如何不)设置SOAP调用以包含查询。您可能需要使用其他<Query></Query>包装查询。

答案 2 :(得分:0)

您的 FieldRef

  

ows_Title

我认为它应该只是标题

当您从SOAP请求获得结果时,所有字段名称都将以

开头
  

<强> OWS _

答案 3 :(得分:0)

太棒了,谢谢。此解决方案也适用于queryOptions。

在查询中:

<Parameter Name="queryOptions" Type="xml">
</Parameter>

在数据集的参数列表中:

名称:queryOptions

价值:<QueryOptions><Folder>Shared Documents/MyFolder</Folder></QueryOptions>