Vos recrutements informatiques

700 000 développeurs, chefs de projets, ingénieurs, informaticiens...

Contactez notre équipe spécialiste en recrutement

Developpez.com - 4D
X

Choisissez d'abord la catégorieensuite la rubrique :


iCal et 4D

Date de publication : Mai 2004

Par Dave DELL'AQUILA (Senior evangelist, 4D Inc.)
 

En combinant la puissance de 4D et le format standardisé de iCal, vous êtes en mesure de proposer des solutions qui seront compatibles avec beaucoup d'applications. La possibilité de lire des fichiers iCal publiés signifie, qu'en plus importer ces documents, 4D peut tout simplement être contrôlé par iCal en mettant sur pied des mécanismes basés sur les noms des événements.

I. Introduction
II. Résumé
III. Publier ses données iCal
La solution .Mac
La solution serveur Web
IV. Configurer 4DWebStar en tant que serveur WebDAV
V. 4D et iCal
VI. Du parsing avec 4ème Dimension
VII. Publier un calendrier depuis 4D
VIII. La base exemple
IX. Tout est possible !
X. Bases exemples


I. Introduction

La dernière décennie a vu l'explosion de l'usage des calendriers et autres agendas électroniques. Cependant, la croissance à long terme de ces technologies est bridée, au niveau de l'internet, par l'absence d'un standard fixant la forme du contenu de ces messages.


II. Résumé

L'application iCal est disponible http://www.apple.com/fr/ical/ depuis MacOS 10.2. iCal répond aux besoins d'informer sur des dates d'anniversaires, événements récurrents, fixer des échéances ou planifier des réunions. Tout les contacts de votre carnet d'adresses MacOS X peuvent recevoir le rappel d'un événement iCal via un message par email posté par l'application Mail de MacOS X. iCal simplifie la publication et son partage en ligne avec, au choix, la solution Apple dénommée .Mac ou des solutions tierces telles les serveurs WebDAV. iCal stocke ses fichiers au standard iCalendar (.ics), format en cours dans le calendrier Mozilla. Vous pouvez donc vous inspirer de code existant depuis longtemps pour lire et analyser les fichiers .ics et les intégrer à votre base.

- Des calendriers multiples
Garder la trace du planning des collègues, amis ou de qui vous voulez n'a jamais été aussi aisé. Qui partage un même compte utilisateur d'un ordinateur peut créer son calendrier et voir celui des autres, individuellement ou collectivement.

- Partager des calendriers
iCal peut aussi être partagé s'il est publié sur le réseau internet. Ainsi, les personnes qui ne sont pas sur votre machine ont accès à vos informations. En publiant sur .Mac, les autres personnes peuvent les voir à l'aide d'un navigateur classique.
Il est également possible d'ajouter à votre liste des calendriers publiés sur le web : il suffit de s'y abonner.

- Simplicité de mise à jour entre ordinateurs ou équipements.
Si vous gérez plusieurs calendriers sur plusieurs ordinateurs, il est possible de les synchroniser avec iSync afin que chaque machine ait les informations les plus récentes. Avec la technologie Bluetooth, un adaptateur USB peut créer une synchronisation sans fil vers vos devices (comme aiment à dire les Américains) que sont votre téléphone GSM, votre PDA (Palm et autres...) et autre iPod.

- Une étroite collaboration avec 4D
Avec 4D, le développeur peut proposer une nouvelle gamme de solutions qui coopère avec iCal. ce dernier peut devenir une application cliente de 4D : vous stockez des tâches de planning dans le data de 4D et, vice-versa, iCal affiche des informations contenues dans la base de données.


III. Publier ses données iCal

Nous allons passer en revue quelques options de publication de données iCal via des services externes. Dans tous les cas vos informations sont publiées à sens unique par duplication de votre fichier .ics. À l'aide de l'URL du .ics publié, d'autres utilisateurs pourront souscrire à votre calendrier en lisant cette copie.

La publication iCal consiste à créer des calendriers spécifiques et à les rendre disponibles, en lecture seule. Un calendrier publié ne peut l'être qu'une seule fois sur un même serveur. Publier revient à placer une copie d'un calendrier en particulier sur un serveur distant et à en préciser le rythme des mises à jour.

Il existe deux façons de publier : avec .Mac ou des serveurs tiers compatibles WebDAV ou encore des sites web voués à cette tâche. La publication la plus facile se fera avec un compte .Mac.


La solution .Mac

Créez un calendrier et ensuite choisissez la ligne "Publier" sous le menu "calendrier".
Si vous ne l'avez pas encore ouvert, une invitation vous est faite à saisir un compte .Mac dans vos Préférences système. Un compte "à l'essai"  peut être ouvert temporairement et gratuitement.

Pictures 0323x0379



Donner votre URL à vos utilisateurs.
Dès qu'un calendrier est publié il devient disponible en ligne à l'adresse http://ical.mac.com/.mac/identifiant.Mac/nomducalendrier.
Quant aux autres, ils peuvent y souscrire à cette adresse : webcal://ical.mac.com/identifiant.Mac/nomducalendrier;
La solution est étonnamment simple à mettre en œuvre et facile d'accès pour peu que vos correspondants aient une application capable de lire du .ics.


La solution serveur Web

Une autre manière de publier est le recours à un serveur web. iCal exchange http://www.icalx.com est aussi une solution et est actuellement gratuite.

Pictures 0324x0501



Le service a la particularité de proposer des zones publiques et des zones privées. Ainsi vous contrôlez l'usage de vos calendriers. Il peuvent être consultés dans une page html ou par souscription via iCal. (Note du traducteur : au moment de publier ces lignes l'accès au serveur icalx.com semblait "perturbé").

Pour les calendriers d'intérêt général que vous voulez porter à la connaissance du monde entier, il est possible d'utiliser un annuaire comme iCalShare http://icalshare.com/.

4DWebmail

4DWebmail est une application open-source qui fournit une interface web, la gestion des comptes eMails en POP3 et IMAP, un gestionnaire de contacts et la capacité de publier des calendriers au format .ics. 4DWebmail est disponible à cette adresse :
http://www.4d.fr/products/downloads/download_4dws.html.


IV. Configurer 4DWebStar en tant que serveur WebDAV

Hormis l'usage de serveur web pour le partage de votre calendrier, vous pouvez aussi utiliser 4DWebStar V qui intègre la technologie WebDAV, un protocole de partage de fichier basé sur HTTP. 

Voici, pas à pas, la manière de régler 4DWebStar V et en faire un WebDAV:

1 : Créez un sous-dossier qui recevra vos fichiers iCal. Par exemple, placez-le dans : Applications/4DWebStar/Webserver/DefaultSite/iCal :

Pictures 0383x0221



2 : Connectez-vous avec le client d'administration :

Pictures 0161x0144



3 : Ouvrez le site approprié :

Pictures 0141x0151



4 : Définissez les permissions :

Pictures 0144x0266



5 : Définissez un royaume. Assurez-vous que les URI correspondent au chemin d'accès du dossier défini au point 1 :

Pictures 0411x0273



6 : Créez un nom d'utilisateur et un mot de passe :

Pictures 0411x0273



7 : Définissez une méthode d'authentification :

Pictures 0411x0273



8 : Sélectionnez [YOUR AUTHENTICATOR] et règlez les permissions :

Pictures 0411x0273



Vous êtes prêt à publier votre calendrier iCal sur votre propre serveur :
http://localhost/iCal.


V. 4D et iCal

Parce que le format iCal est normalisé iCalendar, vous pourrez écrire et lire vos propres fichiers .ics depuis 4D. Dans le texte qui suit, nous allons approfondir iCalendar et étudier un morceau de code destiné à importer et écrire des .ics.

Le format iCalendar

Les spécifications exhaustives de iCalendar sont disponibles sur le web à l'adresse http://www.ietf.org/rfc/rfc2445.txt. Voici un exemple simple :

   BEGIN:VCALENDAR
   CALSCALE:GREGORIAN
   X-WR-TIMEZONE;VALUE=TEXT:US/Pacific
   METHOD:PUBLISH
   PRODID:-//Apple Computer\, Inc//iCal 1.0//EN
   X-WR-CALNAME;VALUE=TEXT:Example
   VERSION:2.0
   BEGIN:VEVENT
   SEQUENCE:5
   DTSTART;TZID=US/Pacific:20021028T140000
   DTSTAMP:20021028T011706Z
   SUMMARY:Coffee with Jason
   UID:EC9439B1-FF65-11D6-9973-003065F99D04
   DTEND;TZID=US/Pacific:20021028T150000
   BEGIN:VALARM
   TRIGGER;VALUE=DURATION:-P1D
   ACTION:DISPLAY
   DESCRIPTION:Event reminder
   END:VALARM
   END:VEVENT
   END:VCALENDAR



Chaque ligne - une "content-line" - est constituée en deux parties séparées par un double point.

À gauche des deux points, la propriété qui peut être faite d'un ou plusieurs paramètres. Vous séparez la propriété de ses paramètres par des points virgules et plusieurs paramètres seront séparés par des virgules.

À droite des deux points, la valeur. Par exemple, la propriété DTSTART du dessus (la date et l'heure de début de l'événement) a un paramètre qui précise le fuseau horaire appliqué TZID dont la valeur est US/Pacific DTSTART;TZID=US/Pacific. La valeur de la propriété est une chaîne date/heure formatée AAAAMMJJ (Année sur 4 digits, le mois sur 2 et le jour sur 2) suivi de la lettre T et une chaîne heure formatée HHMMSS.

Notez que ces lignes se terminent "à la Windows" avec un CRLF (Carriage Return Line Feed). Vous pouvez briser une longue ligne en insérant un CRLF suivi par 1 ou plusieurs caractères d'espacement.

Les calendriers peuvent contenir diverses composantes : des événements, des alarmes, des choses à faire, etc. La plus classique est l'événement. Dans l'exemple plus haut, vous en avez un entre les lignes BEGIN:VEVENT et END:VEVENT. Son début et sa fin peuvent être précisés par les propriétés DTSTART et DTEND ou par la combinaison des propriétés DTSTARTDURATION et RRULE.
RRULE définit la répétitivité d'un objet et sa syntaxe peut devenir complexe. RRULE permet à un fichier iCalendar de contenir un événement qui se perpétue sans cesse : chaque second mardi de chaque mois mais pas en novembre ni en juin. Voici un exemple d'événement récurrent qui a lieu du lundi au jeudi et ce jusqu'au 14 décembre 2002 :

   RRULE:FREQ=WEEKLY;UNTIL=20021214T055959;INTERVAL=1;BYDAY=MO,
   TU,WE,TH


VI. Du parsing avec 4ème Dimension

Nous allons examiner la base "iCal_NT". Le pseudo-code qui suit nous montre l'angle pris pour analyser les fichiers :

  • Si le fichier est "distant" (cas des abonnements), le ramener localement ;
  • Ouvrir le document ;
  • Le découper dans un tableau ;
  • Détruire le fichier temporaire ;
  • Création d'enregistrements basés sur le tableau ;
  • Fermer le document.


C'est à présent que débutent les choses intéressantes : en regardant de plus près nous voyons un algorithme classique fondé sur RECEVOIR PAQUET placé dans une boucle.

   C_BOOLEEN(vEvent)

   C_ENTIER LONG(vlElem)

   C_TEXTE($1)
   C_POINTEUR($2;$3;$4;$5;$6;$7)
   C_TEXTE($T_Calendrier)
   C_TEXTE($T_Data)
   C_HEURE($H_Doc)

   $T_Calendrier:=$1   ` Accès au fichier .ICS
   Si (Tester chemin acces($T_Calendrier)=Est un document )
      $H_Doc:=Ouvrir document($T_Calendrier;"TEXT";Mode lecture )
      Si (OK=1)
         vEvent:=Faux
         Repeter
            RECEVOIR PAQUET($H_Doc;$T_Data;Caractere(10))
            iCal_Data_To_Arrays ($T_Data;$2;$3;$4;$5;$6;$7)
         Jusque (OK=0)
         FERMER DOCUMENT($H_Doc)
      Fin de si

   Fin de si  



Voici le code de la méthode iCal_Data_To_Arrays, qui est invoquée pour chaque ligne lue dans le fichier .ics. À noter que les paramètres $2 à $7 contiennent des pointeurs vers des tableaux que nous déclarons avant toute chose.

      ` ----------------------------------------------------
      ` Méthode : iCal_Data_To_Arrays
      ` Description
      ` Augmente la taille du tableau
      ` et extrait les données pour les placer dans le tableau adéquat
      ` ----------------------------------------------------
      ` Auteur :Add Komoncharoensiri - 4D, Inc
      ` ----------------------------------------------------


   C_TEXTE($1)
   C_POINTEUR($2;$3;$4)

   C_TEXTE($T_Data;$T_Tag;$T_Valeur;$T_Date;$T_Heure)
   C_ENTIER($I_Annee;$I_Mois;$I_Jour)
   C_ENTIER($I_Position)

   $T_Data:=$1

   Si (Non(vEvent))
      Si ($T_Data="BEGIN:VEVENT")
         vEvent:=Vrai
         vlElem:=Taille tableau($2->)+1
         INSERER LIGNES($2->;vlElem)
         INSERER LIGNES($3->;vlElem)
         INSERER LIGNES($4->;vlElem)
         INSERER LIGNES($5->;vlElem)
         INSERER LIGNES($6->;vlElem)
         INSERER LIGNES($7->;vlElem)
      Fin de si
   Sinon
      $I_Position:=Position(":";$T_Data)
      $T_Tag:=Sous chaine($T_Data;1;$I_Position-1)
      Au cas ou
         : ($T_Tag="SUMMARY")
            $2->{vlElem}:=Sous chaine($T_Data;$I_Position+1)

         : ($T_Tag="DESCRIPTION")
            $5->{vlElem}:=Sous chaine($T_Data;$I_Position+1)

         : ($T_Tag="DTSTAMP")
            $6->{vlElem}:=Sous chaine($T_Data;$I_Position+1)

         : ($T_Tag="UID")
            $7->{vlElem}:=Sous chaine($T_Data;$I_Position+1)

         : ($T_Tag="END")
            Si ($T_Data="END:VEVENT")
               vEvent:=Faux
            Fin de si

         Sinon

            $I_Position:=Position("DTEND";$T_Data)
            Si ($I_Position>0)
               $I_Position:=Position(":";$T_Data)
               $T_Valeur:=Sous chaine($T_Data;$I_Position+1)
               $I_Position:=Position("T";$T_Valeur)

               $T_Date:=$T_Valeur   `Sous-chaine($T_Valeur;1;$I_Position-1)
               $I_Annee:=Num(Sous chaine($T_Date;1;4))
               $I_Mois:=Num(Sous chaine($T_Date;5;2))
               $I_Jour:=Num(Sous chaine($T_Date;7;2))
               $T_Date:=Chaine(Ajouter a date(!00/00/00!;$I_Annee;$I_Mois;$I_Jour))
               $T_Heure:=Sous chaine($T_Valeur;$I_Position+1)
               $T_Heure:=Inserer chaine($T_Heure;":";3)
               $T_Heure:=Inserer chaine($T_Heure;":";6)
               $4->{vlElem}:=$T_Date+" "+$T_Heure
            Sinon
               $I_Position:=Position("DTSTART";$T_Data)
               Si ($I_Position>0)
                  $I_Position:=Position(":";$T_Data)
                  $T_Valeur:=Sous chaine($T_Data;$I_Position+1)
                  $I_Position:=Position("T";$T_Valeur)
                  $T_Date:=Sous chaine($T_Valeur;1;$I_Position-1)
                  $T_Date:=$T_Valeur
                  $I_Annee:=Num(Sous chaine($T_Date;1;4))
                  $I_Mois:=Num(Sous chaine($T_Date;5;2))
                  $I_Jour:=Num(Sous chaine($T_Date;7;2))
                  $T_Date:=Chaine(Ajouter a date(!00/00/00!;$I_Annee;$I_Mois;$I_Jour))
                  $T_Heure:=Sous chaine($T_Valeur;$I_Position+1)
                  $T_Heure:=Inserer chaine($T_Heure;":";3)
                  $T_Heure:=Inserer chaine($T_Heure;":";6)
                  $3->{vlElem}:=$T_Date+" "+$T_Heure
               Fin de si
            Fin de si
      Fin de cas

   Fin de si


VII. Publier un calendrier depuis 4D

Comme tout adret a son ubac, la lecture a son écriture. Ecrire un fichier iCal se fera aussi facilement que l'a été la lecture. Chaque enregistrement contient ces éléments :

   BEGIN:VCALENDAR
   BEGIN:VEVENT
   DTSTAMP: data
   SUMMARY: data
   UID: data
   DTSTART: data
   DURING:PT1H: data
   DTEND: data
   DESCRIPTION: data
   END:VEVENT
   END:VCALENDAR



Pour créer un .ics, bouclez simplement sur les données de votre sélection en les formatant comme décrit et écrivez dans votre fichier. Modifier créateur et propriété comme pour un fichier iCal et chargez-le sur votre serveur WebDAV. Le plus gros du travail a déjà été réalisé pour vous dans la base exemple qui contient les méthodes qui permettront l'upload de n'importe quel fichier vers un serveur.

Plusieurs avantages peuvent être dégagés de l'écriture de fichier iCal depuis 4D vers un serveur WebDAV. D'abord la solution est Mac et Windows. De plus, les utilisateurs autorisés peuvent écrire sur des serveurs WebDAV et n'importe quel utilisateur peut par la suite éditer le fichier. Notez que les serveurs Apple .Mac ne le permettent pas.


VIII. La base exemple

Cette Note technique est accompagnée d'une base exemple nommée iCal_NT qui fonctionne en se connectant sur un serveur WebStar du 4D Net Center qui met à disposition un calendrier de la tournée du guitariste Eric Clapton, calendrier que vous pourrez, sans craintes, agrémenter de vos commentaires. Vous veillerez à ce que le plug-in 4D Internet Commands soit installé. Après avoir lancé la base vous arriverez sur un formulaire liste : 

  • le bouton "abonnement" vous permet de récupérer les données distantes et donc de synchroniser la base 4D ;
  • le bouton "envoyer ses dates" met à jour le serveur distant ;
  • webcal://www.4dnetcenter.com/agenda/EricClaptonTour.ics est l'URL pour voir vos modifications sur le logiciel iCal (Il faut aussi rafraîchir les données avec commande-R !).

IX. Tout est possible !

En combinant la puissance de 4D et le format standardisé de iCal, vous êtes en mesure de proposer des solutions qui seront compatibles avec un grand nombre d'applications et, par là-même, proposer aux clients une alternative pour obtenir des informations stockées dans votre base 4D personnelle.

La possibilité de lire des fichiers iCal publiés signifie, qu'en plus d'importer ces documents, 4D peut tout simplement être contrôlé par iCal en mettant sur pied des mécanismes basés sur les noms des événements : imaginons un événement appelé "Sauvegarde" qui déclencherait un archivage de vos données ou bien un événement "Rapport:vente1" qui imprimerait le rapport nommé vente1 à une heure déterminée dans iCal !


X. Bases exemples

Téléchargez la base exemple :

base exemple Mac

base exemple Windows

__________________________________________________
Copyright © 1985-2009 4D SA - Tous droits réservés
Tous les efforts ont été faits pour que le contenu de cette note technique présente le maximum de fiabilité possible.
Néanmoins, les différents éléments composant cette note technique, et le cas échéant, le code, sont fournis sans garantie d'aucune sorte. L'auteur et 4D S.A. déclinent donc toute responsabilité quant à l'utilisation qui pourrait être faite de ces éléments, tant à l'égard de leurs utilisateurs que des tiers.
Les informations contenues dans ce document peuvent faire l'objet de modifications sans préavis et ne sauraient en aucune manière engager 4D SA. La fourniture du logiciel décrit dans ce document est régie par un octroi de licence dont les termes sont précisés par ailleurs dans la licence électronique figurant sur le support du Logiciel et de la Documentation afférente. Le logiciel et sa documentation ne peuvent être utilisés, copiés ou reproduits sur quelque support que ce soit et de quelque manière que ce soit, que conformément aux termes de cette licence.
Aucune partie de ce document ne peut être reproduite ou recopiée de quelque manière que ce soit, électronique ou mécanique, y compris par photocopie, enregistrement, archivage ou tout autre procédé de stockage, de traitement et de récupération d'informations, pour d'autres buts que l'usage personnel de l'acheteur, et ce exclusivement aux conditions contractuelles, sans la permission explicite de 4D SA.
4D, 4D Calc, 4D Draw, 4D Write, 4D Insider, 4ème Dimension ®, 4D Server, 4D Compiler ainsi que les logos 4e Dimension, sont des marques enregistrées de 4D SA.
Windows,Windows NT,Win 32s et Microsoft sont des marques enregistrées de Microsoft Corporation.
Apple, Macintosh, Power Macintosh, LaserWriter, ImageWriter, QuickTime sont des marques enregistrées ou des noms commerciaux de Apple Computer,Inc.
Mac2Win Software Copyright © 1990-2002 est un produit de Altura Software,Inc.
4D Write contient des éléments de "MacLink Plus file translation", un produit de DataViz, Inc,55 Corporate drive,Trumbull,CT,USA.
XTND Copyright 1992-2002 © 4D SA. Tous droits réservés.
XTND Technology Copyright 1989-2002 © Claris Corporation.. Tous droits réservés ACROBAT © Copyright 1987-2002, Secret Commercial Adobe Systems Inc.Tous droits réservés. ACROBAT est une marque enregistrée d'Adobe Systems Inc.
Tous les autres noms de produits ou appellations sont des marques déposées ou des noms commerciaux appartenant à leurs propriétaires respectifs.
__________________________________________________
 



Valid XHTML 1.1!Valid CSS!

Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.
Contacter le responsable de la rubrique 4D