Как я могу получить вложения элемента списка или хотя бы пути к вложениям из SharePoint через клиентскую объектную модель Silverlight? - PullRequest
3 голосов
/ 29 июня 2011

У меня есть сайт SharePoint, на котором я размещаю интерфейс Silverlight с использованием клиентской объектной модели Silverlight. В одном из списков, для которых мне нужно получить данные, есть вложения. Мне нужно найти способ перечислить эти вложения, но я не могу найти способ сделать это.

В ListItem есть поле "Вложения", но это только логическое значение, указывающее, существует вложение или нет.

Я видел множество примеров этого с использованием SPListItem, но как мне поступить, используя вместо этого объектную модель клиента Silverlight?

Ответы [ 2 ]

6 голосов
/ 02 августа 2011

Я также столкнулся с этой проблемой и с помощью ответа от ScottyG30 и ответа на этой темы Я написал функцию для извлечения вложения из ListItem:

// this method needs to be executed in background thread
public String[] GetAttachments(ClientContext ctx, List list, ListItem item)
{
    // these properties can be loaded in advance, outside of this method
    ctx.Load(list, l => l.RootFolder.ServerRelativeUrl);
    ctx.Load(ctx.Site, s=>s.Url);
    ctx.ExecuteQuery();

    // get the item's attachments folder 
    Folder attFolder = ctx.Web.GetFolderByServerRelativeUrl( list.RootFolder.ServerRelativeUrl + "/Attachments/" + item.Id);
    FileCollection files = attFolder.Files;
    // I needed only urls, so I am loading just them
    ctx.Load(files, fs => fs.Include(f => f.ServerRelativeUrl));
    ctx.ExecuteQuery();

    // now you have collection of files
    return (from file in files select ctx.Site.Url + file.ServerRelativeUrl).ToArray();
}

Хотя это работает для меня, это не кажется мне лучшим решением, когда вам нужны вложения (URL) для всех элементов в большом списке (каждый элемент executing query).

0 голосов
/ 13 июля 2011
ClientContext spContext = ClientContext.Current;
File.OpenBinaryDirect(spContext, spContext.Web.ServerRelativeUrl + "/lists/[ListName]/Attachments/[ItemID]/[File Name]", (w, f) =>
        {
            var foo = f.Stream;

        }, (q, w) => { 
            handler(this, new Exception(w.Message)); 
        });
...