Sharepoint Online: копирование вложения элемента списка в новый элемент с использованием объектной модели клиента.

Я хочу прочитать вложения из одного элемента списка (в событии ItemCreated) в другой новый ListItem. Как я могу сделать это с клиентской объектной моделью? Я нашел только код на стороне сервера...

Другой вопрос: удаляются ли вложения, когда я удаляю элемент списка, или они все еще существуют на сервере?

1 ответ

Решение

Я понял! Следующий код работал для меня:

private static void NewTryToAttachFiles(ClientContext ctx, Web web, List fromList, ListItem fromItem, List toList, ListItem toItem)
    {
        string src = string.Format("{0}/lists/{1}/Attachments/{2}", web.Url, fromList.Title, fromItem.Id);

        Folder attachmentsFolder = web.GetFolderByServerRelativeUrl(src);
        web.Context.Load(attachmentsFolder);
        FileCollection attachments = attachmentsFolder.Files;

        web.Context.Load(attachments);
        web.Context.ExecuteQuery();

        if(attachments.Count > 0)
        {
            foreach (File attachment in attachments)
            {
                // FileInformation fileInfo = File.OpenBinaryDirect(ctx, attachment.ServerRelativeUrl);

                ctx.Load(toItem);
                var clientResultStream = attachment.OpenBinaryStream();
                ctx.ExecuteQuery();
                var stream = clientResultStream.Value;



                AttachmentCreationInformation attachFileInfo = new AttachmentCreationInformation();
                Byte[] buffer = new Byte[attachment.Length];
                int bytesRead = stream.Read(buffer, 0, buffer.Length);
                System.IO.MemoryStream stream2 = new System.IO.MemoryStream(buffer);
                attachFileInfo.ContentStream = stream2;
                attachFileInfo.FileName = attachment.Name;

                Attachment a = toItem.AttachmentFiles.Add(attachFileInfo);
                ctx.Load(a);
                web.Context.ExecuteQuery();
                stream2.Close();
            }
        }
        ctx.Load(toItem);
        ctx.ExecuteQuery();
    }

Он копирует вложения одного элемента списка (fromItem) в новый элемент!

Другие вопросы по тегам