【发布时间】:2015-05-07 06:27:18
【问题描述】:
有没有办法更新 Office 365 中的已修改字段?我已经检查了 CSOM 和批量更新方法。但它失败了。谁能帮我更新这个字段。
【问题讨论】:
标签: sharepoint office365 csom
有没有办法更新 Office 365 中的已修改字段?我已经检查了 CSOM 和批量更新方法。但它失败了。谁能帮我更新这个字段。
【问题讨论】:
标签: sharepoint office365 csom
在尝试为列表项设置Modified、Created、Editor 和Author 字段之前,您需要禁用列表中的几个属性,特别是EnableVersioning 和@987654328 @。
SharePoint Online 先决条件是 SharePointOnline CSOM:
.NET client API reference for SharePoint Online
Nuget - Microsoft.SharePointOnline.CSOM
using (var context = new ClientContext(webUrl))
{
context.Credentials = new SharePointOnlineCredentials(userName,password);
var list = context.Web.Lists.GetByTitle(listTitle);
var item = list.GetItemById(itemID);
var user = context.Web.EnsureUser(accountName);
context.Load(user);
context.Load(list);
context.Load(item);
context.ExecuteQuery();
// If the properties are enabled on the list then disable them
bool updateList = list.ForceCheckout || list.EnableVersioning;
if (list.ForceCheckout) list.ForceCheckout = false;
if (list.EnableVersioning) list.EnableVersioning = false;
if (updateList)
{
list.Update();
context.ExecuteQuery();
}
// Now set the fields that are normally locked
item["Modified"] = DateTime.Now;
item["Created"] = DateTime.Now.AddDays(-3);
item["Author"] = user.Id;
item["Editor"] = user.Id;
item.Update();
context.ExecuteQuery();
}
【讨论】:
SharePoint CSOM API 不支持系统更新(SSOM API 对应的SystemUpdate method),但您可以直接操作Modified By 和Modified 等系统字段,如下所示。
using (var ctx = GetContext(webUri, userName, password))
{
//get List Item
var list = ctx.Web.Lists.GetByTitle(listTitle);
var item = list.GetItemById(itemId);
//Retrieve User
var user = ctx.Web.EnsureUser(accountName);
ctx.Load(user);
ctx.ExecuteQuery();
//Update system fields
item["Modified"] = DateTime.Now.AddMonths(-6);
item["Created"] = DateTime.Now.AddYears(-1);
item["Editor"] = user.Id;
item["Author"] = user.Id;
item.Update();
ctx.ExecuteQuery();
}
在哪里
public static ClientContext GetContext(Uri webUri, string userName, string password)
{
var securePassword = new SecureString();
foreach (var ch in password) securePassword.AppendChar(ch);
return new ClientContext(webUri) { Credentials = new SharePointOnlineCredentials(userName, securePassword) };
}
【讨论】:
SharePoint CSOM API 现在支持使用 UpdateOverwriteVersion 方法进行系统更新。这样,您可以修改 Modified、Created、Author 和 Editor 属性,而无需更改项目版本。例如:
$file = Get-PnPFile -Url $FileUrl -AsListItem
##update file properties
$item["Modified"] = $FileModifiedDate
$item["Created"] = $FileCreatedDate
$item["Author"] = $FileCreatedByDest.ID
$item["Editor"] = $FileModifiedByDest.ID
$fileTest2.UpdateOverwriteVersion()
Invoke-PnPQuery
这应该可以解决问题。
【讨论】: