вторник, 27 апреля 2010 г.

SharePoint 2010 CSOM: How to upload file to folder and set fields

Заливка файлов в Client Object Model и одновременное задание полей мне не сразу дались.
Например вот такой метод для док либ работать не будет:
var clientContext = new ClientContext("http://server2010/sub");
var web = clientContext.Web;
var list = web.Lists.GetByTitle("SuperDocLibWithFields");

var lci = new ListItemCreationInformation();

lci.FolderUrl = "/sub/SuperDocLibWithFields/Folder1";
lci.LeafName = "FileSuper.txt";
lci.UnderlyingObjectType = FileSystemObjectType.File;

var item = list.AddItem(lci);
item.Update();

clientContext.Load(item);
clientContext.ExecuteQuery();

Выдает ошибку: "To add an item to a document library, use SPFileCollection.Add()"

Надо делать вот так:
var clientContext = new ClientContext("http://server2010/sub");

var FileSrvRelUrl = "/sub/SuperDocLibWithFields/Folder1/File3.txt";
using (var fileStream = new MemoryStream(new byte[100]))
{
    Microsoft.SharePoint.Client.File.SaveBinaryDirect(clientContext, FileSrvRelUrl, fileStream, false);
}
var web = clientContext.Web;
var f = web.GetFileByServerRelativeUrl(FileSrvRelUrl);
var item = f.ListItemAllFields;
item["NewCol"] = "Value";
item["Author"] = 66;
item["Editor"] = 67;

item["Created"] = DateTime.Now.AddYears(-10);
item["Modified"] = DateTime.Now.AddYears(-5);
item.Update();
clientContext.Load(item, i=>i.Id);
clientContext.ExecuteQuery();

Console.WriteLine("Item id {0}",item.Id);

Комментариев нет: