Это продолжение предыдущего вопроса: Как добавить события календаря в Outlook 365 с помощью C # MSGraph Спасибо пользователю Seiya Su за помощь.
Я пытаюсь использовать Microsoft.Graph в приложении Windows Form для Visual Studio C #, чтобы добавить некоторые дополнительные функции в Outlook 365. Это мое первое приложение, созданное с помощью Microsoft.Graph, и у меня былоТрудно найти документацию для его интеграции с C #, поэтому, пожалуйста, прости меня за отсутствие знаний.
В основном, я хочу иметь возможность добавить несколько предустановленных событий календаря, детали которых встроены в форму Windows, оптом из одногоНажатие кнопки, проблема, с которой я сталкиваюсь, заключается в том, что всякий раз, когда я вызываю мой метод SetAppointment () или graphTesting (), я должен войти в систему для каждого выполненного действия.Когда я пытаюсь добавить более 60 событий в календарь, повторный вход в систему каждый раз, когда мы хотим добавить одно событие, недопустим.У кого-нибудь есть идеи, как этого добиться?Я согласен с тем, что пользователю необходимо войти в систему, если он должен сделать это только в начале выполнения программы.
using Microsoft.Graph;
using Microsoft.Identity.Client;
using System.Configuration;
using System.Net.Http.Headers;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Collections.Generic;
namespace WindowsFormsApp
{
class MSGraph
{
PublicClientApplication clientApp;
GraphServiceClient graphClient;
public async void Start()
{
await GetDataAsync();
return;
}
// Starts the login process
async Task GetDataAsync()
{
clientApp = new PublicClientApplication(ConfigurationManager.AppSettings["ClientId"].ToString());
graphClient = new GraphServiceClient(
"https://graph.microsoft.com/v1.0",
new DelegateAuthenticationProvider(
async (requestMessage) =>
{
requestMessage.Headers.Authorization = new AuthenticationHeaderValue("bearer", await GetTokenAsync(clientApp));
}));
userEmail = currentUser.ToString();
return;
}
// Fetches Access Token
async Task<string> GetTokenAsync(PublicClientApplication clientApp)
{
//need to pass scope of activity to get token
string[] Scopes = { "User.ReadWrite.All", "Calendars.ReadWrite", "Calendars.ReadWrite.Shared" };
token = null;
AuthenticationResult authResult = await clientApp.AcquireTokenAsync(Scopes).ConfigureAwait(false);
token = authResult.AccessToken;
return token;
}
// Testing out MSGraph
public async void graphTesting()
{
var myEvent = new Microsoft.Graph.Event();
myEvent.Subject = "Test";
myEvent.Body = new ItemBody() { ContentType = BodyType.Text, Content = "This is test." };
myEvent.Start = new DateTimeTimeZone() { DateTime = "2018-10-3T12:00:00", TimeZone = "Pacific Standard Time" };
myEvent.End = new DateTimeTimeZone() { DateTime = "2018-10-3T13:00:00", TimeZone = "Pacific Standard Time" };
myEvent.Location = new Location() { DisplayName = "conf room 1" };
var myEvent2 = new Microsoft.Graph.Event();
myEvent2.Subject = "Test";
myEvent2.Body = new ItemBody() { ContentType = BodyType.Text, Content = "This is test." };
myEvent2.Start = new DateTimeTimeZone() { DateTime = "2018-10-4T12:00:00", TimeZone = "Pacific Standard Time" };
myEvent2.End = new DateTimeTimeZone() { DateTime = "2018-10-4T13:00:00", TimeZone = "Pacific Standard Time" };
myEvent2.Location = new Location() { DisplayName = "conf room 1" };
// Create the event.
var user = graphClient.Users["myEmail"].Calendar.Events.Request();
await user.AddAsync(myEvent);
await user.AddAsync(myEvent2);
}
// Adds Events to the Calendar
public async void SetAppointment(string Subject, string Body, string Start, string End, string Location, List<string> attendees)
{
var myEvent = new Microsoft.Graph.Event();
myEvent.Subject = Subject;
myEvent.Body = new ItemBody() { ContentType = BodyType.Text, Content = Body };
myEvent.Start = new DateTimeTimeZone() { DateTime = Start, TimeZone = "" };
myEvent.End = new DateTimeTimeZone() { DateTime = End, TimeZone = "" };
myEvent.Location = new Location() { DisplayName = Location };
var appointment = await graphClient.Me.Calendar.Events.Request().AddAsync(myEvent);
}
}
}