嘿,我有一个管理员表单,他们插入一个用户名("域\名称"),代码获取并设置一些信息.
这是一个庞大的项目,一些列表包含用户名作为字符串("域\名称"),但有些列表只依赖于"创建者"列,该列是自动创建的.
我想知道使用用户名字符串查询这些列表的最快方法是什么.我尝试使用与我用于第一种列表的查询相同的查询,但它显然不起作用 -
<Where><Eq><FieldRef Name='UserName'/><Value Type='Text'>domain\\username</Value></Eq></Where>
Run Code Online (Sandbox Code Playgroud)
谢谢.
Gra*_*ote 17
有两个不同的"创建者"字段,一个用于所有项目,另一个专门用于文档库("文档创建者")."创建者"字段的内部名称是"作者",因此<FieldRef Name='Author'/>这将是最好的开始.第二个字段是文档库中实际文件的作者,其内部名称为"Created_x0020_By".从你的情景来看,我感觉你只需要前者,但后者很高兴知道,因为存储在它们中的数据是不同的.
"Created By"是一个用户字段,因此其数据的字符串版本是ID;#Full Name.同时,"文档创建者"是单行文本的文本字段,其数据存储为实际用户名(如果适用,则使用域).因此,您的上述查询将适用于文档库和搜索的情况<FieldRef Name='Created_x0020_By'/>.但是,如果要搜索"创建者"字段,则必须有点棘手,但您应该能够通过引用用户的SharePoint ID来完成它.以下是我正在使用的不同用户字段查询的示例,以进行比较.
<Eq><FieldRef Name='AssignedTo' /><Value Type='Integer'><UserID Type='Integer' /></Value></Eq>
Run Code Online (Sandbox Code Playgroud)
这专门过滤了当前用户.要将其用于您的目的,请将"AssignedTo"替换为"作者"并将<UserID Type='Integer' />其替换为相关用户的ID.
我会推荐以下内容:
通过调用EnsureUser方法获取SharePoint用户,即:
SPUser myUser = SPContext.Current.Web.EnsureUser(@"DOMAIN\USERNAME");
Run Code Online (Sandbox Code Playgroud)使用SharePoint用户的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();
Run Code Online (Sandbox Code Playgroud)针对列表触发查询
myList.GetItems(spQuery);
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
43590 次 |
| 最近记录: |