SPUser的操作

处理Sharepoint中的SPListItem时,有时需要获得这个对象的"Created
By"(创建者),并且希望是SPUser类型,而不是string,这样可以进而得到该用户的权限、ID等等。
"Person or
Group"(用户或组)对应的类型是SPFieldUser,怎么把SPFieldUser转成SPUser呢?

网上找了些资料,发现要获得SPUser需要借助SPFieldUserValue,借鉴了一些代码,自己试了试,写了一个通用的方法:

         SPUser
GetSPUserFromSPListItemByFieldName(SPListItem spItem, string fieldName)

        {

            string
userName = spItem[fieldName].ToString();

            SPFieldUser
_user = (SPFieldUser)spItem.Fields[fieldName];

            SPFieldUserValue
userValue = (SPFieldUserValue)_user.GetFieldValue(userName);

            return
userValue.User;
        }

//SharePoint中的"用户或用户组"栏,当选择了"允许多重选择"后,用对象模型SPListItemCollection["栏名"]获得到的是SPFieldUserValueCollection的对象:

SPFieldUserValueCollection users = SPListItem["栏名"] as
SPFieldUserValueCollection;

如果将SPListItemCollection["栏名"]输入字符串的话,是"用户ID;#用户Name",

 一 为栏赋值有这几种方式,
SPListItem["栏名"] =
SPUser实例或者SPGroup实例,但是不能赋SPUserCollection;
SPListItem["栏名"] =
"用户ID;#用户Name;#用户ID;#用户Name......";
SPListItem["栏名"] =
SPFieldUserValueCollection实例;(当栏设置允许多重选择为否时,赋的值都是集合中的第一个)

SPListItem["栏名"] = SPFieldUserValue实例;
 二 获取栏的值

当栏设置为"允许多重选择"为否时,不管用SPFieldUserValueCollection userValues=item["栏名"]
as SPFieldUserValueCollection;还是SPFieldUserValue userValue = item["栏名"] as
SPFieldUserValue;得到的值都是Null;

如果想判断是否选择了"允许多重选择",可以先查看SPFieldUser字段的AllowMutipleValues属性.不过真麻烦.

实际上在该字段在"允许多重选择"为否时,字段类型是string,为是时,字段类型是SPFieldUserValueCollection.

          protected
void btnOK_Click(object sender, EventArgs e)

        {

            ArrayList
list = PeopleEditor1.ResolvedEntities;

            string
msgTo = "";

            //获取id和显示名称

            foreach
(Microsoft.SharePoint.WebControls.PickerEntity p in list)

            {

                string
userId = p.EntityData["SPUserID"].ToString();

                msgTo
+= userId + "#";

            }

            //获取帐号

            ArrayList
selectedAccoutList = PeopleEditor1.Accounts;

            string
selectedAccouts2 = PeopleEditor1.CommaSeparatedAccounts;

            SPSecurity.RunWithElevatedPrivileges(delegate()

            {

                if
(msgTo != "")

                {

                    for
(int i = 0; msgTo.Length > 1; i++)

                    {

                        string
lassmsgto = string.Empty;

                        lassmsgto
= msgTo.Substring(msgTo.IndexOf("#") + 1);

                        msgTo
= msgTo.Substring(0, msgTo.IndexOf("#"));

                        SPSite
site = new SPSite(SPContext.Current.Site.Url);

                        SPWeb
web = site.RootWeb;

                        .AllowUnsafeUpdates
= true;

                        web.AllowUnsafeUpdates
= true;

                        SPListItem
item = web.Lists["Messageboard"].Items.Add();

                        item["ToNameID"]
= msgTo;

                        item["Content"]
= this.txtContent.Text.Trim();

                        item["Title"]
= this.txtTitle.Text.Trim();

                        SPFieldUserValue
userValue = new SPFieldUserValue(web,msgTo);

                        item["ToName"]
= userValue;

                        item.Update();

                        web.AllowUnsafeUpdates
= false;

                        site.AllowUnsafeUpdates
= false;

                        msgTo
= lassmsgto;

                    }

                }

            });

            GridView1Show();

        }

时间: 2024-10-12 22:56:44

SPUser的操作的相关文章

SPGroup 和SPUser的常用操作

http://www.cnblogs.com/gzh4455/archive/2012/03/26/2417854.html private bool RemoveUserFromGroup(string sGoupName, string sUserLoginName) { bool res = false; try { SPWeb web = SPContext.Current.Web; SPGroup oGroup = web.SiteGroups[sGoupName]; SPUser o

powershell 操作sharepoint命令集

打开SharePoint 2013 Management Shell, and then run as administrator.执行如下命令 1. 添加wsp和安装Add-SPSolution -LiteralPath "C:\DeployResource\WSP\test.wsp"Install-SPSolution -Identity "test.wsp" -WebApplication "http://domain:port/" -GA

SharePoint 2013开发入门探索(二)- 列表操作

我们如何用代码对SharePoint列表做些例如增删改查的操作呢?如果您的程序可以部署到服务器上,就可以使用 服务器对象模型,因为服务器对象模型提供的功能最多,限制最少:否则可能要选择客户对象模型等其他方式,这可能会遇到一些功能限制:另外还有一些其他的访问方式,例如Web服务等.如何在 SharePoint 2013 中选择正确的 API 集请参考链接 http://msdn.microsoft.com/zh-cn/library/jj164060.aspx. 我们首先研究下服务器对象模型.使用

列表操作 - C#开发人员

理 SharePoint 2013开发入门探索(二)- 列表操作 我们如何用代码对SharePoint列表做些例如增删改查的操作呢?如果您的程序可以部署到服务器上,就可以使用 服务器对象模型,因为服务器对象模型提供的功能最多,限制最少:否则可能要选择客户对象模型等其他方式,这可能会遇到一些功能限制:另外还有一些其他的访问方式,例如Web服务等.如何在 SharePoint 2013 中选择正确的 API 集请参考链接http://msdn.microsoft.com/zh-cn/library/

如何用一个app操作另外一个app.比如微信群控那样的

如何实现一个app.控制另外的app,比如市面上群控微信的,是用测试工具的原理?还是什么模拟点击的原理? 如何用一个app操作另外一个app.比如微信群控那样的 >> android 这个答案描述的挺清楚的:http://www.goodpm.net/postreply/android/1010000007186891/如何用一个app操作另外一个app比如微信群控那样的.html

ELK 学习笔记之 elasticsearch Mget操作

Mget操作: 查询多个文档: curl -XGET 'http://192.168.1.151:9200/_mget' -d '{"docs": [{"_index": "library","_type": "books", "_id": "1"}, {"_index": "library","_type"

条件、循环、函数定义、字符串操作练习

注意标准库的两种导入与使用方式,建议大家采用<库名>.<函数名>的方式. 对前面的代码进行优化,用for,while,if,def实现: 用循环画五角星 1 import turtle 2 3 turtle.fillcolor("red") 4 turtle.begin_fill() 5 for i in range(5): 6 turtle.forward(100) 7 turtle.right(144) 8 turtle.end_fill() 用循环画同心圆

Python 文件操作

操作文件时,一般需要经历如下步骤: 打开文件 操作文件 一.打开文件 文件句柄 = open('文件路径', '模式') 打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作. 打开文件的模式有: r,只读模式(默认). w,只写模式.[不可读:不存在则创建:存在则删除内容:] a,追加模式.[可读: 不存在则创建:存在则只追加内容:] "+" 表示可以同时读写某个文件 r+,可读写文件.[可读:可写:可追加] w+,写读 a+,

Python操作数据库(mysql redis)

一.python操作mysql数据库: 数据库信息:(例如211.149.218.16   szz  123456) 操作mysql用pymysql模块 #操作其他数据库,就安装相应的模块 import  pymysql ip='211.149.218.16' port=3306 passwd='123456' user='root' db='szz' conn=pymysql.connect(host=ip,user=user,port=port,passwd=passwd,db=db,cha