Pergunta

Estou gerando arquivos ICalendar (.ics).

Usando os campos UID e SEQUENCE posso atualizar eventos existentes no Google Calendar e no Windows Calendar MAS NÃO no MS Outlook 2007 - apenas cria um segundo evento

Como faço para que eles funcionem no Outlook?

Obrigado

Tom

Foi útil?

Solução

Continuei fazendo alguns testes e agora consegui fazer com que o Outlook atualizasse e cancelasse eventos com base no arquivo .cs.

Na verdade, o Outlook parece responder às regras definidas no RFC 2446

Em resumo, você deve especificar

METHOD:REQUEST e ORGANIZER:xxxxxxxx

além de UID:e SEQUENCE:

Para um cancelamento você deve especificar METHOD:CANCEL

Exemplo de solicitação/atualização

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//SYFADIS//PORTAIL FORMATION//FR
METHOD:REQUEST
BEGIN:VEVENT
UID:TS_229377_MS_262145@syfadis.com
SEQUENCE:5
DTSTAMP:20081106T154911Z
ORGANIZER:catalog@syfadis.com
DTSTART:20081113T164907
DTEND:20081115T170000
SUMMARY:TestTraining
STATUS:CONFIRMED
END:VEVENT
END:VCALENDAR

Exemplo de cancelamento;

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//SYFADIS//PORTAIL FORMATION//FR
METHOD:CANCEL
BEGIN:VEVENT
UID:TS_229377_MS_262145@syfadis.com
SEQUENCE:7
DTSTAMP:20081106T154916Z
ORGANIZER:catalog@syfadis.com
DTSTART:20081113T164907
SUMMARY:TestTraining
STATUS:CANCELLED
END:VEVENT
END:VCALENDAR

Outras dicas

Falei com Tom Carter, o autor da pergunta.Ele tinha um exemplo prático com uma solicitação seguida de cancelamento.O que eu errei foi que meu MÉTODO estava dentro do meu VEVENT quando deveria estar fora.Então aqui está uma atualização funcional!

Original:

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//WA//FRWEB//EN
METHOD:REQUEST
BEGIN:VEVENT
UID:FRICAL201
SEQUENCE:0
DTSTAMP:20081108T151809Z
ORGANIZER:donotreply@test.com
DTSTART:20081109T121200
SUMMARY:11/9/2008 12:12:00 PM TRIP FROM JFK AIRPORT (JFK)
LOCATION:JFK AIRPORT (JFK)
END:VEVENT
END:VCALENDAR

Atualizar:

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//WA//FRWEB//EN
METHOD:REQUEST
BEGIN:VEVENT
UID:FRICAL201
SEQUENCE:1
DTSTAMP:20081108T161809Z
ORGANIZER:donotreply@test.com
DTSTART:20081109T121300
SUMMARY:11/9/2008 12:13:00 PM TRIP FROM JFK AIRPORT (JFK)
LOCATION:JFK AIRPORT (JFK)
END:VEVENT
END:VCALENDAR

Tudo o que fiz foi adicionar o método de solicitação (no local correto!) E um organizador.

Estou usando o Outlook 2003 (pela leitura das postagens, 2007 parece se comportar da mesma maneira) e você precisa distinguir claramente entre o comportamento da importação explícita de arquivo de um arquivo ics e a importação implícita quando um arquivo ics é 'clicado duas vezes '.

No menu do Outlook Arquivo/Importar e Exportar...O Outlook carregará quantas entradas VEVENT houver no arquivo e nenhuma alteração no UID:, SEQUENCE:ou DTSTAMP:valores alteram isso, ou seja, se você alterar quaisquer dados e importá-los novamente, obterá apenas um conjunto duplicado de entradas.

Se você clicar duas vezes em um arquivo ics, ele processará apenas a primeira entrada VEVENT.No entanto, reconhece o UID e, se for DTSTAMP:for mais tarde (a SEQUÊNCIA pode ser a mesma, mas não inferior), você será avisado e atualizará o evento em seu calendário.

BEGIN:VCALENDAR
VERSION:2.0
PRODID:www.membership-services.net
METHOD:REQUEST
BEGIN:VEVENT
DTSTART:20090126T210000
DTEND:20090126T220000
SUMMARY:Avondale - Thameside Away Game vs Croydon
LOCATION:Whitgift School
DESCRIPTION:http://maps.google.co.uk/maps?f=q&hl=en&geocode=&q=CR2+6YT 
UID:AWPC_8
SEQUENCE:0
DTSTAMP:20090123T112600
END:VEVENT
BEGIN:VEVENT
DTSTART:20090202T213000
DTEND:20090202T223000
SUMMARY:Avondale - Thameside Home Game vs Orcas
LOCATION:Putney
DESCRIPTION:http://maps.google.co.uk/maps?f=q&source=s_q&hl=en&ie=UTF8&ll=51.4635,-0.2285&spn=0.005,0.009613&t=h&z=17&iwloc=lyrftr:w2t.90,0x48760f04a04b1801:0x49ebf12503a5d5a9,51.463459,-0.228674 
UID:AWPC_10
SEQUENCE:0
DTSTAMP:20090123T112600
END:VEVENT
END:VCALENDAR

adicione isso ao seu arquivo ICS

X-WR-RELCALID:MyCal123   

onde MyCal123 é um identificador exclusivo para seu calendário.

Ao adicionar esta linha a um arquivo ICS, todo o calendário é atualizado (após um prompt no Outlook).Você nem precisa alterar DTSTAMP ou SEQUENCE ou ORGANIZER e METHOD:PUBLISH é adequado para a atualização.Basta atualizar os detalhes do evento, clicar duas vezes no ICS e o calendário será atualizado.Observe que isso também funciona bem se você publicou o calendário e forneceu um URL para as pessoas visualizarem.Eles só precisam atualizar após cerca de 2 minutos e também receberão a atualização.

Obrigado a David Bjørnhart por apontar isso: A importação ICal cria um novo calendário ao abrir o arquivo ics

Estou usando o Entourage, então isso pode não corresponder exatamente ao comportamento que você está vendo, mas espero que ajude.

Usando o iCalendar da sua resposta, o Entourage nem importaria os dados.Usando um arquivo em bom estado, consegui importá-lo e atualizá-lo com êxito.Comparando os dois arquivos, as únicas diferenças estruturais são as seguintes:

  • Meu bem conhecido não tem um VERSION elemento
  • Meu bem conhecido não tem um PRODID elemento
  • Meu bem conhecido não tem um STATUS elemento
  • Meu bem conhecido não tem um SEQUENCE elemento

Como o suporte da Microsoft para padrões abertos tende a demorar, sugiro tentar sem o VERSION informações.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top