• <menu id="w2i4a"></menu>
  • logo DevExpress WinForms使用教程

    文檔首頁>>DevExpress WinForms使用教程>>DevExpress Winforms使用技巧教程:Scheduler - 與Google日歷同步

    DevExpress Winforms使用技巧教程:Scheduler - 與Google日歷同步


    下載DevExpress v20.1完整版    DevExpress v20.1漢化資源獲取

    DevExpress Winforms Controls 內(nèi)置140多個UI控件和庫,完美構建流暢、美觀且易于使用的應用程序。想要體驗?點擊下載>>

    從v18.2版本開始,DevExpress Winforms可以使用Google日歷進行新的Scheduler同步,本文主要為大家介紹此功能。

    DXGoogleCalendarSync組件

    要同步Scheduler和Google Calendars Appointments(在Google文檔中,這些稱為Events),您需要一個DXGoogleCalendarSync組件。 單擊Add DX Google Calendar Synchronizer Smart Tag鏈接時,Scheduler會自動添加它,該組件需要幾個NuGet軟件包。

    DevExpress Winforms使用技巧教程

    DXGoogleCalendarSync在Scheduler存儲(支持SchedulerDataStorage及其先前的SchedulerStorage)與選定的Google日歷之間傳輸數(shù)據(jù),可以將存儲同時綁定到任何受支持的數(shù)據(jù)源。

    DevExpress Winforms使用技巧教程

    您不僅限于導入或?qū)С鰯?shù)據(jù),同步是一個雙向過程,可同時處理兩個任務。

    局限性

    DXGoogleCalendarSync組件可以正確識別和同步Scheduler支持的所有Appointment類型:常規(guī)Appointment和定期Appointment、all-day events、假期等,該組件唯一無法自動同步的內(nèi)容類型是顏色信息:Appointment標簽和狀態(tài)不轉(zhuǎn)換默認為事件顏色。狀態(tài)是唯一的Appointment屬性,沒有匹配的事件屬性(Google事件僅提供兩個“statuses” - Busy和Free),您可以通過處理某些組件事件來手動將標簽與事件顏色同步(請參見此GitHub example)。

    第二個限制是DXGoogleCalendarSync一次只能使用一個日歷,而Google日歷用戶可以預訂多個不同的日歷:個人日歷、工作日歷、假期日歷、家庭日歷、同事之間共享的公司日歷等,當然,您可以輕松地檢索日歷列表,并實現(xiàn)一個UI在運行時在它們之間進行切換。

    技術細節(jié)

    該GitHub示例顯示運行中的同步組件。

    要管理Google Calendar Events,您需要訪問Google Calendar API。 請單擊Google文檔中Quickstart頁面的此鏈接,然后按照步驟13b下載您自己的credentials.json文件,這應該包含在您的項目中,GitHub示例對此文件使用名稱client_secret.json。

    組件上需要設置三個核心屬性:

    • Storage - 存儲Appointments的Scheduler Storage對象。 在示例中,此屬性是在設計時分配的(請參見此處

    gcSyncComponent.Storage = schedulerStorage;

    • CalendarService - Google Calendar Service允許組件訪問和修改日歷,必須授權當前用戶訪問Google帳戶(這是示例方法AuthorizeToGoogle)。
      ...
      GoogleWebAuthorizationBroker.AuthorizeAsync(
      GoogleClientSecrets.Load(stream).Secrets,
      new String[] { CalendarService.Scope.Calendar },
      "user",
      CancellationToken.None,
      new FileDataStore(credPath, true));

    然后可以實例化CalendarService(在示例的OnLoad中)。

    ...
    gcSyncComponent.CalendarService =
    new CalendarService(new BaseClientService.Initializer() {
    HttpClientInitializer = this.credential,
    ApplicationName = "GoogleCalendarSyncSample"
    });
    ...

    • CalendarID - 同步GoogleCalendar identifier,這是一些示例代碼,可檢索所有Google日歷并填充組合框。然后您可以處理SelectedIndexChanged組合框事件,來將有效ID分配給CalendarID屬性。
      CalendarList calendarList;
      string activeCalendarId;
      
      async Task UpdateCalendarListUI() {
      var listRequest = this.service.CalendarList.List();
      this.calendarList = await listRequest.ExecuteAsync();
      this.ricbCalendarList.Items.Clear();
      
      foreach (CalendarListEntry item in this.calendarList.Items)
      this.ricbCalendarList.Items.Add(item.Summary);
      
      if (!String.IsNullOrEmpty(this.activeCalendarId)) {
      var itemToSelect = this.calendarList.Items.FirstOrDefault(
      x => x.Id == this.activeCalendarId);
      this.gcSyncComponent.CalendarId = this.activeCalendarId;
      
      if (this.ricbCalendarList.Items.Contains(itemToSelect.Summary))
      this.beiCalendarList.EditValue = itemToSelect.Summary;
      else
      this.activeCalendarId = String.Empty;
      }
      }

    一切設置完成后,可以隨時在DXGoogleCalendarSync組件上調(diào)用Synchronize或SynchronizeAsync來觸發(fā)同步進程。首次啟動時,默認的網(wǎng)絡瀏覽器將顯示一個頁面,要求您登錄要用于同步的Google帳戶。

    除了上述基本設置外,DXGoogleCalendarSync組件還提供其他功能,包括:

    • 會話狀態(tài)日志記錄,來幫助確定Scheduler Appointments和Google Events的優(yōu)先級
    • 發(fā)生次要同步?jīng)_突時,將觸發(fā)一個專用事件,處理它來手動確定有效性
    • 自定義字段,用于存儲Google事件ID和eTag值
    • ProgressChanged事件,用于跟蹤自定義進度指示器的同步狀態(tài)

    有關Google日歷同步功能的完整文檔,請訪問此鏈接。


    中國區(qū)首發(fā) · DevExpress v20.1新版發(fā)布會報名開啟,名額有限先到先得哦~

    DevExpress技術交流群2:775869749      歡迎一起進群討論

    慧都高端UI界面開發(fā)
    掃碼咨詢


    添加微信 立即咨詢

    電話咨詢

    客服熱線
    023-68661681

    TOP
    三级成人熟女影院,欧美午夜成人精品视频,亚洲国产成人乱色在线观看,色中色成人论坛 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();