我正在创建一个扩展来将待办事项从 CRM 导入到雷鸟/闪电。我使用 calITodo 界面来创建我的 todos :
var todo = Components.classes["@mozilla.org/calendar/todo;1"].createInstance(Components.interfaces.calITodo);
但我找不到如何设置提醒,或为我的待办事项创建自定义提醒。
我正在创建一个扩展来将待办事项从 CRM 导入到雷鸟/闪电。我使用 calITodo 界面来创建我的 todos :
var todo = Components.classes["@mozilla.org/calendar/todo;1"].createInstance(Components.interfaces.calITodo);
但我找不到如何设置提醒,或为我的待办事项创建自定义提醒。
我将更广泛地回答这个问题,向您展示替代方案,您可能已经在这样做了。
如果您想将 CRM 用作日历的后端,您可能需要编写一个“Provider”类型的扩展,类似于 Google Calendar 的 Provider。您只需要为通常的操作(get/add/modify/delete)实现一些方法即可开始。请参阅Provider for Google Calendar 的源代码作为起点。
如果您只想进行一次性导入,那么您可能正朝着正确的方向前进。只需在相关日历上使用 addItem/adoptItem 方法即可。如果你需要一个对话框来选择日历,你可以重复使用这个,它可以通过 uri chrome://calendar/content/chooseCalendarDialog.xul 获得。
现在来回答你真正的问题。要向事件或待办事项添加提醒,以下代码会有所帮助。当然你可以选择不同的报警关系。
Components.utils.import("resource://calendar/modules/calUtils.jsm");
let todo = cal.createToDo();
let alarm = cal.createAlarm();
let alarmDate = cal.createDateTime();
alarm.related = Components.interfaces.calIAlarm.ALARM_RELATED_ABSOLUTE;
alarm.alarmDate = alarmDate;
todo.addAlarm(alarm);
// ...
报警器实现了calIAarm,你可以在这里找到接口说明。然后将其添加到实现 calITodo 和 calIItemBase 的 todo 中。有关某个项目的警报方法的概述,请参见此处。
如果您对其他可用的实用功能感兴趣,请参阅此处。您只需导入 calUtils 即可使用这两个文件中的函数。jsm _ 只需在每个函数前加上“cal.”即可。