我正在 InfoPath 中创建一个要集成到 SharePoint 2007 门户中的表单。在此表单中将有一个文本字段,用户可以在其中输入人员姓名。
如何验证此人是否存在?
有没有办法用门户的所有用户名填充下拉列表,而不是验证用户?(原因可能是来自 Active Directory 的用户)
我正在 InfoPath 中创建一个要集成到 SharePoint 2007 门户中的表单。在此表单中将有一个文本字段,用户可以在其中输入人员姓名。
如何验证此人是否存在?
有没有办法用门户的所有用户名填充下拉列表,而不是验证用户?(原因可能是来自 Active Directory 的用户)
我没有专门这样做,因此可能有更好的方法,但我一直在将大量数据从 SharePoint 中提取并放入 InfoPath 表单(部署到 SharePoint 表单库并通过 MOSS Enterprise 的 SharePoint 表单服务访问) 以及使用 SharePoint Web 服务的另一种方式 - 使用非常快,并且人员 Web 服务就在那里。
看看这个链接,它解释了如何用 SharePoint 用户填充下拉列表
http://blueinfopath.blogspot.com/2008/10/how-to-populate-list-with-sharepoint.html
我要验证, - 创建一个文本框 - 添加一个按钮,将其命名为 ValidateUser - 创建到......的接收连接 - 向 ValidateUser 添加规则 - 将文本框添加到辅助数据源中的 AccountName 字段 -执行接收连接 - 使用过滤器 Name="PreferredName" 获取字段 Value 的值
这适用于 Infopath Form Services 测试它并将 UserLogin 输入到文本框中,然后单击验证按钮
弗雷德里克
在 ASP.NET 应用程序中执行类似操作时,我使用了 Sharepoint 搜索并搜索了特定用户的“人员”范围。您还可以搜索个人资料信息,以便您可以撤回具有特定职位或特定部门的每个人。
使用此控件:http: //blogs.msdn.com/infopath/archive/2007/02/28/using-the-contact-selector-control.aspx
或者,如果您想构建自己的验证器,则需要查询 SharePoint 配置文件数据库。我建议直接查询 AD。网上有很多关于使用配置文件数据库的文章。
我不验证一个人的存在,但我确实使用他们的登录名和 SharePoint 来确定一个人的全名。您应该能够根据您的目的修改此代码,如下所示。要使其发挥作用,您需要在 InfoPath 文档中建立一个名为GetUsersFromSP的数据连接。配置如下:
string ADName = System.Environment.UserName;
IXMLDOMDocument3 UserQuery = (IXMLDOMDocument3)thisXDocument.GetDOM("GetUsersFromSP");
UserQuery.setProperty("SelectionNamespaces",
"xmlns:dfs=\"http://schemas.microsoft.com/office/infopath/2003/dataFormSolution\" " +
"xmlns:tns=\"http://schemas.microsoft.com/sharepoint/soap/directory/\"");
((WebServiceAdapterObject)thisXDocument.DataAdapters["GetUsersFromSP"]).Query();
IXMLDOMNode Users = UserQuery.selectSingleNode("//dfs:myFields/dfs:dataFields/tns:GetUserCollectionFromSiteResponse/tns:GetUserCollectionFromSiteResult/tns:GetUserCollectionFromSite/tns:Users");
foreach (IXMLDOMNode current in Users.selectNodes("tns:User"))
{
string Login = current.attributes.getNamedItem("LoginName").text;
Login = Login.ToUpper();
if (Login.EndsWith(ADName.ToUpper()))
{
thisXDocument.DOM.selectSingleNode("my:root/my:config/my:User").text = current.attributes.getNamedItem("Name").text;
break;
}
}