【问题标题】:SOAP call with query on result (SSRS, Sharepoint)带有结果查询的 SOAP 调用(SSRS、Sharepoint)
【发布时间】:2009-07-02 14:00:22
【问题描述】:

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

这是肥皂电话

<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!)因为我需要创建一个查询somewhere,但是!我不知道在哪里,我试图包括

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

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

【问题讨论】:

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


    【解决方案1】:

    发帖:

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

    建议使用此语法放置 节点(此示例是检索 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>
    

    但是这会给我以下错误:

    对指定 URL 执行 Web 请求失败

    详细说明如下:

    元素<查询> of 参数查询丢失或无效

    通过使用 Microsoft 网络监视器查看 SOAP 消息,看起来 节点似乎正在转义为 <Query>等等,这就是它失败的原因。

    但是,我能够使用 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>"
    

    【讨论】:

      【解决方案2】:

      查看GetListItems Webservice ignores my query filter 的问题和答案。这将向您展示如何(以及如何不)设置 SOAP 调用以包含查询。您可能需要用另一个 &lt;Query&gt;&lt;/Query&gt; 包装您的查询。

      【讨论】:

      • 是的,也找到了类似的信息,可惜当您使用共享数据源(SharePoint 列表)时,它不是在 VS 中有效的格式。它只接受我在帖子中描述的格式我尝试了额外的 ,它不起作用......
      【解决方案3】:

      您的 FieldRef

      ows_Title

      我认为应该只是标题

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

      开头

      ows_

      【讨论】:

        【解决方案4】:

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

        在查询中:

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

        并且在数据集的参数列表中:

        名称:查询选项

        值:&lt;QueryOptions&gt;&lt;Folder&gt;Shared Documents/MyFolder&lt;/Folder&gt;&lt;/QueryOptions&gt;

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多