ניהול Google Calendars באמצעות לקוח Gmail

הוספה, עריכה ומחיקה של לוחות השנה של Gmail

Aspose.Email מאפשרת ליישומים לנהל את לוחות השנה של Gmail באמצעות IGmailClient שמספקת תכונות כגון הוספה, מחיקה ועדכון של לוחות השנה של Gmail. מחלקת לקוח זו מחזירה רשימה של אובייקטים מטיפוס ExtendedCalendar המכילים מידע על פריטי לוח השנה של Gmail. IGmailClient המחלקה מציגה את הפונקציות הבאות עבור לוחות שנה:

  • CreateCalendar ניתן להשתמש בו להוספת לוח שנה חדש
  • ListCalendars ניתן להשתמש בו לקבלת רשימת כל לוחות השנה של לקוח
  • DeleteCalendar ניתן להשתמש בה כדי למחוק לוח שנה
  • FetchCalendar ניתן להשתמש בה כדי לקבל לוח שנה ספציפי של לקוח
  • UpdateCalendar פונקציה זו משמשת להוספת לוח שנה משוכנע של לקוח

כדי לגשת ללוחות השנה, המזהה GoogleTestUser מאותחל באמצעות פרטי חשבון Gmail. GoogleOAuthHelper משמש לקבלת אסימון הגישה של המשתמש, אשר משמש לאחר מכן לאתחול IGmailClient.

הוספה, אחזור ועדכון לוחות שנה של Gmail

להוספת לוח שנה, אתחל אובייקט מטיפוס Calendar והכנס אותו באמצעות CreateCalendar() פונקציה. CreateCalendar() מחזירה את המזהה של לוח השנה החדש שנוסף. מזהה זה יכול לשמש לקבלת לוח השנה מהשרת. קטע הקוד הבא מציג כיצד להוסיף, לקבל ולעדכן לוח שנה.

// Get access token
GoogleTestUser User2 = new GoogleTestUser("user", "email address", "password", "clientId", "client secret");
string accessToken;
string refreshToken;
GoogleOAuthHelper.GetAccessToken(User2, out accessToken, out refreshToken);

using (IGmailClient client = GmailClient.GetInstance(accessToken, User2.EMail))
{
    // Insert, get and update calendar
    Aspose.Email.Clients.Google.Calendar calendar = new Aspose.Email.Clients.Google.Calendar("summary - " + Guid.NewGuid().ToString(), null, null, "America/Los_Angeles");
    
    // Insert calendar and Retrieve same calendar using id
    string id = client.CreateCalendar(calendar);
    Aspose.Email.Clients.Google.Calendar cal = client.FetchCalendar(id);

    //Match the retrieved calendar info with local calendar
    if ((calendar.Summary == cal.Summary) && (calendar.TimeZone == cal.TimeZone))
    {
        Console.WriteLine("fetched calendar information matches");
    }
    else
    {
        Console.WriteLine("fetched calendar information does not match");
    }

    // Change information in the fetched calendar and Update calendar
    cal.Description = "Description - " + Guid.NewGuid().ToString();
    cal.Location = "Location - " + Guid.NewGuid().ToString();
    client.UpdateCalendar(cal);
}

מחיקת לוחות שנה ספציפיים של Google

כדי למחוק לוח שנה ספציפי, עלינו לקבל את רשימת כל לוחות השנה של לקוח ולאחר מכן למחוק לפי הצורך. ListCalendars() מחזירה את הרשימה של ExtendedCalendar שכוללת לוחות שנה של Gmail. קטע הקוד הבא מציג כיצד למחוק לוח שנה ספציפי.

// Get access token
GoogleTestUser User2 = new GoogleTestUser("user", "email address", "password", "clientId", "client secret");
string accessToken;
string refreshToken;
GoogleOAuthHelper.GetAccessToken(User2, out accessToken, out refreshToken);

using (IGmailClient client = GmailClient.GetInstance(accessToken, User2.EMail))
{
    // Access and delete calendar with summary starting from "Calendar summary - "
    string summary = "Calendar summary - ";

    // Get calendars list
    ExtendedCalendar[] lst0 = client.ListCalendars();

    foreach (ExtendedCalendar extCal in lst0)
    {
        // Delete selected calendars
        if (extCal.Summary.StartsWith(summary))
            client.DeleteCalendar(extCal.Id);
    }
}

בקרת גישה ליומן

Aspose.Email מספק שליטה מלאה על הגישה לפריטי היומנונים. ListAccessRules() פונקציה נחשפת על ידי IGmailClient שמחזירה את הרשימה של AccessControlRule. ניתן לקבל, לשנות ולשמור בחזרה מידע של חוק יחיד עבור לוח השנה של לקוח. IGmailClient מכילה את הפונקציות הבאות לניהול כללי בקרת הגישה.

  • ListAccessRules פונקציה זו מספקת את רשימת AccessControlRule
  • CreateAccessRule פונקציה זו יוצרת חוק גישה חדש עבור לוח שנה.
  • UpdateAccessRule פונקציה זו משמשת לעדכון חוק גישה.
  • FetchAccessRule ניתן להשתמש בה כדי לקבל חוק גישה ספציפי עבור לוח השנה של לקוח.
  • DeleteAccessRule פונקציה זו משמשת למחיקת חוק גישה.

קטע הקוד למטה מראה כיצד להשתמש בפונקציות לניהול כללי הגישה:

GoogleTestUser User2 = new GoogleTestUser("user", "email address", "password", "clientId", "client secret");
string accessToken;
string refreshToken;
GoogleOAuthHelper.GetAccessToken(User2, out accessToken, out refreshToken);

using (IGmailClient client = GmailClient.GetInstance(accessToken, User2.EMail))
{
    // Retrieve list of calendars for the current client
    ExtendedCalendar[] calendarList = client.ListCalendars();

    // Get first calendar id and retrieve list of AccessControlRule for the first calendar
    string calendarId = calendarList[0].Id;
    AccessControlRule[] roles1 = client.ListAccessRules(calendarId);

    // Create a local access control rule and Set rule properties
    AccessControlRule rule = new AccessControlRule();
    rule.Role = AccessRole.reader;
    rule.Scope = new AclScope(AclScopeType.user, User2.EMail);

    // Insert new rule for the calendar. It returns the newly created rule
    AccessControlRule createdRule = client.CreateAccessRule(calendarId, rule);

    // Confirm if local created rule and returned rule are equal
    if ((rule.Role == createdRule.Role) && (rule.Scope.Type == createdRule.Scope.Type) && (rule.Scope.Value.ToLower() == createdRule.Scope.Value.ToLower()))
    {
        Console.WriteLine("local rule and returned rule after creation are equal");
    }
    else
    {
        Console.WriteLine("Rule could not be created successfully");
        return;
    }

    // Get list of rules
    AccessControlRule[] roles2 = client.ListAccessRules(calendarId);

    // Current list length should be 1 more than the earlier one
    if (roles1.Length + 1 == roles2.Length)
    {
        Console.WriteLine("List lengths are ok");
    }
    else
    {
        Console.WriteLine("List lengths are not ok");
        return;
    }

    // Change rule and Update the rule for the selected calendar
    createdRule.Role = AccessRole.writer;
    AccessControlRule updatedRule = client.UpdateAccessRule(calendarId, createdRule);

    // Check if returned access control rule after update is ok
    if ((createdRule.Role == updatedRule.Role) && (createdRule.Id == updatedRule.Id))
    {
        Console.WriteLine("Rule is updated successfully");
    }
    else
    {
        Console.WriteLine("Rule is not updated");
        return;
    }

    // Retrieve individaul rule against a calendar
    AccessControlRule fetchedRule = client.FetchAccessRule(calendarId, createdRule.Id);

    //Check if rule parameters are ok
    if ((updatedRule.Id == fetchedRule.Id) && (updatedRule.Role == fetchedRule.Role) && (updatedRule.Scope.Type == fetchedRule.Scope.Type) && (updatedRule.Scope.Value.ToLower() == fetchedRule.Scope.Value.ToLower()))
    {
        Console.WriteLine("Rule parameters are ok");
    }
    else
    {
        Console.WriteLine("Rule parameters are not ok");
    }

    // Delete particular rule against a given calendar and Retrieve the all rules list for the same calendar
    client.DeleteAccessRule(calendarId, createdRule.Id);
    AccessControlRule[] roles3 = client.ListAccessRules(calendarId);

    // Check that current rules list length should be equal to the original list length before adding and deleting the rule
    if (roles1.Length == roles3.Length)
    {
        Console.WriteLine("List lengths are same");
    }
    else
    {
        Console.WriteLine("List lengths are not equal");
        return;
    }
}

הגדרות לקוח היומן ומידע על צבעים

Aspose.Email תומכת בגישה להגדרות הלקוח באמצעות IGmailClient.GetSettings(). היא מחזירה את רשימת ההגדרות כפי שמופיעה למטה:

  1. סדר השדה תאריך
  2. הצג את כל אזורי הזמן
  3. הסתר הזמנות
  4. פורמט זמן 24 שעות
  5. מצב לוח שנה ברירת מחדל
  6. אורך אירוע ברירת מחדל
  7. שפה
  8. remindOnRespondedEventsOnly
  9. לוח שנה חלופי
  10. מיקום משתמש
  11. הסתר סופי שבוע
  12. showDeclinedEvents
  13. התחלת שבוע
  14. מזג אוויר
  15. customCalendarMode
  16. timezoneLabel
  17. אזור זמן
  18. useKeyboardShortcuts
  19. מדינה

באופן דומה ניתן לקבל מידע צבע עבור לקוחות באמצעות IGmailClient.GetColors(). אובייקט מידע הצבע הזה מחזיר את רשימת צבעי חזית, צבעי רקע ותאריך ושעת העדכון.

גישה להגדרות לקוח

קטע הקוד למטה מראה כיצד ניתן להשתמש בפונקציות לגישה להגדרות הלקוח:

GoogleTestUser User2 = new GoogleTestUser("user", "email address", "password", "clientId", "client secret");
string accessToken;
string refreshToken;
GoogleOAuthHelper.GetAccessToken(User2, out accessToken, out refreshToken);

using (IGmailClient client = GmailClient.GetInstance(accessToken, User2.EMail))
{
    // Retrieve client settings
    Dictionary<string, string> settings = client.GetSettings();
    if (settings.Count < 1)
    {
        Console.WriteLine("No settings are available.");
        return;
    }

    // Traverse the settings list
    foreach (KeyValuePair<string, string> pair in settings)
    {
        // Get the setting value and test if settings are ok
        string value = client.GetSetting(pair.Key);
        if (pair.Value == value)
        {
            Console.WriteLine("Key = " + pair.Key + ", Value = " + pair.Value);
        }
        else
        {
            Console.WriteLine("Settings could not be retrieved");
        }
    }
}

גישה למידע על צבעים

קטע הקוד למטה מראה כיצד ניתן להשתמש בפונקציות לגישה להגדרות הצבע של הלקוח.

GoogleTestUser User2 = new GoogleTestUser("user", "email address", "password", "clientId", "client secret");
string accessToken;
string refreshToken;
GoogleOAuthHelper.GetAccessToken(User2, out accessToken, out refreshToken);

using (IGmailClient client = GmailClient.GetInstance(accessToken, User2.EMail))
{
    ColorsInfo colors = client.GetColors();
    Dictionary<string, Colors> palettes = colors.Calendar;

    // Traverse the settings list
    foreach (KeyValuePair<string, Colors> pair in palettes)
    {
        Console.WriteLine("Key = " + pair.Key + ", Color = " + pair.Value);
    }
    Console.WriteLine("Update Date = " + colors.Updated);
}

נהל פגישות בלוח השנה של Google

Aspose.Email מספקת תכונות לעבודה עם פגישות בלוח השנה של Google. המשימות הבאות ניתנות לביצוע עם פגישות בלוח השנה של Google:

  1. הוספת פגישות.
  2. קבל רשימת פגישות.
  3. קבל פגישה ספציפית.
  4. עדכון פגישה.
  5. העברת פגישה מלוח שנה אחד לאחר.
  6. מחיקת פגישה.

IGmailClient מספקת פונקציות כגון CreateAppointment, FetchAppointment, UpdateAppointment, ListAppointments, MoveAppointment ו DeleteAppointment.

הוספת פגישות ל-Google Calendar

דוגמת הקוד למטה מציגה את הפונקציה של הוספת פגישה בלוח שנה. כדי לבצע זאת, פעל לפי הצעדים:

  1. צור והוסף לוח שנה.
  2. קבלת רשימת הפגישות מלוח שנה חדש.
  3. צור פגישה.
  4. הוספת פגישה.

                GoogleTestUser User2 = new GoogleTestUser("user", "email address", "password", "clientId", "client secret");
                string accessToken;
                string refreshToken;
                GoogleOAuthHelper.GetAccessToken(User2, out accessToken, out refreshToken);

                // Get IGmailclient
                using (IGmailClient client = GmailClient.GetInstance(accessToken, User2.EMail))
                {
                    // Create local calendar	
                    Aspose.Email.Clients.Google.Calendar calendar1 = new Aspose.Email.Clients.Google.Calendar("summary - " + Guid.NewGuid().ToString(), null, null, "Europe/Kiev");

                    // Insert calendar and get id of inserted calendar and Get back calendar using an id
                    string id = client.CreateCalendar(calendar1);
                    Aspose.Email.Clients.Google.Calendar cal1 = client.FetchCalendar(id);
                    string calendarId1 = cal1.Id;

                    try
                    {
                        // Retrieve list of appointments from the first calendar
                        Appointment[] appointments = client.ListAppointments(calendarId1);
                        if (appointments.Length > 0)
                        {
                            Console.WriteLine("Wrong number of appointments");
                            return;
                        }

                        // Get current time and Calculate time after an hour from now
                        DateTime startDate = DateTime.Now;
                        DateTime endDate = startDate.AddHours(1);

                        // Initialize a mail address collection and set attendees mail address
                        MailAddressCollection attendees = new MailAddressCollection();
                        attendees.Add("User1.EMail@domain.com");
                        attendees.Add("User3.EMail@domain.com");

                        // Create an appointment with above attendees
                        Appointment app1 = new Appointment("Location - " + Guid.NewGuid().ToString(), startDate, endDate, User2.EMail, attendees);

                        // Set appointment summary, description, start/end time zone
                        app1.Summary = "Summary - " + Guid.NewGuid().ToString();
                        app1.Description = "Description - " + Guid.NewGuid().ToString();
                        app1.StartTimeZone = "Europe/Kiev";
                        app1.EndTimeZone = "Europe/Kiev";

                        // Insert appointment in the first calendar inserted above and get back inserted appointment
                        Appointment app2 = client.CreateAppointment(calendarId1, app1);

                        // Retrieve appointment using unique id
                        Appointment app3 = client.FetchAppointment(calendarId1, app2.UniqueId);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                    }
                }

קבל ועדכן פגישות בלוח השנה של Google

כאן מודגמים האחזור והעדכון של לוח השנה כדלקמן:

  1. קבל פגישה ספציפית.
  2. שנה את הפגישה.
  3. עדכן את הפגישה בלוח השנה.

נניח כי לוח שנה עם מזהה "calendarId" ומזהה ייחודי של פגישה "AppointmentUniqueId" כבר נלקחו. הקטע הקוד הבא מראה כיצד לקבל ולעדכן פגישה.

GoogleTestUser User2 = new GoogleTestUser("user", "email address", "password", "clientId", "client secret");
string accessToken;
string refreshToken;
GoogleOAuthHelper.GetAccessToken(User2, out accessToken, out refreshToken);
             
// Get IGmailclient
using (IGmailClient client = GmailClient.GetInstance(accessToken, User2.EMail))
{
    string calendarId = client.ListCalendars()[0].Id;
    string AppointmentUniqueId = client.ListAppointments(calendarId)[0].UniqueId;

    // Retrieve Appointment
    Appointment app3 = client.FetchAppointment(calendarId, AppointmentUniqueId);
    // Change the appointment information
    app3.Summary = "New Summary - " + Guid.NewGuid().ToString();
    app3.Description = "New Description - " + Guid.NewGuid().ToString();
    app3.Location = "New Location - " + Guid.NewGuid().ToString();
    app3.Flags = AppointmentFlags.AllDayEvent;
    app3.StartDate = DateTime.Now.AddHours(2);
    app3.EndDate = app3.StartDate.AddHours(1);
    app3.StartTimeZone = "Europe/Kiev";
    app3.EndTimeZone = "Europe/Kiev";
    // Update the appointment and get back updated appointment
    Appointment app4 = client.UpdateAppointment(calendarId, app3);
}

העבר ומחק פגישות בלוח השנה של Google

ניתן להעביר פגישה על ידי מתן לוח השנה המקור, לוח השנה יעד והמזהה הייחודי של הפגישה בלוח המקור. הקטע הקוד הבא מראה כיצד להעביר ולמחוק פגישה.

GoogleTestUser User2 = new GoogleTestUser("user", "email address", "password", "clientId", "client secret");
string accessToken;
string refreshToken;
GoogleOAuthHelper.GetAccessToken(User2, out accessToken, out refreshToken);

// Get IGmailclient
using (IGmailClient client = Aspose.Email.Clients.Google.GmailClient.GetInstance(accessToken, User2.EMail))
{
    string SourceCalendarId = client.ListCalendars()[0].Id;
    string DestinationCalendarId = client.ListCalendars()[1].Id;
    string TargetAppUniqueId = client.ListAppointments(SourceCalendarId)[0].UniqueId;

    // Retrieve the list of appointments in the destination calendar before moving the appointment
    Appointment[] appointments = client.ListAppointments(DestinationCalendarId);
    Console.WriteLine("Before moving count = " + appointments.Length);
    Appointment Movedapp = client.MoveAppointment(SourceCalendarId, DestinationCalendarId, TargetAppUniqueId);

    // Retrieve the list of appointments in the destination calendar after moving the appointment
    appointments = client.ListAppointments(DestinationCalendarId);
    Console.WriteLine("After moving count = " + appointments.Length);

    // Delete particular appointment from a calendar using unique id
    client.DeleteAppointment(DestinationCalendarId, Movedapp.UniqueId);

    // Retrieve the list of appointments. It should be one less than the earlier appointments in the destination calendar
    appointments = client.ListAppointments(DestinationCalendarId);
    Console.WriteLine("After deleting count = " + appointments.Length);
}

שאילתת FreeBusy בלוח השנה של Google

Aspose.Email מספקת מנגנון שאילתות לבדיקת האם פגישה נדרשת לפי קריטריונים. מחלקת FreebusyQuery מסופקת למטרה זו ומאפשרת להכין שאילתה עבור לוח שנה ספציפי.

דוגמת קוד זו מציגה את המאפיין של שאילת לוח שנה. המשימות הבאות מתבצעות בדוגמה:

  1. צור והוסף לוח שנה
  2. צור פגישה
  3. הוסף פגישה
  4. הכן שאילתת FreeBusy
  5. קבל את FreebusyResponse

// Use the GoogleUser and GoogleOAuthHelper classes below to receive an access token
using (IGmailClient client = GmailClient.GetInstance(accessToken, user.Email))
{
    // Initialize calendar item
    Aspose.Email.Clients.Google.Calendar calendar1 = new Aspose.Email.Clients.Google.Calendar("summary - " + Guid.NewGuid().ToString(), null, null, "Europe/Kiev");

    // Insert calendar and get back id of newly inserted calendar and Fetch the same calendar using calendar id
    string id = client.CreateCalendar(calendar1);
    Aspose.Email.Clients.Google.Calendar cal1 = client.FetchCalendar(id);
    string calendarId1 = cal1.Id;
    try
    {
        // Get list of appointments in newly inserted calendar. It should be zero
        Appointment[] appointments = client.ListAppointments(calendarId1);
        if (appointments.Length != 0)
        {
            Console.WriteLine("Wrong number of appointments");
            return;
        }

        // Create a new appointment and Calculate appointment start and finish time
        DateTime startDate = DateTime.Now;
        DateTime endDate = startDate.AddHours(1);

        // Create attendees list for appointment
        MailAddressCollection attendees = new MailAddressCollection();
        attendees.Add("user1@domain.com");
        attendees.Add("user2@domain.com");

        // Create appointment
        Appointment app1 = new Appointment("Location - " + Guid.NewGuid().ToString(), startDate, endDate, "user2@domain.com", attendees);
        app1.Summary = "Summary - " + Guid.NewGuid().ToString();
        app1.Description = "Description - " + Guid.NewGuid().ToString();
        app1.StartTimeZone = "Europe/Kiev";
        app1.EndTimeZone = "Europe/Kiev";

        // Insert the newly created appointment and get back the same in case of successful insertion
        Appointment app2 = client.CreateAppointment(calendarId1, app1);

        // Create Freebusy query by setting min/max timeand time zone
        FreebusyQuery query = new FreebusyQuery();
        query.TimeMin = DateTime.Now.AddDays(-1);
        query.TimeMax = DateTime.Now.AddDays(1);
        query.TimeZone = "Europe/Kiev";

        // Set calendar item to search and Get the reponse of query containing 
        query.Items.Add(cal1.Id);
        FreebusyResponse resp = client.GetFreebusyInfo(query);
        // Delete the appointment
        client.DeleteAppointment(calendarId1, app2.UniqueId);
    }
    finally
    {
        // Delete the calendar
        client.DeleteCalendar(cal1.Id);
    }
}