来自Sharepoint List的报告,包括OR声明

时间:2014-05-28 19:12:41

标签: reporting-services sharepoint-2013

我熟悉SQL,但从SharePoint列表中提取它已经证明非常令人沮丧。语法完全不同,我发现自己难以做一些简单的事情。

我想要做的是在多个日期字段中的一个超过今天的日期或低于将来60天的日期时拉取记录。此外,名为ActiveStatus的字段的值不应为Deactive。目前,我在数据集查询设计器上有一个应用过滤器,将其限制在ActiveStatus不活动的位置。然后在数据集属性上,在Filters下,我指定DEAExpiration< = @start_date和DEAExpiration> @Today。如果我想拉出那两个日期(DEAExpiration)在这两个日期之内的地方,这种方法很好。

但我想要的是在这些日期之间拉出大约10个字段中的任何一个。在SQL中我知道它将是一个简单的OR语句字符串,但我无法用这种语法弄明白。任何帮助将不胜感激。我希望它看到的一些领域是DEAExpiration,ACLSRenewal,LicenseExpiration。如果有人可以帮我设置以查看所有3个字段,我想我可以修改它以包含其余的字段。

以下是当前查询:

    <RSSharePointList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <ListName>ProviderList</ListName>
  <ViewFields>
    <FieldRef Name="FirstName" />
    <FieldRef Name="MiddleInitial" />
    <FieldRef Name="LastName" />
    <FieldRef Name="Title2" />
    <FieldRef Name="Company" />
    <FieldRef Name="Address1" />
    <FieldRef Name="Address2" />
    <FieldRef Name="City" />
    <FieldRef Name="State" />
    <FieldRef Name="Zip" />
    <FieldRef Name="ActiveStatus" />
    <FieldRef Name="DEA_x0023_" />
    <FieldRef Name="DEAExpiration" />
  </ViewFields>
  <Query>
    <Where>
      <Neq>
        <FieldRef Name="ActiveStatus" />
        <Value Type="Text">Deactive</Value>
      </Neq>
    </Where>
  </Query>
</RSSharePointList>

1 个答案:

答案 0 :(得分:0)

坏消息是,由于您没有使用C#代码或客户端对象模型和javascript,因此无法使用LINQ对Sharepoint数据进行更直接的查询,我认为您无法编写CAML查询。但是,有几种方法可以更容易地编写CAML查询。

go-to方法是从U2U下载并安装Caml Query Builder:http://www.u2u.be/Software

还有一个codeplex项目可以用来做同样的事情: http://spcamlqueryhelper.codeplex.com/

您编写此特定查询的方式是(我刚刚执行了Where子句):

<Where>
    <And>
        <Neq>
            <FieldRef Name="ActiveStatus" />
            <Value Type="Text">Deactive</Value>
        </Neq>
        <Or>
            <Geq>
                <FieldRef Name="Date1"/>
                <Value Type="DateTime">@Today</Value>
            </Geq>
            <Or>
                <Lt>
                    <FieldRef Name="Date1"/>
                    <Value Type="DateTime">@FutureDate</Value>
                </Lt>
                <Or>
                    <Geq>
                        <FieldRef Name="Date2"/>
                        <Value Type="DateTime">@Today</Value>
                    </Geq>
                    <Or>
                        <Lt>
                            <FieldRef Name="Date2"/>
                            <Value Type="DateTime">@FutureDate</Value>
                        </Lt>
                        <Or>
                            <Geq>
                                <FieldRef Name="Date3"/>
                                <Value Type="DateTime">@Today</Value>
                            </Geq>
                            <Or>
                                <Lt>
                                    <FieldRef Name="Date3"/>
                                    <Value Type="DateTime">@FutureDate</Value>
                                </Lt>
                                <Or>
                                    <Geq>
                                        <FieldRef Name="FinalDate"/>
                                        <Value Type="DateTime">@Today</Value>
                                    </Geq>
                                    <Lt>
                                        <FieldRef Name="FinalDate"/>
                                        <Value Type="DateTime">@FutureDate</Value>
                                    <Lt>
                                </Or>
                            </Or>
                        </Or>
                    </Or>
                </Or>
            </Or>
        </Or>
    </And>
</Where>

我只做了4个日期列来显示嵌套结构的工作原理。在您嵌套的最后日期(FinalDate),您将Lt和Geq子句彼此相邻以终止嵌套。要完成查询,您只需要进行6个额外的嵌套级别。

这是Caml Query Builder是神派的工作,因为它消除了浪费时间试图正确嵌套所有内容以及查询打破拼写错误的可能性。