2

我有一个 InfoPath 表单,填充者需要指定人员。工作流稍后将任务分配给这些人。我正在寻找的是一个人员选择器,就像 SharePoint 为用户字段提供的那样,但我可以在 InfoPath 中使用它。我已经设计了一个表格来执行此操作,填充者可以输入姓名或电子邮件,表格将列出来自 site.allusers 组的结果。

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

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

4

2 回答 2

1

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

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

因此,基本上,这取决于您的 SharePoint 服务器上的身份验证配置方式:

如果您使用 FBA,则可以使用 SharePoint 进行身份验证的用户必须存在于 SQL 数据库中的某个位置。Membership.Provider将为您提供 FBA 会员资格提供程序的挂钩(无论是 SqlMembershipProvider 还是其他)。然后,您可以使用类似的方法

Membership.Provider.GetUser(username)

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

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

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

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

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

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

于 2010-11-10T19:47:35.413 回答
1

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

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

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

于 2011-04-08T22:30:10.970 回答