[sharepoint]修改Item或者File的Author和Editor
写在前面
最近项目中调用sharepoint rest api方式获取文件或者Item列表,而用的方式是通过证书请求,在上传文件,或者新建item的时候,默认的用户是在sharepoint端注册的用户,并不能满足需求,需要对其进行修改。因为注册的app,会将该注册的clientid和issurid对应的应用程序作为一个新的用户。关于注册的方式可以参考之前写的几篇文章。
系列文章
WebHttpRequest在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 = ;
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的属性了。默认的就是当前请求的用户。
[sharepoint]修改Item或者File的Author和Editor的更多相关文章
- sharepoint 修改AD密码
sharepoint 修改AD密码 下面是添加添加“空元素”代码: 第一个<CustomAction>是添加修改密码项目 第二个<CustomAction>是添加js修改脚本 ...
- VUE项目中使用this.$forceUpdate();解决页面v-for中修改item属性值后页面v-if不改变的问题
VUE项目中使用this.$forceUpdate();解决页面v-for中修改item属性值后页面v-if不改变的问题:https://blog.csdn.net/jerrica/article/d ...
- 利用Ajax增删改Sharepoint List Item
在使用一个工具的是想要在本地的HTML文件或者JS,修改Sharepoint List中的数据. 如下是找到的方法.不知道还有其他方法没.IE中可以使用.记得加载Jquery. 如果是Chrome 浏 ...
- sharepoint修改密码
增加SharePoint2010修改域密码功能 前提SharePoint2010的用户基于AD的,因此修改密码是修改了AD的密码,当然也可以修改本机密码(非域的密码).这里我们讨论修改域密码.我们修改 ...
- SharePoint Client Add Folder,file to Library
public void UploadDocument(string siteURL, string documentListName, string documentListURL, string d ...
- 修改应用进程open file值
本文用于记录java应用日志too many open files报错解决方法 操作系统:RHEL5.8 一.修改配置文件 1.vim /etc/security/limits.conf 加上:* s ...
- SharePoint 修改用户属性User Name
前言 最近,碰到一个奇怪的事情,在SharePoint里的用户,如果显示方式显示为登录名(Account)的方式,显示为空.如下图: 1.经过查找,发现是因为用户属性 User name为空造成的,如 ...
- SharePoint 修改项目的new图标显示天数
前言 最近有这么个需求,用户需要修改新建项目前面的new图标的显示天数,查了很久,发现有powershell命令或者stsadm命令可以,分享给大家. PowerShell命令 $wa = Get-S ...
- SharePoint Config database Log file too big – reduce it!
SharePoint Config database logs are one thing to keep an eye on since they do have a tendency to gro ...
随机推荐
- java虚拟机之虚拟机类加载机制
此处主要需要知道什么是java虚拟机?java虚拟机如何进行类加载的? java语言本身是编译型和解释型的语言,先对本地的java文件进行编译,编译后会在本地生成一个class文件,而这个生成的cla ...
- python-模块2
from collections import namedtuple # # 类 # p = namedtuple("Point", ["x", "y ...
- Saiku相关异常处理(十五)
Saiku大概是我的第一个持续更博的技术点,希望自己能在这条研究saiku的道路上越走越远嘻嘻 这里我们来记录一下研究saiku时遇到的异常信息,这篇博客会保持持续更新的. 1. Java heap ...
- VirtualBox fedora29 安装
目录 准备工作 VirtualBox安装 fedora安装 快捷键定义 准备工作 平台配置 win10 64位 内存 8G 硬盘 1T 下载地址 VirtualBox 5.2.22:https://w ...
- hadoop 设置回收站
我的问题是:hadoop回收站为什么会保留多个过期时间的数据 我们知道hadoop的回收站是在我们删除数据后能恢复的目录,但是我们并不希望在回收站保存太久的数据,我们可以使用如下参数进行配置. ...
- Windows平台下不同版本SVN对比
(1)SVN服务端subversion与SVN客户端tortoiseSVN (2)subversion服务器程序在windows下共有5个下载版本,分别是:Collabnet , SlikSVN , ...
- 剑指Offer 14. 链表中倒数第k个结点 (链表)
题目描述 输入一个链表,输出该链表中倒数第k个结点. 题目地址 https://www.nowcoder.com/practice/529d3ae5a407492994ad2a246518148a?t ...
- 解决Yii2中刷新网页时验证码不刷新的问题
解决Yii2中刷新网页时验证码不刷新的问题 [ 2.0 版本 ] ljfrocky 2015-05-30 19:39:00 1304次浏览 5条评论 10110 在Yii2框架中,如果在表单中使用 ...
- spring(三、spring中的eheche缓存、redis使用)
spring(三.spring中的eheche缓存.redis使用) 本文主要介绍为什么要构建ehcache+redis两级缓存?以及在实战中如何实现?思考如何配置缓存策略更合适?这样的方案可能遗留什 ...
- Spring mvc 加载HTML静态页面
看到网上大部分举例Spring MVC加载静态页面HTML方式都还要通过controller, 根据js和css文件的加载模式,html也同样可以直接加载 在spring的配置文件中例如 *-serv ...