【问题标题】:How best to convert a SharePoint multi-user field string into an array of SPUsers?如何最好地将 SharePoint 多用户字段字符串转换为 SPUsers 数组?
【发布时间】:2009-01-19 15:21:08
【问题描述】:

我正在为 SharePoint 列表编写 ItemAdding 处理程序,该列表包含多用户字段。由于此时 SPItem 实际上不可用,我认为我只能使用从 SPItemEventDataCollection 返回的字符串。当存在 user1、user2 和 user3 时,该字符串将如下所示:

1;#MYDOMAIN\user1;#4;#MYDOMAIN\user2;#10;#MYDOMAIN\user3

我想将其转换为 SPUser 对象数组,以便将其传递给另一个现有方法。是否有任何 SharePoint 内置方法来处理这些字符串,还是我只能解析这些字符串?

另外,假设我需要处理这个字符串,看起来这里的整数标记总是对应于后面的域\用户名。在任何情况下,这将不正确并且整数或域\用户名丢失或不正确?仅使用数字并使用 SPWeb 的 SiteUsers.GetByID(id) 方法是否安全?在少数测试中,我无法让它失败,但如果数字和字符串数据完全冗余,它们都会被包含在内,这似乎很奇怪。

谢谢!

【问题讨论】:

  • 这就是我不喜欢 SharePoint 开发的原因...就像人们只是 忘记思考

标签: sharepoint wss


【解决方案1】:

SPFieldUserValueCollection 完全符合您的要求。它的构造函数接受一个 SPWeb 和用户字符串。集合中的 SPFieldUserValue 项提供了一个 User 属性,该属性返回 Web 的相应 SPUser 对象。

private void ProcessUsers(SPListItem item, string fieldName)
{
  string fieldValue = item[fieldName] as string;
  SPFieldUserValueCollection users = new SPFieldUserValueCollection(item.Web, fieldValue);

  foreach(SPFieldUserValue uv in users)
  {
    SPUser user = uv.User;
    // Process user
  }
}

SPFieldUser 类型从标准 SPFieldLookup 继承其行为,该标准还存储 ID 和 Title 并具有相应的 SPFieldLookupValueCollection。 ID 支持(弱)引用完整性,而缓存的 Value 允许快速查询。

【讨论】:

    【解决方案2】:

    这适用于我从用户字段中获取 SPSuser 它应该与从事件数据中提取它相同。:

    private SPUser getGroup(SPListItem item, string fieldName)
            {
                string fieldValue = item[fieldName] as string;
                if (string.IsNullOrEmpty(fieldValue)) return null;
                int id = int.Parse(fieldValue.Split(';')[0]);
                SPUser user = item.Web.AllUsers.GetByID(id);
                return user;
            }
    

    整数是指本地SPWebs用户数据库中的用户id。然而,这并没有同步,因此在保存列表项后,用户可能已从用户数据库中删除。

    【讨论】:

    • 谢谢。我基本上最终采取了这条路线,但增加了皱纹,即该字段的值中可能有多个用户。一件奇怪的事情是,在我的字段中只有一个用户,字段中只有数值而不是“;” - 分隔的值。似乎仍然有效。
    猜你喜欢
    • 2021-05-09
    • 2016-10-14
    • 2010-09-10
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多