【问题标题】:Reporting Services, get data from any Sharepoint ListReporting Services,从任何 Sharepoint 列表中获取数据
【发布时间】:2012-04-21 21:05:28
【问题描述】:

我正在尝试基于 Sharepoint (2010) 列表构建 SSRS (2008R2) 报告。 主要问题是报告将运行的列表必须是报告参数。我知道列表结构将是什么,但是共享点站点可以包含多个具有这种结构的列表实例,并且在运行报告时,用户必须选择列表名称。 此外,报表有两个日期参数,MinDateTime 和 MaxDateTime,并且只选择时间在这两者之间的记录。

据我所知,构建报告至少有两种方法:

  1. 使用 Sharepoint List Data Source 并用 CAML 编写 Dataset 查询,在 DataSource 中指定站点,让 SSRS 处理其余细节。这种情况下的问题是我无法将 ListName 指定为报告参数。 DataSet 查询如下所示:

    <pre>
       <RSSharePointList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
            <ListName>BusinessList1</ListName>
              <ViewFields>
                <FieldRef Name="Title" />
                <FieldRef Name="BusinessUnit" />
                <FieldRef Name="ScanDateTime" />
              </ViewFields>
              <Query>
                <Where>
                  <And>
                    <Geq>
                      <FieldRef Name="ScanDateTime" />
                      <Value Type="DateTime">
                        <Parameter Name="MinScanDateTime" />
                      </Value>
                    </Geq>
                    <Leq>
                      <FieldRef Name="ScanDateTime" />
                      <Value Type="DateTime">
                        <Parameter Name="MaxScanDateTime" />
                      </Value>
                    </Leq>
                  </And>
                </Where>
              </Query>
            </RSSharePointList>
    

  2. 使用 XML 数据源并以肥皂可读的 XML 编写数据集查询,直接访问 /_vti_bin/lists.asmx 网络服务。查询应该看起来像这样(包括列表名称作为参数)。但是,我无法使用 Date 参数让它工作。应该在哪里添加?

     <pre>  
       <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>BusinessList1</DefaultValue>
             </Parameter>
             <Parameter Name="viewFields">         
                  <ViewFields>
                    <FieldRef Name="Title" />
                    <FieldRef Name="BusinessUnit" />
                    <FieldRef Name="ScanDateTime" />
                 </ViewFields>
             </Parameter>
          </Parameters>
       </Method>
       <ElementPath IgnoreNamespaces="True">*</ElementPath>
    </Query>
    

任何方向都会很棒。 谢谢,

【问题讨论】:

标签: sharepoint sharepoint-2010 reporting-services


【解决方案1】:

您可以使用选项 1,将查询编写为表达式。用中间的参数构建一个长字符串。您需要一个单独的查询来为参数提供 BusinessLists 列表。

表达式如下所示:

="<pre>
   <RSSharePointList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <ListName>"

& Parameters!BusinessList.value & 

"</ListName>
          <ViewFields>
            <FieldRef Name="Title" />
            <FieldRef Name="BusinessUnit" />
            <FieldRef Name="ScanDateTime" />
          </ViewFields>
          <Query>
            <Where>
              <And>
                <Geq>
                  <FieldRef Name="ScanDateTime" />
                  <Value Type="DateTime">
                    <Parameter Name="MinScanDateTime" />
                  </Value>
                </Geq>
                <Leq>
                  <FieldRef Name="ScanDateTime" />
                  <Value Type="DateTime">
                    <Parameter Name="MaxScanDateTime" />
                  </Value>
                </Leq>
              </And>
            </Where>
          </Query>
        </RSSharePointList>"

[编辑]: 我也不确定 pre 标签是从哪里来的。我已经使用共享点列表连接类型创建了一个测试报告,但它没有添加它。看看这个MS link on the basics

它指出你不需要指定要返回的字段,所以一个非常基本的查询表达式看起来像这样(添加了我的填充参数):

="<RSSharePointList xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema""><ListName>" & Parameters!List.Value & "</ListName></RSSharePointList>"

在我上面的原始示例中,我没有提到您需要通过加倍来转义 XML 中的双引号。我已经对此进行了测试,效果很好。

【讨论】:

  • 嘿达沃斯。我尝试了您的解决方案,但出现错误。
     标签是什么?
  • 我使用了OP的查询,只是回答了如何将动态参数合并到其中的问题。我建议使用硬编码的列表值使您的语法正确,当您确定它有效时,将其变成一个大字符串,并将参数塞入正确的位置。
  • 我使用了一个带有表达式 ="Listname" 的参数,并将参数名称插入到我的查询中。我的 caml 查询和你的一样。对吗?
  • 假设您已使用 SharePoint 列表连接类型,请尝试使用查询设计器直观地构建查询。它将为您编写 XML。然后关闭查询编辑器。返回数据集的属性(右键单击它并选择数据集属性)并单击 Fx 按钮(表达式编辑器)。这和文本模式不一样!然后您可以适当地添加双引号。我意识到我在上面的例子中遗漏了一些东西。 XML 中已经有很多双引号,因此您需要通过将它们加倍来转义它们。即“”我将编辑我的答案
猜你喜欢
  • 1970-01-01
  • 2016-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-02
  • 1970-01-01
  • 2012-04-22
相关资源
最近更新 更多