以编程方式搜索特定SharePoint用户

时间:2010-11-10 14:36:00

标签: c# sharepoint sharepoint-2007 infopath infopath-2007

我有一个填充程序需要指定人员的InfoPath表单。工作流程稍后会将任务分配给这些人员。我正在寻找的是一个人物选择器,就像SharePoint对用户字段的用途,但我可以在InfoPath中使用。我已经设计了一个表单,填充程序可以放入名称或电子邮件,表单将列出site.allusers组的结果。

问题是,如果需要添加到表单中的人之前从未访问过此特定网站集,该怎么办?他们的帐户不会列在AllUsers列表中。

我可以在对象模型中搜索能够使用SharePoint进行身份验证的用户吗?

2 个答案:

答案 0 :(得分:1)

我认为这里的问题是,即使您找到了用户列表,如果用户信息列表中不存在用户,工作流也不会触发任何操作。

如果用户信息列表中不存在用户,则您将无法通过SharePoint对象模型找到它们,因为它们在SharePoint中不存在。你必须以其他方式找到它们。

基本上,它取决于如何在SharePoint服务器上配置身份验证:

如果您使用的是FBA,那么可以通过SharePoint进行身份验证的用户必须存在于某个SQL数据库中。 Membership.Provider将为您的FBA会员提供商提供一个钩子(无论是SqlMembershipProvider还是其他东西)。然后,您可以使用

之类的方法
Membership.Provider.GetUser(username)

查看用户是否存在。您还可以遍历用户或查找您可以在人员选择器中显示的所有现有用户名。

如果您使用的是Windows身份验证,则必须查看AD以查找潜在用户。 DirectoryEntry对象就是您所需要的。我想只有来自某个AD组的用户才能访问SharePoint?如果是这样,那么使用DirectoryEntry对象隔离该组,遍历用户,您将获得人员选择器的数据源。

正如我上面所说,任何一种方法都会为您提供可能的用户,但如果用户尚未登录,则不会使工作流程正常工作。工作流程只能与用户信息列表中存在的用户一起正常工作

当有人选择SharePoint中不存在的用户时,您可能必须通过代码创建它。一种安全的方法是使用SPWeb.EnsureUser

  

检查是否指定登录   name属于的有效用户   网站,如果登录名称   尚未存在,将其添加到Web   site.site。

真的,回答你的问题,无处可去。你需要找到他们可能来自哪里。

答案 1 :(得分:1)

为什么不在InfoPath中使用OTB并将其配置为指向SharePoint环境?

http://www.sharepointassist.com/2009/02/27/adding-a-contact-selectorpeople-picker-to-an-infopath-form/

如果您正在运行与AD集成的MOSS,那么如果启用了AD同步,它应该会自动检索您域中的所有人。

相关问题