设为首页 收藏本站
查看: 2415|回复: 0

[经验分享] SharePoint对象模式获取“用户或用户组”栏的值

[复制链接]
发表于 2015-9-29 12:16:27 | 显示全部楼层 |阅读模式
SharePoint的People Picker控件真的是非常好用的一个东东。
但是,如果您需要输出某一个“用户或用户组”栏的值时,就显得有点麻烦了。

  • 如果您采用item["***"].ToString()这样的形式的话,输出的每一个人或组的信息前都有N#这样的符号。
    很显然,很多时候采用这种方式时,我们不得不对字符串进行分析并截取。
  • “用户或用户组”类型的在对象模型中,有其对应的类型: SPFieldUser,通过它,我们就可以获取到某一个
    用户或用户组栏的对象模型了,如:SPFieldUser uField=item["***"] as SPFieldUser;
  • “用户或用户组”中,您可以输入用户,也可以输入用户组
  • “用户或用户组”类型栏的值的获取实际上是通过SPFieldUserValueCollection和SPFieldUserValue来获取的,
    而SPFieldUserValue指的是某一个人或某一个组。
  • SPFieldUserValueCollection的获取方法 : SPFieldUserValueCollection users=item["栏名"] as SPFieldUser
    ValueCollection.   那获取SPFieldUserValue呢? 当然,您可以通过users的迭代来获取,但是,某种情况下,这种方法行不通:当你没有启用“用户或用户组”这一栏“允许多重选择”时,通过上述方法获取的users将为null,可能你会有如下的方法来获取 SPFieldUserValue user=item["栏名"] as SPFieldUserValue。
    唉,我也通过这种方法来获取,但是非常遗憾的是,系统友好的提示我:此路不通!
  • 牢骚:为什么在“允许多重选择”的情况下,通过SPFieldUserValueCollection users=item["栏名"] as SPFieldUserValueCollection就可以,而没启用的情况下用SPSPFieldUserValue user=item["栏名"] as SPFieldUserValue就行不通呢?这二个用法在针对是否启用“允许多重选择”下,是合情合理的啊?不管你怎么想,它就是行不通。
  • 实际上,在没有“允许多重选择”的情况下,您得通过SPFieldUserValue的构造函数来初始化一个对象,如:   SPFieldUserValue usere = new SPFieldUserValue(web, item["栏目名"].ToString());
    够折腾人的吧?
  •   获得了SPFieldUserValueCollection和SPFieldUserValue对象后,该如何获取它里面的用户或用户组呢?
    获取用户:使用SPFieldUserValue的User属性。
    获取用户组:当SPFieldUserValue的User属性为null的时候,通过web.SiteGroups.GetByID(SPFieldUserValue.LookupID)来获取用户组。
  •   一波三折后,无论是获取用户或用户组(包括获取用户组里的用户)应该就是手到擒来了。
  •   附上一段从栏中获取用户的代码《没有作相关的异常或性能优化处理》:


    1 DSC0000.gif public List<SPUser> GetUsersFromSPFieldUser(SPListItem item)
    2 DSC0001.gif DSC0002.gif DSC0003.gif {
    3 DSC0004.gif   List<SPUser> fUsers=new List<SPUser>();
    4  SPWeb web = item.ParentList.ParentWeb;
    5  SPFieldUser uField=item.Fields["作者"] as SPFieldUser;
    6  if(!uField.AllowMultipleValues) //允许多重选择
    7 DSC0005.gif DSC0006.gif   {
    8     SPFieldUserValue userValue = new SPFieldUserValue(web, item["作者"].ToString());
    9     fUsers.Add(userValue.User);
    10 DSC0007.gif   }
    11  else
    12  {
    13    SPFieldUserValueCollection userValues=item["作者"] as SPFieldUserValueCollection;
    14    foreach(SPFieldUserValue userValue in userValues)
    15    {
    16       if(null!=userValue.User)
    17       {
    18          fUsers.Add(userValue.User);
    19       }
    20       else
    21       {
    22          SPGroup userGroup=web.SiteGroups.GetByID(userValue.LookupID);
    23          fUsers.AddRange(userGroup.Users);
    24       }
    25    }
    26  }
    27  return fUsers;
    28 DSC0008.gif }  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-120443-1-1.html 上篇帖子: Sharepoint学习笔记---如何在Sharepoint2010网站中整合Crystal Report水晶报表(显示数据 二) 下篇帖子: SharePoint v3:忘掉模拟用户Impersonate,SPSecurity.RunWithElevatedPrivileges来了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表