在SharePoint中无代码开发InfoPath应用: 获取当前用户信息
很多种不同的场景下,会需要得到当前的用户信息,例如需要根据当前用户判断组,进而控制权限。
首先InfoPath提供了一个userName方法,来实现这个目的,不过这个方法的问题是只能获得不包含域名的用户名,例如,一个contoso\danj的用户,这个方法返回的是danj。
对于只有一个域的场景,可以使用concat方法来拼凑出完整的用户名,例如:concat("contoso\", userName())。

如果上面的方法不足以解决你的问题,那就要求助于SharePoint Web Service了。
例如下面两篇文章都是说的这个问题。
Thttp://jaliyaudagedara.blogspot.com/2011/05/getting-current-users-sharepoint-group.html
http://info.akgroup.com/blog-0/bid/69277/InfoPath-Restrict-visibility-to-users-in-a-SharePoint-Group
无一例外的,都是使用了UserProfileService.asmx Web Service中的GetUserProfileByName方法。
这个方法很简单,也很好用,一般情况下这个方法就足够了。
这个方法也有一个缺点就是挑环境,如果你google "GetUserProfileByName infopath error",你会发现有各种各样的错误讨论。基本上都是和Server配置环境相关的。
例如,我朋友的这篇文章曾经也讨论过类似问题:http://www.cnblogs.com/fanwenxuan/archive/2011/03/14/1984159.html
如果你不幸的无法使用上面方法,可以尝试使用UserGroup.asmx中的GetCurrentUserInfo方法。使用这个方法有些复杂,下面会做介绍:
- InfoPath添加一个数据连接,选择Receive data.

- 数据源选择来自于SOAP Web Service

- 输入SOAP Web Service路径,http://yoursite/_vti_bin/usergroup.asmx

- 在解析出来的方法列表中找到GetCurrentUserInfo方法。

- 根据需要选择是否允许离线使用数据,一般情况下,不要选中。

- 给这个数据链接命名,根据情况选择是否一旦表单打开就自动获取数据,由于这个方法一般是其他的使用的基础,一般都选中。

- 这样,就添加好了GetCurrentUserInfo数据连接。

- 添加好的数据连接在高级视图中如下所示,这个时候其实根本无法使用,因为默认InfoPath没有对这个数据进行解析。

- 下面来手动增加这个数据解析。先将InfoPath模板导出为源文件。

- 导出的文中,关于这个连接的大概会有如下类型的文件。

- 打开GetCurrentUserInfo1.xsd文件(也可能是其他文件,也可以寻找文件包含<s:element
name="GetCurrentUserInfoResponse">的)。 - 在文件的开始位置。紧接着<s:import
namespace="http://www.w3.org/2001/XMLSchema"></s:import>的后面。
<s:schema
elementFormDefault="qualified"
targetNamespace="http://schemas.microsoft.com/sharepoint/soap/directory/"
xmlns:s="http://www.w3.org/2001/XMLSchema"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
xmlns:tns="http://schemas.microsoft.com/sharepoint/soap/directory/"
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/">
<s:import
namespace="http://www.w3.org/2001/XMLSchema"></s:import>
<s:element
name="GetUserCollectionFromSite">
<s:complexType></s:complexType>
</s:element>
- 插入如下的一段定义,如下所示。
<s:schema
elementFormDefault="qualified"
targetNamespace="http://schemas.microsoft.com/sharepoint/soap/directory/"
xmlns:s="http://www.w3.org/2001/XMLSchema"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
xmlns:tns="http://schemas.microsoft.com/sharepoint/soap/directory/"
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/">
<s:import
namespace="http://www.w3.org/2001/XMLSchema"></s:import>
<s:complexType
name="User">
<s:attribute
name="Notes"
type="s:string"></s:attribute>
<s:attribute
name="Name"
type="s:string"></s:attribute>
<s:attribute
name="IsSiteAdmin"
type="s:string"></s:attribute>
<s:attribute
name="Sid"
type="s:string"></s:attribute>
<s:attribute
name="Flags"
type="s:string"></s:attribute>
<s:attribute
name="ID"
type="s:string"></s:attribute>
<s:attribute
name="LoginName"
type="s:string"></s:attribute>
<s:attribute
name="Email"
type="s:string"></s:attribute>
<s:attribute
name="IsDomainGroup"
type="s:string"></s:attribute>
</s:complexType>
<s:element
name="GetUserCollectionFromSite">
<s:complexType></s:complexType>
</s:element>
- 在这个文件中查找<s:element
name="GetUserInfo">,并插入一段定义,如下高亮所示。
<s:element
name="GetUserInfo">
<s:complexType>
<s:sequence>
<s:element
minOccurs="0"
maxOccurs="1"
name="userLoginName"
type="s:string"></s:element>
<s:element
name="User"
type="tns:User" />
</s:sequence>
</s:complexType>
</s:element>
- 保存文件。在同样的文件夹下,右键单击manifest文件,选择Design打开。

- 重新在高级视图中看这个数据源,你可以发现User对象已经可以解析出来了。

- 添加控件,就可以看到结果了。

最后,来说说这个方法的缺点。
由于我们对数据连接做了修改,所以修改好后,不能再对这个数据连接再次修改了,要不一切都会丢失,你需要从头再来。
后记:
不知道有没有人感兴趣那一段定义是从哪里来的,为什么要添加到GetUserInfo里面。下面简单介绍下。
那一段定义来自于GetCurrentUserInfoX.xsd的最后一个文件(X根据这个数据连接修改的次数会有不同,一般为2,5,8….)。
还有一个出处是微软SharePoint协议文档:[MS-UGS]: UserGroup Web Service Protocol.
在协议文档中,GetCurrentUserInfoResponse有一个GetCurrentUserInfo的说明,看起来应该是返回这个字段才对,为什么跑去修改GetUserInfo?
在协议文档中,有一段附录的WSDL说明:
<s:element
name="GetCurrentUserInfoResponse">
<s:complexType>
<s:sequence>
<s:element
name="GetCurrentUserInfoResult">
<s:complexType>
<s:sequence>
<s:element
name="GetUserInfo">
<s:complexType>
<s:sequence>
<s:element
name="User"
type="tns:User" />
</s:sequence>
</s:complexType>
</s:element>
</s:sequence>
</s:complexType>
</s:element>
</s:sequence>
</s:complexType>
</s:element>
或者利用第一篇文章提到的工具,也可以看到类似的结果。
至于微软为什么这么设计,我就不知道了。

所以应该找GetUserInfo去修改。不过为什么不能直接把GetCurrentUserInfo1.xsd文件的<s:any></s:any>替换掉?我也不知道,替换掉会报错的。
<s:element
name="GetCurrentUserInfoResponse">
<s:complexType>
<s:sequence>
<s:element
minOccurs="0"
maxOccurs="1"
name="GetCurrentUserInfoResult">
<s:complexType>
<s:sequence>
</s:sequence>
</s:complexType>
</s:element>
</s:sequence>
</s:complexType>
</s:element>
在SharePoint中无代码开发InfoPath应用: 获取当前用户信息的更多相关文章
- 在SharePoint中无代码开发InfoPath应用: 一个测试Web Service的工具
这是这个系列的第一篇,介绍一个小工具,主要是用在Web Service测试的. 因为为了用一点高级的东西,就免不了和web service打交道. 你可以使用按照KB819267来修改web.conf ...
- SpringBoot中获取微信用户信息从未如此简单!
前言 不知道你是否参加过拼多多上邀请微信好友砍价功能,这个功能实现首先需要考虑的就是获取微信用户的信息.获取用户信息就是获取公众号下微信用户的信息,今天我就来讲讲如何从公众号下获取微信用户信息. 需要 ...
- BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第3章节--SharePoint 2013 开发者工具 SharePoint中基于Web开发
BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第3章节--SharePoint 2013 开发者工具 SharePoint中基于Web开发 之前提到过, ...
- Salesforce吹嘘无代码开发,不用费脑子的人工智能
Salesforce在星期四举办的Dreamforce '16大会上,开发人员主题演讲可谓面面俱到--听众被舞台包围了,而不是远远地坐在观众席. 这是符合该公司在六月份第一次的开发者大会Trailhe ...
- TERSUS无代码开发(笔记07)-简单实例手机端后台逻辑开发
提交申请逻辑开发 1.添加父级对象引用(从父级对象中获取前端输入框的值) 1.设计数据库表(表名和字段名称不能用中文) 2.设计置数据库主键(可设联合主键) 3.传值形成数据实列处理 4.服务器端处理 ...
- TERSUS无代码开发(笔记06)-简单实例手机端页面设计
手机端的设计 1.页面说明 2.默认页面===>提交请假单(上面页面双击进入,页面主要编辑区) 2.1默认页面===>提交请假单===>头部区(页面部份主要编辑区01) 2.1.1默 ...
- TERSUS无代码开发(笔记05)-简单实例电脑端页面设计
案例笔记电脑端页面设计 1.新建项目(请假管理qjgl) 2.开发软件界面介绍(常用的功能按键) 3.目录中显示元件对象 4.对元件对象的操作主要方式是双击(双击哪个元件, ...
- TERSUS无代码开发(笔记04)-CSS样式设置
CSS样式设置 1.常用显示样式 大小尺寸 说明 间距边距 说明 各类颜色 说明 width 宽 margin 外边距 color 颜色 height 高 pad ...
- TERSUS无代码开发(笔记03)-常用快捷键
常用快捷键 1.a 普通行为元件调用 2.b 判断输入的值是什么值 3.c 有条件的传值处理 4.e 输出元件 5.f 传值或流程 6.t 输入元件 7.p 调用元件查询 8.x 判断是否有输入值 图 ...
随机推荐
- 在ASP.NET开发中容易忽略的2个小问题
本文地址:http://www.cnblogs.com/outtamyhead/p/3642729.html,转载需保留本地址. 最近在我的MVC项目中出现了两个非常小,但是往往惹出大麻烦的问题,借中 ...
- JavaScript之Array常用函数汇总
[20141121]JavaScript之Array常用功能汇总 *:first-child { margin-top: 0 !important; } body>*:last-child { ...
- So Easy!让开发人员更轻松的工具和资源
这篇文章给大家分享让开发人员生活更轻松的免费工具和资源.所以,如果你正在寻找一些为迅速解决每天碰到的设计和开发问题的工具和资源,不要再观望,试试这些工具吧.这些奇妙的工具不仅会加快您的生产,也让你的工 ...
- DalekJS – 基于 JavaScript 实现跨浏览器的自动化测试
在 Web 项目中,浏览器兼容以及跨浏览器测试是最重要的也是最费劲的工作.DalekJS 是一个基于 JavaScript(或 Node.js) 的免费和开源的自动化测试接口.它能够同时运行测试一组流 ...
- NodeJS+Mongodb+Express做CMS博客系统
楼主正在用业余时间开发中-- ,目前的版本仅支持会员系统,尝鲜一下吧~ hi-blog 一个 nodejs+express+mongodb 的 cms 系统 怎么启动 默认你已经安装了 mongodb ...
- UWP开发入门(十二)——神器Live Visual Tree
很久以前,我们就有Snoop这样的工具实时修改.查看正在运行的WPF程序,那时候调个样式,修改个模板,相当滋润.随着历史的车轮陷进WP的泥潭中,无论WP7的Silverlight还是WP8.1的run ...
- 如何单独启动wamp 中自带的MySQL
前言:Wamp集成了Apache.MySQL和PHP环境.使用Wamp进行网站开发,是很多网站开发爱好者的选择.同时,其集成的MySQL服务,也常被用于MySQL的开发.这个时候我们只是想启动MySQ ...
- Redis设计与实现-内部数据结构篇
题记:这本书是2015年11月份开始读的,大约花了一个多月的时间通读了一遍,最近由于需要对redis做一些深入的了解,因此又花了两个多月仔细精读了一遍,由于本书设计的内容较多,且每部分的内容都比较细致 ...
- 对Mathsapp的测试以及找bug
组员博客地址: 练思明 卓嘉炜:http://www.cnblogs.com/luoliuxi/ 何宇明:http://www.cnblogs.com/40heyuming/ 团队贡献分: 练思明:2 ...
- 在执行Action之间检验是否登录
在执行Action之间检验是否登录,也可以在执行Action前先执行某一个操作 public class BaseController : Controller { protected string ...