6

嘿,我有一个管理员表单,他们在其中插入用户名(“域名\名称”),代码从中获取并设置一些信息。

这是一个巨大的项目,其中一些列表包含作为字符串的用户名(“域名\名称”),但一些列表仅依赖于自动创建的“创建者”列。

我想知道使用用户名字符串查询这些列表的最快方法是什么。我尝试使用与用于第一种列表的查询相同的查询,但它显然不起作用 -

<Where><Eq><FieldRef Name='UserName'/><Value Type='Text'>domain\\username</Value></Eq></Where>

谢谢你。

4

2 回答 2

17

有两个不同的“创建者”字段,一个用于所有项目,一个专门用于文档库(“文档创建者”)。“创建者”字段的内部名称是“作者”,因此<FieldRef Name='Author'/>是最好的开始。第二个字段是文档库中实际文件的作者,其内部名称为“Created_x0020_By”。从您的情况来看,我感觉您只需要前者,但无论如何都需要知道后者,因为存储在其中的数据是不同的。

“创建者”是一个用户字段,因此其数据的字符串版本是ID;#Full Name. 同时,“文档创建者”是单行文本的文本字段,其数据存储为实际用户名(如果适用,则带有域)。因此,您的上述查询将适用于文档库并在<FieldRef Name='Created_x0020_By'/>. 但是,如果您想在“创建者”字段上进行搜索,则必须稍微复杂一些,但您应该能够通过引用用户的 SharePoint ID 来完成它。以下是我正在使用的不同用户字段查询的示例,用于比较。

<Eq><FieldRef Name='AssignedTo' /><Value Type='Integer'><UserID Type='Integer' /></Value></Eq>

这专门过滤掉了当前用户。要将其用于您的目的,请将 'AssignedTo' 替换为 'Author' 和<UserID Type='Integer' />相关用户的 ID。

于 2010-05-20T13:55:41.733 回答
8

我会推荐以下内容:

  1. 通过调用 EnsureUser 方法获取 SharePoint-User,即:

     SPUser myUser = SPContext.Current.Web.EnsureUser(@"DOMAIN\USERNAME");
    
  2. 使用 SharePoint-User 的 ID 查询列表:

     SPQuery spQuery = new SPQuery();
     StringBuilder queryString = new StringBuilder(String.Empty);
     queryString.Append(@"<Where>");
     queryString.Append(@"   <Eq>");
     queryString.Append(@"       <FieldRef ID=""{1df5e554-ec7e-46a6-901d-d85a3881cb18}"" LookupId=""True"" />"); //Author Field
     queryString.Append(@"       <Value Type=""Lookup"">" + myUser.ID + @"</Value>");
     queryString.Append(@"   </Eq>");
     queryString.Append(@"</Where>");
     spQuery.Query = queryString.ToString();
    
  3. 针对列表触发查询

    myList.GetItems(spQuery);
    
于 2012-01-26T10:58:00.470 回答