使用CAML查询在共享点中加入2个列表

时间:2017-01-27 01:40:32

标签: sharepoint

我只是使用Sharepoint几天,我知道这个问题已经多次问过,但我已经尝试了所有这些问题,而且没有一个能够工作。

这些是我的设计

  • 作为文档库类型的文档具有Id

    Id | DocumentName
    ---+-------------
    1  | Document A
    2  | Document B
    
  • 活动列表,有一个引用文档标识的外键“DocId”

    Id | DocId | Name
    ---+-------+-----------
    1  | 1     | Activity A
    2  | 1     | Activity B
    3  | 1     | Activity C
    4  | 2     | Activity D
    

问题是我需要在文档上获取包含文档名称的所有活动。

在SQL中,我可以使用Join查询从另一个表中获取其他信息。但是我在CAML查询中尝试了一些Join语句,但没有一个能够工作。 这是我需要得到的结果。

Id | DocId | Name       | DocumentName
---+-------+--------------------------
1  | 1     | Activity A | Document A
2  | 1     | Activity B | Document A
3  | 1     | Activity C | Document A
4  | 2     | Activity D | Document B

有人可以建议我查询吗?

这是我的问题:

<View>
  <ViewFields>
    <FieldRef Name = 'DocLeafRef'/>
    <FieldRef Name = 'ID'/>
    <FieldRef Name = 'e8_document'/>
    <FieldRef Name = 'Title'/>
    <FieldRef Name = 'Author'/>
    <FieldRef Name = 'Created'/>
  </ViewFields>
  <Joins>
    <Join Type = 'INNER' ListAlias = 'Documents'>
      <Eq>
         <FieldRef Name ='e8_document' RefType = 'Id'/>
         <FieldRef Name ='ID' List ='Documents'/>
      </Eq>
    </Join>
  </Joins>
  <ProjectedFields>
    <Field ShowField ='FileLeafRef' Type ='Lookup' Name ='DocLeafRef' List ='Documents'/>
  </ProjectedFields>
  <Query>
     <Where>
        <Eq>
           <FieldRef Name='e8_caseId'></FieldRef>
           <Value Type = 'Number'>23</Value>
        </Eq>
     </Where>
  </Query>
</View>

我在“活动”列表中查询,e8_document是引用文档中Id的查找字段。据我所知,我们需要投影,我已经添加了投影,但查询引发了错误。

1 个答案:

答案 0 :(得分:0)

似乎Query元素在您的情况下无效,基本上Query元素不能包含Joins作为子元素。

服务器端对象模型

需要通过SPQuery Class指定Joins element SPQuery.Joins Property

var qry = new SPQuery();
qry.Joins = @"<Join Type="LEFT" ListAlias="Documents">
            <Eq>
                <FieldRef Name="DocId" RefType="ID" />
                <FieldRef Name="ID" List="Documents" />
            </Eq>
        </Join>";

客户端对象模型

以下是 CSOM API 的完整CAML查询:

<View>
    <ViewFields>
        <FieldRef Name="ID" />
        <FieldRef Name="DocId" />
        <FieldRef Name="Name" />
        <FieldRef Name="Documents" />
    </ViewFields>
    <Joins>
        <Join Type="LEFT" ListAlias="Documents">
            <Eq>
                <FieldRef Name="DocId" RefType="ID" />
                <FieldRef Name="ID" List="Documents" />
            </Eq>
        </Join>
    </Joins>
    <ProjectedFields>
        <Field ShowField="DocumentName" Type="Lookup" Name="Documents" List="Documents" />
    </ProjectedFields>
    <Query />
</View>