我想通過客戶端上下文更新SharePoint中的創建者列,但我的代碼無法正常工作。該列是文檔庫列。通過ClientContext更新Sharepoint文檔庫列的「創建人」列
我嘗試了幾個選項。我的第一個代碼塊無法更新該字段,但我的第二個代碼塊實際上是這樣做的,但它無法管理上傳大於150 MB的文件,這是我的第一個代碼塊能夠完成的。
這是我的第一個代碼塊:
using (var ctx = new ClientContext(spSiteUrl))
{
ctx.RequestTimeout = 1000000;
Web web = ctx.Web;
string strUser = "spDomain\\adminUser1";
var file = ctx.Web.GetFileByServerRelativeUrl(newServerRelPath);
var item = file.ListItemAllFields;
//First approach and it doesn't work
// -> Start
FieldUserValue fuvUser = new FieldUserValue();
User oUser = web.EnsureUser(strUser);
ctx.Load(oUser,
props=>props.Id,
props=>props.LoginName);
item["Author"] = oUser;
item["Created_x0020_By"] = oUser;
// -> End
//Second approach and still it doesn't work
// -> Start
List list = web.GetList(spDocLibUrl);
list.Fields.GetByInternalNameOrTitle("Author").ReadOnlyField = false;
list.Fields.GetByInternalNameOrTitle("Created_x0020_By").ReadOnlyField = false;
list.Update();
item["Author"]=web.EnsureUser(strUser);
item["Created_x0020_By"] = web.EnsureUser(strUser);
// -> End
item.Update();
ctx.ExecuteQuery();
}
如何更新的創建領域?
我在我的代碼上做的另一種方法實際上可以更新創建者字段,但是我的問題在於我無法上傳大於150 MB的文件。
這裏是我的第二個代碼塊:
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite site = new SPSite(spSiteUrl))
{
using (SPWeb web = site.OpenWeb())
{
//read file in filestream
System.IO.FileStream fStream = System.IO.File.OpenRead(filePath);
byte[] contents = new byte[fStream.Length];
fStream.Read(contents, 0, (int)fStream.Length);
fStream.Close();
web.AllowUnsafeUpdates = true;
SPFolder rootFolder = web.GetFolder(spFolderUrl);
string strUser = "spDomain\\adminUser1";
SPUser userCreatedBy = web.EnsureUser(strUser);
//This part sets the created by field successfully but fails to add files bigger than 150mb.
SPFile file = rootFolder.Files.Add(item.Name, contents,userCreatedBy,userCreatedBy,DateTime.Now,DateTime.Now);
int id = file.Item.ID;
SPListItem listItem = file.Item;//docsLibrary.GetItemById(id);
listItem["Created"] = item.CreationTime;
listItem["Modified"] = item.LastWriteTime;
listItem.Update();
web.AllowUnsafeUpdates = false;
}
}
});
也很明顯,我的第二個代碼塊不具有將requestTimeout設置。也許這可能是它無法上傳更大文件的原因。我想設置RequestTimeOut,但是如何將其添加到我的代碼中,或者有沒有其他更好的方法來執行此操作?
業務需求:編程方式上傳文件大於150 MB(300 MB,800 MB甚至1 GB以上)到SharePoint文檔庫並設置創建通過場誰是作者該文件來自本地源文件夾。
請讓我知道是否有什麼不清楚的問題,以便我可以更新它。
這看起來很有希望。我可能需要回到我的代碼並嘗試這可能會幫助我修復它。讓我看看它是否有效。感謝@BOG實驗室。 –
我認爲後面的代碼來自這個博客。 http://bugfree.dk/blog/2015/02/03/how-to-set-document-library-item-created-by-and-modified-by-fields-using-sharepoint-csom/ –
是的。但我們不應該發佈鏈接,因爲我複製了thw代碼片段。我希望它能解決你的問題。 – STORM