Как удалить все записи событий из определенного календаря из Google Calendar API .NET - PullRequest
0 голосов
/ 20 мая 2011

Я пытаюсь отредактировать инструмент, чтобы позволить пользователю выбрать из списка своих календарей, а затем очистить все записи событий / добавить новые на основе задач проекта Microsoft. Вот оригинальный инструмент: http://daball.github.com/Microsoft-Project-to-Google-Calendar/

У меня совершенно нет опыта работы с API Google / API календаря, и у меня возникли некоторые проблемы. Редактируемая мной программа отслеживает, какой CalendarEntry выбрал пользователь из списка своих календарей. В настоящее время я пытаюсь создать EventFeed, который дает мне EventEntries этого выбранного календаря, чтобы я мог затем удалить все из них. Цель этого - позволить кому-либо использовать этот инструмент для обновления календаря из файла проекта при внесении изменений. Вот моя функция, пытающаяся удалить.

 private void clearPreviousCalendarEntries(CalendarEntry calendarEntry)
    {      
        EventQuery query = new EventQuery();
        query.Uri = new Uri(calendarEntry.Links[0].AbsoluteUri);

        EventFeed feed = (EventFeed)calendarService.Query(query);

        AtomFeed batchFeed = new AtomFeed(feed);

        foreach (EventEntry entry in feed.Entries)
        {
            entry.Id = new AtomId(entry.EditUri.ToString());
            entry.BatchData = new GDataBatchEntryData(GDataBatchOperationType.delete);
            batchFeed.Entries.Add(entry);
        }

        EventFeed batchResultFeed = (EventFeed)calendarService.Batch(batchFeed, new Uri(feed.Batch));

        foreach (EventEntry entry in batchResultFeed.Entries)
        {
            if (entry.BatchData.Status.Code != 200 && entry.BatchData.Status.Code != 201)
                this.listBoxResults.SelectedIndex = this.listBoxResults.Items.Add("Problem deleteing " + entry.Title.Text + " error code: " + entry.BatchData.Status.Code);
            else
                this.listBoxResults.SelectedIndex = this.listBoxResults.Items.Add("Deleted " + entry.Title.Text);
        }

    }

Мой фид не возвращает результаты, на которые я надеялся, но, честно говоря, я не уверен, как правильно запрашивать события.

query.Uri = new Uri(calendarEntry.Links[0].AbsoluteUri); - это то, что я взял из той части программы, которая добавляет событие в определенный календарь

AtomEntry insertedEntry = calendarService.Insert(new Uri(calendarEntry.Links[0].AbsoluteUri), eventEntry);

Эти сообщения определенно связаны с тем, что я ищу, но я не нашел решения

Ответы [ 2 ]

0 голосов
/ 24 мая 2011

Я пришел к выводу, что собирал calendarID из URI календаря, а затем создавал новый EventQuery с использованием этого идентификатора. Вот новая версия кода выше

private void clearPreviousCalendarEntries(CalendarEntry calendarEntry)
    {
        this.listBoxResults.SelectedIndex = this.listBoxResults.Items.Add("Clearing previous calender entries");

        String calendarURI = calendarEntry.Id.Uri.ToString();
        //The last part of the calendarURI contains the calendarID we're looking for
        String calendarID = calendarURI.Substring(calendarURI.LastIndexOf("/")+1);

        EventQuery query = new EventQuery();
        query.Uri = new Uri("http://www.google.com/calendar/feeds/" + calendarID + "/private/full");

        EventFeed eventEntries = calendarService.Query(query);

        AtomFeed batchFeed = new AtomFeed(eventEntries);

        foreach (AtomEntry entry in eventEntries.Entries)
        {
            entry.Id = new AtomId(entry.EditUri.ToString());
            entry.BatchData = new GDataBatchEntryData(GDataBatchOperationType.delete);

            batchFeed.Entries.Add(entry);
        }

        EventFeed batchResultFeed = (EventFeed)calendarService.Batch(batchFeed, new Uri(eventEntries.Batch));

        //check the return values of the batch operations to make sure they all worked.
        //the insert operation should return a 201 and the rest should return 200
        bool success = true;
        foreach (EventEntry entry in batchResultFeed.Entries)
        {
            if (entry.BatchData.Status.Code != 200 && entry.BatchData.Status.Code != 201)
            {
                success = false;
                listBoxResults.SelectedIndex = listBoxResults.Items.Add("The batch operation for " +
                    entry.Title.Text + " failed.");
            }
        }

        if (success)
        {
            listBoxResults.SelectedIndex = listBoxResults.Items.Add("Calendar event clearing successful!");
        }

    }

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

0 голосов
/ 21 мая 2011

Попробуйте что-то вроде этого:

            CalendarService myService = new CalendarService("your calendar name");
            myService.setUserCredentials(username, password);

            CalendarEntry calendar;

            try
            {
                calendar = (CalendarEntry)myService.Get(http://www.google.com/calendar/feeds/default/owncalendars/full/45kk8jl9nodfri1qgepsb65fnc%40group.calendar.google.com);
                foreach (AtomEntry item in calendar.Feed.Entries)
                {
                    item.Delete();
                }
            }
            catch (GDataRequestException)
            {
            }

Вы можете найти "Идентификатор календаря" (что-то вроде этого: 45kk8jl9nodfri1qgepsb65fnc% 40group.calendar.google.com) со страницы Подробности календаря в Календаре Google.

это сообщение по теме:

google calendar api asp.net c # delete event

это полезный документ:

http://code.google.com/intl/it-IT/apis/calendar/data/2.0/developers_guide_dotnet.html

...