[sharepoint]修改Item或者File的Author和Editor

写在前面

最近项目中调用sharepoint rest api方式获取文件或者Item列表,而用的方式是通过证书请求,在上传文件,或者新建item的时候,默认的用户是在sharepoint端注册的用户,并不能满足需求,需要对其进行修改。因为注册的app,会将该注册的clientid和issurid对应的应用程序作为一个新的用户。关于注册的方式可以参考之前写的几篇文章。

系列文章

sharepoint环境安装过程中几点需要注意的地方

Rest API的简单应用

rest api方式实现对文档库的管理

通过WebClient模拟post上传文件到服务器

WebHttpRequest在sharepoint文档库中的使用

[sharepoint]Rest api相关知识(转)

[sharepoint]根据用户名获取该用户的权限

[sharepoint]根据用户名获取该用户的权限

代码

                ClientContext spContext = new ClientContext("http://xxx//xxxx/xxx");
                spContext.ExecutingWebRequest += spContext_ExecutingWebRequest;
                Web website = spContext.Web;
                spContext.Load(website);
                Microsoft.SharePoint.Client.File file = website.GetFileByServerRelativeUrl(serverReleativeUrl);
                ListItem item = file.ListItemAllFields;
                string loginName = @"i:0#.w|domain\" + _siteInfo.UserName;
                User user = spContext.Web.EnsureUser(loginName);
                item["Editor"] = user;
                item["Author"] = user;
                file.ListItemAllFields.Update();
                spContext.ExecuteQuery();

验证

        public void spContext_ExecutingWebRequest(object sender, WebRequestEventArgs e)
        {
            HttpWebRequest webReq = e.WebRequestExecutor.WebRequest;
            TokenHelper.ClientId = _siteInfo.ClientId;
            TokenHelper.IssuerId = _siteInfo.IssureId;
            var accessToken = TokenHelper.GetS2SAccessTokenWithWindowsIdentity(new Uri(_siteInfo.AppUrl), null);
            webReq.Method = "Post";
            webReq.Accept = "application/json;odata=verbose";
            webReq.Headers.Add("Authorization", "Bearer " + accessToken);
        }

修改Item类似

       /// <summary>
        /// 修改Item的作者和编辑者
        /// </summary>
        /// <param name="siteInfo"></param>
        /// <param name="itcode"></param>
        /// <param name="itemId"></param>
        public static void UpdateItemAuthor(SiteInfo siteInfo, string itcode, int itemId)
        {
            ClientContext spContext = new ClientContext(siteInfo.Url);
            spContext.ExecutingWebRequest += spContext_ExecutingWebRequest;
            Web web = spContext.Web;
            spContext.Load(web);
            spContext.ExecuteQuery();
            List lst = web.Lists.GetById(new Guid(siteInfo.ListId));
            spContext.Load(lst);
            spContext.ExecuteQuery();
            ListItem item = lst.GetItemById(itemId);
            string loginName = @"i:0#.w|lenovo\" + itcode;
            User user = web.EnsureUser(loginName);
            item["Author"] = user;
            item["Editor"] = user;
            item.Update();
            spContext.ExecuteQuery();
        }

在修改或者新建item或者File的时候需要先获取contextinfo

       /// <summary>
        /// 获得contextinfo
        /// </summary>
        /// <param name="siteInfo"></param>
        /// <returns></returns>
        private static string GetContextInfo(SiteInfo siteInfo)
        {
            HttpWebRequest contextInfoRequest = null;
            HttpWebResponse contextInfoEndpointResponse = null;
            StreamReader contextInfoStream = null;
            try
            {
                Uri hostWebUri = new Uri(siteInfo.Url);
                TokenHelper.ClientId = siteInfo.ClientId;
                TokenHelper.IssuerId = siteInfo.IssureId;
                var accessToken = TokenHelper.GetS2SAccessTokenWithWindowsIdentity(hostWebUri, null);
                //获取contextinfo
                contextInfoRequest = (HttpWebRequest)HttpWebRequest.Create(siteInfo.Url + "/_api/contextinfo");
                contextInfoRequest.Method = "POST";
                contextInfoRequest.Accept = "application/json;odata=verbose";
                contextInfoRequest.ContentLength = 0;
                contextInfoRequest.Headers.Add("Authorization", "Bearer " + accessToken);
                contextInfoEndpointResponse = (HttpWebResponse)contextInfoRequest.GetResponse();
                contextInfoStream = new StreamReader(contextInfoEndpointResponse.GetResponseStream(), Encoding.UTF8);
                string strContextInfoJson = contextInfoStream.ReadToEnd();
                return strContextInfoJson;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (contextInfoEndpointResponse != null)
                {
                    contextInfoEndpointResponse.Dispose();
                }
                if (contextInfoStream != null)
                {
                    contextInfoStream.Dispose();
                }
            }
        }

总结

如果在请求的时候能带上账户信息,是最简单的一种方式,默认的就是当前的用户信息。比如spContext.Credentials =new NetWorkCredentials (uid,pwd,domain);或者在模拟请求的时候request.Credentials =new NetWorkCredentials (uid,pwd,domain);这种方式就不用再次请求进行修改文件或者item的属性了。默认的就是当前请求的用户。

博客地址: http://www.cnblogs.com/wolf-sun/
博客版权: 本文以学习、研究和分享为主,欢迎转载,但必须在文章页面明显位置给出原文连接。
如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步!
再次感谢您耐心的读完本篇文章。http://www.cnblogs.com/wolf-sun/p/4756088.html
时间: 2024-08-30 19:05:07

[sharepoint]修改Item或者File的Author和Editor的相关文章

[sharepoint]rest api文档库文件上传,下载,拷贝,剪切,删除文件,创建文件夹,修改文件夹属性,删除文件夹,获取文档列表

写在前面 最近对文档库的知识点进行了整理,也就有了这篇文章,当时查找这些接口,并用在实践中,确实废了一些功夫,也为了让更多的人走更少的弯路. 系列文章 sharepoint环境安装过程中几点需要注意的地方 Rest API的简单应用 rest api方式实现对文档库的管理 通过WebClient模拟post上传文件到服务器 WebHttpRequest在sharepoint文档库中的使用 [sharepoint]Rest api相关知识(转) [sharepoint]根据用户名获取该用户的权限

pycharm shortcut

Alt+Enter 自动添加包 Ctrl+t SVN更新 Ctrl+k SVN提交 Ctrl + / 注释(取消注释)选择的行 Ctrl+Shift+F 高级查找 Ctrl+Enter 补全 Shift + Enter 开始新行 TAB Shift+TAB 缩进/取消缩进所选择的行 Ctrl + Alt + I 自动缩进行 Ctrl + Y 删除当前插入符所在的行 Ctrl + D 复制当前行.或者选择的块 Ctrl + Shift + J 合并行 Ctrl + Shift + V 从最近的缓存

SharePoint类库说明

Windows SharePoint Services类库说  命名空间:Microsoft.SharePoint  SPSite  功能:  Represents a collection of sites on a virtual server, including a top-level site and all its subsites.  代表一个虚拟服务器的网站集合,包含一个顶集网站和他的所有子站点Windows SharePoint Services类库说 命名空间:Microso

SharePoint更新文档库文档标题(Title)字段

前言:记录下写代码中遇到的小问题,帮同事写一个批量更新文档库标题字段的小程序,本来以为就Update一下就可以了,10分钟可以搞定.结果10分钟过去了,代码写好了,执行起来不报错,调试也没问题,只是要更新的东西没更新.然后问了下,文档库开启了签入签出(不判断会报错)和版本控制,找到问题所在了,Update是不行的. 1.废话不多说,上图和代码. SPFile file = listitemcoll[j].File; file.CheckOut(); file.Update(); file.Ite

Sharepoint 2010自定义WebService找不到网站应用程序的问题

错误描述:Net 开发WebService调用Microsoft.SharePoint.dll的服务器端对象模型,出现找不到网站的应用程序,或者出现500错误. 错误截图: [Webservice调用页错误] System.IO.FileNotFoundException: 找不到位于 http://localhost 的 Web 应用程序.请确认正确键入了此 URL.如果此 URL 需要提供现有内容,则系统管理员可能需要添加到指定应用程序的新请求 URL 映射. 在 Microsoft.Sha

SharePoint 2013同步Exchange显示高清用户照片

在"SharePoint 2013技巧分享系列 - Active Directory同步显示用户照片"文中介绍了如何同步Active Directory显示用户照片,但是同步完成后,用户照片尺寸和清晰度都不是非常理想.本文将介绍如何同步Exchange Server显示高清用户照片. 原理 与SharePoint Server 2010相似, 在SharePoint Server 2013中存在一个用户照片的目录.当SharePoint启用Exchange照片同步时, SharePoi

如何修改虚拟机中(Microsoft Virtual PC或VMware)的bios

修改Virtual PC虚拟机BIOS Microsoft Virtual PC,它的优势是内存占用小,与操作系统的兼容性强.通过修改虚拟机BIOS信息中的OEM字符,这样就可以安装OEM版本的Windows XP实现免激活了. 1. 需要准备的工具软件 为了修改虚拟机的BIOS信息,我们需要准备好如下工具软件: (1)Microsoft Virtual PC 2004:安装SP1补丁包后版本号为5.3.582.27. (2)ResScope:这是一个类似于eXeScope的软件资源分析和编辑工

Android 使用Scroller实现绚丽的ListView左右滑动删除Item效果

在上一篇文章中Android 带你从源码的角度解析Scroller的滚动实现原理从源码的角度介绍了Scroller的滚动实现原理,相信大家对Scroller的使用有一定的了解,这篇文章就给大家带来使用Scroller的小例子,来帮助大家更加熟悉的掌握Scroller的使用,掌握好了Scroller的使用我们就能实现很多滑动的效果.例如侧滑菜单,launcher,ListView的下拉刷新等等效果,我今天实现的是ListView的item的左右滑动删除item的效果,现在很多朋友看到这个效果应该是

背景-gridview的item点击变色的问题

问题描述 gridview的item点击变色的问题 android的.布局就是一个gridview,item就是一个textview,我想实现点击某个item,那个item就变成蓝色,再点击变成白色,再点击变成蓝色,依次下去 解决方案 给GridView添加setOnItemClickListener方法,如果是让文字变色,通过如下方法,如果是修改item的背景色,直接设置view的背景色就行.大概这么个意思,代码没实测. private boolean hasChecked = false;g