现在的位置: 首页 > 综合 > 正文

SharePoint对象模式获取“用户或用户组”栏的值

2014年11月12日 ⁄ 综合 ⁄ 共 2137字 ⁄ 字号 评论关闭

harePoint的People Picker控件真的是非常好用的一个东东。
但是,如果您需要输出某一个“用户或用户组”栏的值时,就显得有点麻烦了。

  1. 如果您采用item["***"].ToString()这样的形式的话,输出的每一个人或组的信息前都有N#这样的符号。
    很显然,很多时候采用这种方式时,我们不得不对字符串进行分析并截取。
  2. “用户或用户组”类型的在对象模型中,有其对应的类型: SPFieldUser,通过它,我们就可以获取到某一个
    用户或用户组栏的对象模型了,如:SPFieldUser uField=item["***"] as SPFieldUser;
  3. “用户或用户组”中,您可以输入用户,也可以输入用户组
  4. “用户或用户组”类型栏的值的获取实际上是通过SPFieldUserValueCollection和SPFieldUserValue来获取的,
    而SPFieldUserValue指的是某一个人或某一个组。
  5. SPFieldUserValueCollection的获取方法 : SPFieldUserValueCollection users=item["栏名"] as SPFieldUser
    ValueCollection. 

     那获取SPFieldUserValue呢? 当然,您可以通过users的迭代来获取,但是,某种情况下,这种方法行不通:当你没有启用“用户或用户
    组”这一栏“允许多重选择”时,通过上述方法获取的users将为null,可能你会有如下的方法来获取 SPFieldUserValue
    user=item["栏名"] as SPFieldUserValue。
    唉,我也通过这种方法来获取,但是非常遗憾的是,系统友好的提示我:此路不通!


  6. 骚:为什么在“允许多重选择”的情况下,通过SPFieldUserValueCollection users=item["栏名"] as
    SPFieldUserValueCollection就可以,而没启用的情况下用SPSPFieldUserValue
    user=item["栏名"] as
    SPFieldUserValue就行不通呢?这二个用法在针对是否启用“允许多重选择”下,是合情合理的啊?不管你怎么想,它就是行不通。
  7. 实际上,在没有“允许多重选择”的情况下,您得通过SPFieldUserValue的构造函数来初始化一个对象,如:

    SPFieldUserValue usere = new SPFieldUserValue(web, item["栏目名"].ToString());
    够折腾人的吧?

  8. 获得了SPFieldUserValueCollection和SPFieldUserValue对象后,该如何获取它里面的用户或用户组呢?
    获取用户:使用SPFieldUserValue的User属性。
    获取用户组:当SPFieldUserValue的User属性为null的时候,通过web.SiteGroups.GetByID(SPFieldUserValue.LookupID)来获取用户组。

  9. 一波三折后,无论是获取用户或用户组(包括获取用户组里的用户)应该就是手到擒来了。

  10. 附上一段从栏中获取用户的代码《没有作相关的异常或性能优化处理》:

     1
    public
     List
    <
    SPUser
    >
     GetUsersFromSPFieldUser(SPListItem item)

     2

    {

     3

      List

    <
    SPUser
    >
     fUsers
    =
    new
     List
    <
    SPUser
    >
    ();

     4

      SPWeb web 

    =
     item.ParentList.ParentWeb;

     5

      SPFieldUser uField

    =
    item.Fields[
    "
    作者
    "

    as
     SPFieldUser;

     6

      

    if
    (!uField.AllowMultipleValues) 
    //
    允许多重选择


     7

      
    {

     8

         SPFieldUserValue userValue 

    =
     
    new
     SPFieldUserValue(web, item[
    "
    作者
    "
    ].ToString());

     9

         fUsers.Add(userValue.User);

    10

      }




    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

    }

     

抱歉!评论已关闭.