使用CAML比较SharePoint“人员或组”字段

时间:2011-07-27 16:14:41

标签: sharepoint sharepoint-2007 caml

我有一个包含2个“人员或组”列的SharePoint 2007(MOSS)列表,我想比较一下,基本上:

SELECT * FROM List WHERE (Analyst = Developer)

在我的代码(C#)中,我将其构建为:

SPQuery itemQuery = new SPQuery();
itemQuery.Query = "<Where><Eq><FieldRef Name='Analyst' /><FieldRef Name='Developer' /></Eq></Where>";

SPListItemCollection queryResults = list.GetItems(itemQuery);

但这是抛出异常(“HRESULT的异常:0x80020009(DISP_E_EXCEPTION)”)。

在与“人物或组”列进行比较时,我看到了有关Value元素的Type属性的一些信息,但没有关于将这两列中的两列相互比较的信息。

我也尝试在每个FieldRef中添加“LookupId ='TRUE'”,没有任何变化。

3 个答案:

答案 0 :(得分:3)

无法比较使用CAML的两个字段。您必须使用文字值。这意味着,您可能会有两个查询:

  1. 检索Analyst / Developer的用户ID
  2. 检索Analyst和Developer相同的项目
  3. #2的例子:

    <Where>
       <And>
          <Eq><FieldRef Name="Analyst" LookupId="TRUE"/><Value Type="Integer">42</Value></Eq>
          <Eq><FieldRef Name="Developer" LookupId="TRUE"/><Value Type="Integer">42</Value></Eq>
       </And>
    </Where>
    

    仅供参考,您也可以使用<UserID/>代替“当前用户”而不是用户ID(在此示例中为42)。

答案 1 :(得分:1)

我相信你正在寻找的逻辑是:

<Where>
   <Eq>
      <FieldRef Name='Analyst'/>
      <Value Type="Text"><FieldRef Name='Developer'/></Value>
   </Eq>
</Where>

我测试了这是不可能的,所以我认为这两个选项是:

  1. 获取所有列表项,然后使用查找迭代JQuery并比较两个字段相等。

  2. 创建一个计算列,如果列中的两列相等,则设置true或false值,然后根据该列执行select。从表现的角度来看,这可能是最权宜,也是最有效的。

答案 2 :(得分:0)

试试这个:

<Where> 
  <Eq> 
    <FieldRef Name="Analyst" /> 
    <Value Type="Text">Developer</Value> 
  </Eq> 
</Where>

我找到了一个列表,它有两个匹配值可供比较,我得到了一个CAML查询来处理比较;但是,它是一个布尔值,所以我不确定这是否是你要找的。它确实比较了两个领域,但我认为文字仍然在阻碍。这个列表中有大约25个条目,这是唯一匹配的条目,所以我认为这将是一个很好的测试。

以下是代码:

private DataTable ExecuteQuery(SPList list) 
{ 
   SPQuery qry = new SPQuery(); 
 qry.Query = "<Where><And><Contains><FieldRef Name='Show' /><Value       Type='Boolean'>1</Value></Contains><Contains><FieldRef Name='Highlight' /><Value     Type='Boolean'>1</Value></Contains></And></Where>"; 
qry.ViewFields = "<FieldRef Name='Show' /><FieldRef Name='Highlight' />"; 
qry.IncludeMandatoryColumns = true; 
return list.GetItems(qry).GetDataTable();

很抱歉,如果这不是您想要的。祝你好运!!