将自定义信息添加到Office365中的日历项目

时间:2016-06-30 12:31:30

标签: office365

我们将自己的应用程序与Office 365日历集成在一起。从我们的应用程序中,我们创建可以从Outlook查看的日历项目,其中可以通过Outlook加载项访问额外的信息和操作。我们希望将自己的信息添加到最终用户不应该看到的日历项目中,以控制Outlook添加。

有没有办法将自己的数据添加到Office 365中的日历项目?

1 个答案:

答案 0 :(得分:0)

OpenTypeExtensionModel可以实现这一点。您可以在以下位置找到更多信息 https://graph.microsoft.io/en-us/docs/api-reference/v1.0/api/opentypeextension_post_opentypeextension

实施例: 要在日历项上创建扩展,首先需要创建一个包含该信息的类,并从OpenTypeExtensionModel继承。在下一个示例代码中,我创建了一个OpenTypeExtensionModel Abstract调用,我自己的类与BookingExtention数据继承。我有一个包含信息的枚举(在这种情况下,我使用日历项目作为预订,这定义了预订的类型):

public abstract class OpenTypeExtensionModel
{
    [JsonProperty("@odata.type")]
    public string Type { get { return "Microsoft.Graph.OpenTypeExtension"; } }

    [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
    public string Id { get; set; }
    public string ExtensionName { get; set; }
}

public enum ItemType
{
    Booking,
    Reservation,
    Option
}

public class BookingExtension : OpenTypeExtensionModel
{
    public ItemType ItemType { get; set; }

    public BookingExtension(string extensionName)
    {
        Id = Guid.NewGuid().ToString();
        ExtensionName = extensionName;
    }
}

拥有这些课程后,您可以使用以下代码将其添加到日历项目中:

        private EventModel CreateOutlookEvent(string subject, string body)
    {
        Models.EmailAddress EventOrganizer = new Models.EmailAddress { address = "a@b.c", name = "Donald Trump" };
        Models.EmailAddress EventAttendee = new Models.EmailAddress { address = "x@y.z", name = "Hilary Clinton" };

        EventModel outlookEvent = new EventModel();
        outlookEvent.body = new EventBody { contentType = "Text", content = body };
        outlookEvent.subject = subject;
        outlookEvent.start = new Models.DateTimeTimeZone
        {
            DateTime = DateTime.Now
        };
        outlookEvent.end = new Models.DateTimeTimeZone
        {
            DateTime = DateTime.Now.AddHours(1)
        };
        outlookEvent.attendees = new List<Models.Attendee>();
        outlookEvent.attendees.Add(new Models.Attendee { emailAddress = EventAttendee });
        outlookEvent.isOrganizer = false;
        outlookEvent.organizer = new Organizer() { emailAddress = EventOrganizer };

        var extension = new BookingExtension("mindPark.Extensions.Booking")
        {
            ItemType = ItemType.Option
        };

        outlookEvent.extensions = new List<BookingExtension>();
        outlookEvent.extensions.Add(extension);
        return outlookEvent;
    }

使用此代码,您可以创建一个事件并将其发布到O365

    public async Task<ActionResult> CreateEvent()
    {
        EventModel outlookEvent = CreateOutlookEvent("Debat", "Are you in for a debate?");
        await PostOutLookEvent(outlookEvent);

    }

    private async Task PostOutLookEvent(EventModel outlookEvent)
    {
        var accessToken = (string)Session["access_token"];
        HttpClient httpClient = new HttpClient();
        httpClient.BaseAddress = new Uri("https://graph.microsoft.com/");
        httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
        httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        var request = new HttpRequestMessage(HttpMethod.Post, "beta/me/events");
        request.Content = new StringContent(JsonConvert.SerializeObject(outlookEvent), Encoding.UTF8, "application/json");


        HttpResponseMessage response = await httpClient.SendAsync(request);
        if (response.IsSuccessStatusCode)
        {
            string s = await response.Content.ReadAsStringAsync();
        }
    }