【问题标题】:Refresh .ICS file when updates occur发生更新时刷新 .ICS 文件
【发布时间】:2010-12-25 19:47:38
【问题描述】:

我有一个数据库,它输出一个如下所示的 .ics 文件:

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//hacksw/handcal//NONSGML v1.0//EN
BEGIN:VEVENT
UID:36@homewoodphoto.jhu.edu
DTSTAMP:20091211T175956Z
DTSTART:20091106T200000Z
DTEND:20091106T230000Z
SUMMARY:
END:VEVENT
BEGIN:VEVENT
UID:35@homewoodphoto.jhu.edu
DTSTAMP:20091211T175956Z
DTSTART:20091105T220000Z
DTEND:20091106T010000Z
SUMMARY:
END:VEVENT
BEGIN:VEVENT
UID:34@homewoodphoto.jhu.edu
DTSTAMP:20091211T175956Z
DTSTART:20091106T200000Z
DTEND:20091106T230000Z
SUMMARY:
END:VEVENT
END:VCALENDAR

我可以通过大多数电子邮件客户端轻松订阅它,甚至是 Microsoft Outlook 2007。但是,在客户端订阅文件后,几乎不可能在发生更新时让它刷新文件。

有没有办法从 .ics 文件中强制或推送更新到客户端?或者从 Outlook 内部,即使它不在 Exchange 上?

【问题讨论】:

  • 这可能属于服务器故障。

标签: outlook icalendar vcalendar


【解决方案1】:

您必须重新签发 ical,但您需要做 2 件事:

  1. 保持相同的 UID。

  2. 您需要添加一个 SEQUENCE 标头(它是一个简单的整数)。然后为每个新更新增加序列号。

这是更新的样子:

BEGIN:VEVENT
UID:34@homewoodphoto.jhu.edu
DTSTAMP:20091211T175956Z
DTSTART:20091106T200000Z
DTEND:20091106T230000Z
SUMMARY:
SEQUENCE:1
END:VEVENT

【讨论】:

  • 您能解释一下“重新发行 ical”是什么意思吗? .ics 文件位于我的服务器上,并且始终是最新的,因为它来自数据库。一旦有新事件(不一定是对旧事件的更新),它就会出现在 .ics 文件中。问题是让它出现在订阅应用程序上。您是说每个事件的“序列”会对此有所帮助吗?新活动呢?
  • 嗨 Jason -- 我在这里听到 2 个问题。 1)如何获取客户端的更新。这取决于您,以及他们如何获得它(更多的是业务规则)。无论您是通过电子邮件发送它,还是他们查询一个 http 位置。 2) 软件如何识别 iCal 的更新。假设某个事件发生了一些变化(例如:时间或地点)。要让软件识别更新,您需要为事件保持相同的 UID,并增加序列号。我告诉你如何解决第二个问题。
  • 这更像是两个问题的结合,戴夫。我想知道是否有办法提醒客户有新的/更新的信息,所以它会刷新。我们在一天中的不同时间收到请求,因此客户端需要每 5 分钟刷新一次(不一定可能),或者 .ics 文件需要能够提醒客户端新/更新的信息。我想知道这是否可能。
  • PS 当我说我们有“请求进来”时,我的意思是通过在线系统添加的数据库条目应该会在 5 分钟内出现在日历上。
【解决方案2】:

对于这个问题,我们找到的唯一答案是:你做不到。截至目前,无法控制日历客户端根据您的 .ics 文件刷新和更新的频率。

换句话说,日历更新没有“推送”技术,客户端程序会随时拉取。因此,如果您正在构建一个包含要立即推送到人们日历的更新事件的数据库,那么……您不能。 :(

【讨论】:

    猜你喜欢
    • 2017-06-19
    • 1970-01-01
    • 2011-06-01
    • 2012-06-20
    • 2018-03-17
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多