我们将自己的应用程序与Office 365日历集成在一起。从我们的应用程序中,我们创建可以从Outlook查看的日历项目,其中可以通过Outlook加载项访问额外的信息和操作。我们希望将自己的信息添加到最终用户不应该看到的日历项目中,以控制Outlook添加。
有没有办法将自己的数据添加到Office 365中的日历项目?
答案 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();
}
}