之前的章節已經做過大部份的介紹了,如還不太清楚或是沒看過的人請點選先前的篇幅,這裡就不再重覆了,進入重頭戲,最前的篇幅都沒有說到修改、刪除,只有第三篇有大概說到新增,這樣以控制日曆來說好像不太夠,因為要修改或刪除必須先找到該筆資料,所以在找尋方面會比較複雜一點,不像新增那麼容易,此篇就為您介紹最重要也是比較複雜的修改及刪除,而且是用批次處理的方式,我們開始往下看。
直接設定好UI介面:
找尋標題就是要找日曆上活動的標題,這才能修改 |
UI做好後開始CODE後面的程式碼:
更新事件開始:
帳密認證
下面這個圖是重點,後面會有說明:
AtomId ID_edit = new AtomId();是後面feed_Edit.Entries.FindById轉換要用的
因為該筆活動在Google都是用26個英文+數字的亂碼在代表的:
str_EventId=mfl8vabke7hcp2kj1hupbf13ao,所以必須經過轉換才能找到該筆活動
ID_edit.Uri = calendarURI + str_EventId;寫入該活動的路徑
(該日曆ID)
ID_edit.Uri=http://www.google.com/calendar/feeds/0e16jkbndsprej0ip1m8dc9ihg%40group.calendar.google.com/private/full/mfl8vabke7hcp2kj1hupbf13ao(要更新的活動)
EventEntry指定該活動
EventEntry toUpdate = (EventEntry)feed_Edit.Entries.FindById(ID_edit);
開始你要做的更換動作
toUpdate.Title.Text = this.title.Text;
toUpdate.Content.Content = this.Content.Text;
toUpdate.Times.Add(new When(DateTime.Now, DateTime.Now.AddHours(2)));
批次單一筆:這裡是只有一筆要更新
toUpdate.BatchData = new GDataBatchEntryData("A", GDataBatchOperationType.update);
// 添加項到一個新的feed.
AtomFeed batchFeed = new AtomFeed(feed_Edit);
batchFeed.Entries.Add(toUpdate);
批次處理
EventFeed batchResultFeed = (EventFeed)service.Batch(batchFeed,newUri(feed_Edit.Batch));
批次多種不同事件:如果你有多筆新增、更新、刪除
//創建一個批次處理,更新現有的
EventEntry toUpdate = (EventEntry)feed_Edit.Entries.FindById(ID_edit);
oUpdate.Title.Text = this.title.Text;
toUpdate.Content.Content = this.Content.Text;
toUpdate.Times.Add(new When(DateTime.Now, DateTime.Now.AddHours(2)));
toUpdate.BatchData = new GDataBatchEntryData("A", GDataBatchOperationType.update);
// 創建一個批次處理,刪除現有的
EventEntry toDelete = (EventEntry)feed.FindById(ID_Del);
toDelete.BatchData = new GDataBatchEntryData("B", GDataBatchOperationType.delete);
// 創建一個批次處理中插入一個新的事件
//EventEntry toCreate = new EventEntry("new event");
//toCreate.Title.Text = "Tutor";
//toCreate.Content.Content = "Tutor內容";
//toCreate.Times.Add(new When(DateTime.Now, DateTime.Now.AddHours(2)));
//toCreate.BatchData = new GDataBatchEntryData("C", GDataBatchOperationType.insert);
// 添加項到一個新的feed.
//AtomFeed batchFeed = new AtomFeed(feed_Edit);
//batchFeed.Entries.Add(toUpdate);
//batchFeed.Entries.Add(toDelete);
//batchFeed.Entries.Add(toCreate);
//EventFeed batchResultFeed = (EventFeed)service.Batch(batchFeed, new Uri(feed.Batch));
最後的判別資料是否有正常寫入:
//檢查返回值的批處理操作,以確保它們都工作。
//插入操作應該返回一個 201,其餘的應該返回200
bool success = true;
foreach (EventEntry entry in batchResultFeed.Entries)
{
if (entry.BatchData.Status.Code != 200 && entry.BatchData.Status.Code != 201)
{
success = false;
label_b.Text = "批處理操作ID為" + entry.BatchData.Id + " failed.";
}
}
if (success)
{
label_b.Text = "所有的批處理操作成功!";
}
批次處理完成:
更新前及更新後:
你好,
回覆刪除請問EventEntry指定該活動
EventEntry toUpdate = (EventEntry)feed_Edit.Entries.FindById(ID_edit);
執行後此物件為null,不知道是為什麼?
我想知道要去哪邊查詢關於這個API的使用方法
回覆刪除如果撈資料,撈出來怎麼使用 之類的。