Sharepoint NewForm добавление приложений программно - PullRequest
0 голосов
/ 01 апреля 2010

У меня есть список с пользовательской формой, которая содержит пользовательский элемент управления загрузкой файлов. Как только пользователь выберет файл и нажмет кнопку «загрузить», я хочу, чтобы этот файл сразу попадал в список вложений в этом элементе списка.

Однако при добавлении файла в SPContext.Current.ListItem.Attachments для нового элемента вложение не будет отображаться в списке после сохранения.

Если я вместо этого использую item.Update () для нового элемента после добавления вложения, я получаю сообщение об ошибке в Sharepoint, но когда я затем возвращаюсь к списку, элемент там с его вложением. Похоже, что он пытается создать 2 новые записи одновременно, когда я сохраняю (item.Update), что приводит к второму из этих сбоя.

Как правильно добавить вложения таким образом?

oSPWeb.AllowUnsafeUpdates = true;

// Get the List item
SPListItem listItem = SPContext.Current.ListItem;

// Get the Attachment collection
SPAttachmentCollection attachmentCollection = listItem.Attachments;

Stream attachmentStream;
Byte[] attachmentContent;

// Get the file from the file upload control
if (fileUpload.HasFile)
{
    attachmentStream = fileUpload.PostedFile.InputStream;

    attachmentContent = new Byte[attachmentStream.Length];

    attachmentStream.Read(attachmentContent, 0, (int)attachmentStream.Length);

    attachmentStream.Close();
    attachmentStream.Dispose();

    // Add the file to the attachment collection
    attachmentCollection.Add(fileUpload.FileName, attachmentContent);
}

// Update th list item
listItem.Update();

1 Ответ

0 голосов
/ 01 апреля 2010

Попробуйте использовать SPAttachmentCollection.AddNow(string, byte[]) вместо SPAttachmentCollection.Add(string, byte[]). Использование AddNow также означает, что вам не придется звонить SPListItem.Update(). AddNow будет вызывать обновление самостоятельно, не вызывая ошибок, насколько я видел. Помимо этого изменения, у меня есть метод, который работает почти так же, как ваш код, поэтому он должен работать таким образом.

...