Можно ли создавать события календаря с вложениями?

Я хочу создать календарное событие с помощью Microsoft Graph, и это работает, но, к сожалению, я не могу добавлять вложения к событию. Событие создано, но без вложений. Об ошибках не сообщается.

Это мой код:

DateTimeTimeZone start = new DateTimeTimeZone
{
    TimeZone = TimeZoneInfo.Local.Id,
    DateTime = dateTimePicker1.Value.ToString("o"),
};

DateTimeTimeZone end = new DateTimeTimeZone
{
    TimeZone = TimeZoneInfo.Local.Id,
    DateTime = dateTimePicker2.Value.ToString("o"),
};

Location location = new Location
{
    DisplayName = "Thuis",
};

byte[] contentBytes = System.IO.File
    .ReadAllBytes(@"C:\test\sample.pdf");

var ev = new Event();

FileAttachment fa = new FileAttachment
{
    ODataType = "#microsoft.graph.fileAttachment",
    ContentBytes = contentBytes,
    ContentType = "application/pdf",
    Name = "sample.pdf",
    IsInline = false,
    Size = contentBytes.Length
};

ev.Attachments = new EventAttachmentsCollectionPage();
ev.Attachments.Add(fa);

ev.Start = start;
ev.End = end;
ev.IsAllDay = false;
ev.Location = location;
ev.Subject = textBox2.Text;

var response = await graphServiceClient
    .Users["[email protected]"]
    .Calendar
    .Events
    .Request()
    .AddAsync(ev);

person Ben van Erp    schedule 09.03.2019    source источник


Ответы (2)


Похоже, что по-прежнему не поддерживается создание события вместе с вложениями в рамках одного запроса (аналогичная проблема)

В качестве обходного пути можно сначала создать событие без вложений, а затем добавить в него вложения (требуется два запроса к серверу), например:

var ev = new Event
{
    Start = start,
    End = end,
    IsAllDay = false,
    Location = location,
    Subject = subject
};

//1.create an event first 
var evResp = await graphServiceClient.Users[userId].Calendar.Events.Request().AddAsync(ev);

byte[] contentBytes = System.IO.File.ReadAllBytes(localPath);
var attachmentName = System.IO.Path.GetFileName(localPath);
var fa = new FileAttachment
{
    ODataType = "#microsoft.graph.fileAttachment",
    ContentBytes = contentBytes,
    ContentType = MimeMapping.GetMimeMapping(attachmentName),
    Name = attachmentName,
    IsInline = false
};

//2. add attachments to event
var faResp = await graphServiceClient.Users[userId].Calendar.Events[evResp.Id].Attachments.Request().AddAsync(fa);
person Vadim Gremyachev    schedule 11.03.2019
comment
спасибо Вадим, есть подсказки, как обновить мероприятие для участников, чтобы они увидели вложение? - person paburgos; 22.06.2020
comment
Я разобрался. Согласно документации: docs.microsoft.com/en-us/graph/api/ Если организатор добавляет вложение к событию собрания, организатор может впоследствии обновить событие, чтобы отправить вложение, и обновить событие для каждого участника как Что ж. - person paburgos; 23.06.2020

Я обнаружил, что если вы создадите мероприятие без участников, а затем создадите вложение и обновите событие с помощью участников, они получат электронное письмо о мероприятии со всеми вложениями.

Я использую HTTP, не должно быть проблем, чтобы изменить его на GRAPH SDK.

Это мой код:

var eventContainer = new EventContainer();
eventContainer.Init(); //populate the event with everything except the attendees and attachments        

//Send POST request and get the updated event obj back
eventContainer = GraphUtil.CreateEvent(eventContainer);

//Create a basic attachment
var attachment = new Attachment
{
      ODataType = "#microsoft.graph.fileAttachment",
      contentBytes = Convert.ToBase64String(File.ReadAllBytes(path)),
      name = $"attachment.pdf"
};

//Post request to create the attachment and get updated obj back
attachment = GraphUtil.CreateAttachment(attachment);

//Prepare new content to update the event
var newContent = new
{
       attachments = new List<Attachment> { attachment },
       attendees = New List<Attendee> { attends } //populate attendees here
};

//Patch request containing only the new content get the updated event obj back.
eventContainer = GraphUtil.UpdateEvent(newContent);

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

электронное письмо с вложением

person Guilherme Flores    schedule 30.07.2020