Как загрузить файл в библиотеку SharePoint через одно из стандартных веб-сервисов - PullRequest
2 голосов
/ 31 августа 2010

Мне нужно загрузить несколько файлов XML в библиотеку SharePoint. Я должен сделать это с компьютера, который не является одним из серверов SharePoint (поэтому объектная модель не будет работать). Также в библиотеке есть пользовательский (целочисленный) столбец, и мне нужно установить его значение для загруженного файла.

Как загрузить файл и значение с помощью стандартных веб-сервисов SharePoint 2010?

Ответы [ 3 ]

6 голосов
/ 02 сентября 2010

Теперь я решил ее, используя объектную модель клиента (как предложил Дуг). Загрузка файла с помощью COM довольно проста:

public void UploadXmlFile(string xmlContent, int orderNumber)
{
    string filename = DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss") + "_" + orderNumber + ".xml";
    ClientContext context = new ClientContext(absoluteHostUrl + relativeWebUrl);
    using (MemoryStream stream = new MemoryStream())
    {
        // use a MemoryStream for the file contents
        StreamWriter writer = new StreamWriter(stream);
        writer.Write(xmlContent);
        writer.Flush();
        stream.Position = 0;
        // ... and upload it.
        Microsoft.SharePoint.Client.File.SaveBinaryDirect(
            context,
            "/" + relativeWebUrl + "Lists/" + libraryName + "/" + filename,
            stream,
            false);
    }
    // ...

... но после загрузки файл извлечен, и мне все еще нужно установить целочисленный столбец:

    // ...
    // get the created entry
    Web web = context.Web;
    List list = web.Lists.GetByTitle(libraryName);
    ListItemCollection itemCol = list.GetItems(new CamlQuery() { ViewXml = "<View/>" });
    context.Load(itemCol,
        items => items
            .Include(i => i[COLUMN_IMPORTORDERNUMBER])
            .Where(i => (string)i[COLUMN_FILELEAFREF] == filename)
            .Take(1)
            );
    context.ExecuteQuery();
    // ... found it? ...
    if (itemCol != null && itemCol.Count > 0)
    {
        ListItem item = itemCol[0];
        // ... set the ImportOrderNumber
        item[COLUMN_IMPORTORDERNUMBER] = orderNumber;
        item.Update();
        // ... and check in
        item.File.CheckIn("Checked in by WebService", CheckinType.MajorCheckIn);
        context.ExecuteQuery();
    }
}
2 голосов
/ 31 августа 2010

Я еще не использовал его, но клиентская объектная модель может быть хорошим выбором для этого.

0 голосов
/ 03 сентября 2010

Не могли бы вы использовать что-то такое же простое, как электронная почта для списка, и создать элемент из этого?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...