I've been able to create doc sets and upload files to it with the client object model. I am having difficulty updating the properties of the files in the doc sets. Here is what I've tried:
public void UploadDocument(string siteurl, string listname, string docsetname, Microsoft.SharePoint.Client.File filename, string destination)
{
using (ClientContext clientContext = new ClientContext(siteurl))
{
clientContext.Credentials = new NetworkCredential("username", "password", "domain");
//Get Document List
List documentsList = clientContext.Web.Lists.GetByTitle(HttpUtility.UrlDecode(listname));
clientContext.Load(filename);
clientContext.ExecuteQuery();
var xfile = destination + filename.Name;
#region
//filename.CopyTo(xfile, true);
//clientContext.ExecuteQuery();
//Microsoft.SharePoint.Client.FileInformation fileInformation = Microsoft.SharePoint.Client.File.OpenBinaryDirect(clientContext, filename.ServerRelativeUrl);
//Microsoft.SharePoint.Client.File.SaveBinaryDirect(clientContext, destination, fileInformation.Stream, true);
#endregion
Microsoft.SharePoint.Client.File.SaveBinaryDirect(clientContext, xfile,
Microsoft.SharePoint.Client.File.OpenBinaryDirect(clientContext, filename.ServerRelativeUrl).Stream, true);
//==============>this is my problem area <====================
List oList = clientContext.Web.Lists.GetByTitle("Personnel Files2");
CamlQuery cq = CamlQuery.CreateAllItemsQuery();
ListItemCollection personFilesL = oList.GetItems(cq);
clientContext.Load(oList);
clientContext.Load(personFilesL);
clientContext.ExecuteQuery();
var liItem = personFilesL.ToList().Select(c => c.FieldValues["Name"] == filename.Name); //.Where(c => c.FieldValues["Name"] == filename.Name).Select(c => c.FieldValues["id"]);
ListItem li = oList.GetItems(liItem); //.GetItemById(liItem);
li["Document_x0020_Type"] = "Personnel file";
li["Country0"] = "1;#China";
li.Update();
//=================> end problem area <=======================
clientContext.ExecuteQuery();
}
}
What is the best way to update the properties of the files?