Kalender-Management
Transcrição
Kalender-Management
Kalender-Management Entwicklercamp 2016 Denny Sternberg >> Bei Fragen, einfach fragen! Denny Sternberg • Seit 2001 entwickeln und admininstrieren von Lotus Domino • IBM Certified Application Developer, System Administrator • Instructor seit 2003 [email protected] 06182 - 7869432 2 Worum geht es beim Kalender-Management? 3 >> Anforderungen an das Kalender-Management Tool • • • • • • 4 Kalendereinträge erstellen insbesondere Einladungen zu Meetings. Es sollen Notes und externe User eingeladen werden. Es sollen Attachments mitgeschickt werden. Die Schnittstelle soll von „Außen“ (SAP, TDI, Powershell, Exchange) erreichbar sein. Einträge müssen erstellt, geändert, verschoben und gelöscht werden. Alles muss in GoogleMail, Traveler, Notes, Exchange in gleicher Art und Weise funktionieren. Welche Möglichkeiten haben wir? REST vs WebService 5 >> Warum REST? ( Representational State Transformation) Es dreht sich in einer REST-Architektur alles um Ressourcen 6 • Adressierbarkeit: Jede Ressource muss über einen eindeutigen Unique Resource Identifier (kurz URI) identifiziert werden können. • Zustandslosigkeit: Die Kommunikation der Teilnehmer untereinander ist zustandslos. Dies bedeutet, dass keine Benutzersitzungen (etwa in Form von Sessions und Cookies) existieren, sondern bei jeder Anfrage alle notwendigen Informationen wieder neu mitgeschickt werden müssen. • Einheitliche Schnittstelle: Jede Ressource muss über einen einheitlichen Satz von Standardmethoden zugegriffen werden können. Beispiele für solche Methoden sind die Standard-HTTP-Methoden wie GET, POST, PUT, und mehr. • Entkopplung von Ressourcen und Repräsentation: Das bedeutet, dass verschiedene Repräsentationen einer Ressource existieren können. Ein Client kann somit etwa eine Ressource explizit beispielsweise im XML- oder JSON-Format anfordern. • Domino: URL Command: ?readviewentries&outputformat=json >> Warum REST? ( Representational State Transformation) • • • Unterschiedliche Möglichkeiten von Ressourcen (JSON, XML, MIME, iCalendar, etc.) Verwendung eines einheitlichen Interfaces HTTP (GET, POST, PUT & DELETE) Domino arbeitet als Service Provider – – • Einfache Integration in Web/Mobile Anwendungen Es gib 2 Wege auf REST Services von Domino zuzugreifen – – 7 Sehr einfach zu nutzen XPage mit Rest Service Control Domino Access Services (DAS) >> Was ist Domino Access Services (DAS)? • Eine Art von REST die Domino zur Verfügung stellt: – – – – • • 8 Domino data service Mail service Calendar service …. Zugriff auf Daten über HTTP DAS ist eine Art von Framework REST vs SOUP ( WebService) >> Kalender Service - Übersicht • • • Verfügbar ab Notes 9.0.1 (deaktiviert by default) JSON und ICalendar Format Funktionen: – – – – 9 erstellen, lesen, ändern und löschen von Kalendereinträgen Auslesen eines Zeitraums Abfragen von zugesagten und noch nicht zugesagten Kalendereinträgen Verwaltung von Einträgen >> Kalender Abfrage • 10 GET http://{host}/{db}/api/calendar/events >> Kalender Abfrage • 11 GET http://{host}/{db}/api/calendar/events?format=icalendar >> Kalender Eintrag erstellen • • 12 POST http://{host}/{db}/api/calendar/events Content-Type: application/json >> Kalender Eintrag erstellen • • 13 POST http://{host}/{db}/api/calendar/events Content-Type: text/calendar >> Warum die Kalender REST API noch nicht optimal verwendbar ist? • Warum lässt sich ein Komplexes Managment nicht über die REST API abbilden? – – – – 14 Attachments im Body Personen ausladen Personen nachträglich einladen Berechtigung Webservice Wa r u m W e b S e r v i c e s – W o r u m g e h t e s ? 15 Webservice >> Web Services – worum geht es? „Ein Web Service ist eigentlich nicht viel mehr als eine dynamische Webseite. Der Unterschied besteht darin, dass normale Webseiten die Sprache HTML verwenden und sie normalerweise ein Browser dem Anwender präsentiert. Im Unterschied dazu liefert ein Web Service XML-Daten, die nicht für die unmittelbare Anzeige gedacht sind, sondern von einem speziellen Client-Programm weiterverarbeitet werden ...“ (c‘t) 16 >> Was sind Webservices? Komponente, die ihre Funktionalität über eine veröffentlichte Schnittstelle anbietet und über ein offenes Protokoll im Internet zugreifbar sind • Verwendet ausschließlich die Internetstandards XML und HTTP Bausteine: • • • WSDL (Web Service Definition Language) UDDI (Universal Service Description, Discovery, and Integration) SOAP (Simple Object Access Protocol) ist kompliziertet wie REST – 17 Erfordert Technologie Designen und in der Laufzeit >> SOAP, WSDL, UDDI Die drei Technologien ergänzen sich, sind aber unabhängig voneinander! SOAP (Simple Object Access Protocol): • • • Übernimmt die Aufgabe des Protokolls Nachrichtenübertragung vom Server zum Client und umgekehrt Unterliegt den W3C-Standards WSDL (Web Services Description Language): • • • Beschreibungssprache für den Webservice Beschreibung von Operationen und Nachrichten unabhängig von den Netzwerkprotokollen Gibt die URLs/Endpunkte an Beide basieren auf XML 18 >> UDDI Der Service Provider veröffentlich seine Services bei einem Server Broker 19 • • Ablage der WSDL- Datei bei einem UDDI Register • Hat sich bis heute nicht wirklich durchgesetzt Weitere Informationen zum Web Service Anbieter und technische Beschreibung >> WSDL <types>: • Definiert die einfachen und komplexen Datentypen die verwendet werden. Komplexe Datentypen bestehen aus einer Zusammenstellung von mehreren einfachen Datentypen <message>: • Definiert Ein- und Ausgabeparameter <portType>: • Definiert die aufrufbaren Funktionen <binding>: • Definiert Nachrichtenformat und das zu verwendende Protokoll <service>: • 20 Definiert den Endpunkt, also die Adresse über die der Webservice Provider erreichbar ist >> Erstellen des WSDL Zwei Möglichkeiten: • Das WSDL generieren von einer selbst geschriebenen Klasse – • Code/Interface Programmieren und daraus WSDL erzeugen Generierung des „Skelets“ aus Bestehenden WSDL – – Erstellung des Codes auf der Basis des Skelets Ähnlich bei der Erstellung des Consumers Welche Tools kann ich verwenden! • • • • 21 Java: Apache AXIS (http://ws.apache.org/axis2) Sun JAXB (Java Architecture for XML Binding) .NET: Visual Studio LotusScript: Domino Designer Demo WSDL File 22 23 24 >> Vorteile von Web Services Alle Vorteile komponentenbasierter Architekturen wie CORBA, J2EE oder .NET • • • • Unabhängigkeit von Plattformen, Systemen, Sprachen Flexibilität, evolutionäres Vorgehen der Entwicklung Skalierbarkeit, Wiederverwendbarkeit, Integration, ... Verwendung der bestehenden Business Logik und Datenspeichers Hohe Akzeptanz und Verbreitung • • 25 Basiert auf im Internet etablierten Standards (HTTP,XML) Einfach (leichtgewichtige Kommunikation), relative niedrige Einstiegshürde >> Nachteile von Webservices Offene Punkte/Fehlende Funktionalität • • • Sicherheit von Diensten Transaktionskontrolle Prozess-Steuerung Diese Punkte muss die Applikation selber beinhalten oder der Entwickler selber implementieren 26 >> Zusammenfassung von SOAP • • • • • 27 Herstellerneutral Framework neutral Standard basiert auf HTTP und XML Kann einfache und komplexe Datentypen verwenden Einfach zu implementieren Kalender Einträge 28 >> 29 >> Wie erstelle ich einen Kalender Eintrag? • Methode 1 (Lotusscript) native: – – Nachteile: • • • Jeder Eintrag muss separat erzeugt werden und an die User verschickt • Steuerung von SentBy Einträge ins Web müssen ICalendar Felder enthalten damit sie von Outlook, Google, etc. gelesen werden können Vorteil: • • • 30 Einträge ins Web müssen Formatiert werden ( Mime) Volle Kontrolle über die Kalendereiträge Volle Kontrolle über die Einladungen Anhängen und verwalten von Anhängen >> Wie erstelle ich einen Kalender Eintrag? • Methode 2 (Lotusscript) NotesCalendar: – Nachteile: • • • • – Einladen, Ausladen sind als Methode noch nicht „offiziell“ Verfügbar Ändern der eingeladenen Personen funktioniert nicht sauber Keine Anhänge in der initialen Einladung Vorteil: • • • 31 Kalender muss als ICal erstellt werden Einfach zu handhaben Einträge können leicht Identifiziert werden Standard Einladungen werden ins Web versendet Kalender Einträge - Felder >> Felder https://www-10.lotus.com/ldd/ddwiki.nsf/dx/cs_schema_toc?open 32 Alarm Items BusyTime Items • • $Alarm $AlarmDisabled $AlarmDescription $AlarmMemoOptions $AlarmOffset $AlarmSendTo $AlarmSound $AlarmUnit Alarms BookFreeTime $BusyName $BusyPriority Kalender Einträge - Felder >> Felder Mail Items • • • • • • • • • • • 33 $AltPrincipal $ExpandGroups $LangChair $LangPrincipal $NameLanguageTags $SMTPKeepNotesItems AltChair BlindCopyTo CopyTo Encrypt From Repeat UI fields • • • • • Principal SendTo Sign Logo MailOptions • • • • • • • • • • • RepeatAdjust RepeatCustom RepeatFor RepeatForUnit RepeatFromEnd RepeatHow RepeatInterval RepeatStartDate RepeatUnit RepeatUntil RepeatWeekends >> Appointment Items • 34 $CSFlags $CSTrack $CSVersion $CSWISL $Ref $RefOptions $Seal $SealData $Signature $WatchedItems _ViewIcon _ViewIcon2 AltChair AppointmentType ApptUNID Body Broadcast Categories Chair EndDateTime EndTimeZone • ExcludeFromView Form Location NoticeType OptionalAttendees OrgConfidential OrgRepeat OrgTable OriginalEndDate OriginalEndTimeZone OriginalStartDate OriginalStartTimeZone ParentRepeatDates ParentRepeatInstanceDates PreventCounter PreventDelegate • RepeatInstanceDates RequiredAttendees RequiredResources RescheduleEndDateTimes RescheduleInstanceDates RescheduleStartDateTimes RescheduleWhich Room SequenceNum StartDate StartDateTime StartTimeZone StatusUpdate StorageRequiredNames Subject Topic UpdateSeq Erstellen eines Eintrags mittels NotesCalendar Klasse 35 >> Voraussetzungen • Kalender Backend Classen – NotesCalendar • – NotesCalendarEntry • – Einzelner Kalendereintrag NotesCalendarNotice • 36 User Kalender Workflow Notiz die dem User zugesendet werden >> NotesCalender Klasse • • • • Lesen aller Daten aus dem Kalender als ICalendar Ausgeben der Liste von Meetings und Notizen Rückgabe eines speziellen Eintrages Erstellen eines Eintrags – – • Die UID des ICalendar wird mit der Dokumenten ID verknüpft Nicht dokumentierte Funktionen – 37 Beschreibung wird als HTML versendet Getapptunidfromuid(Uid As String, Validate As Boolean) As String >> NotesCalendarEntry Klasse • • Hauptfunktion ist das Lesen das Eintrags als ICalendar Ändern des Eintrags ist möglich, aber nur: – – – • Informationen an Serientyp und Wiederkehrend Zusagen und absagen können gemacht werden Aktionen: – – – 38 HTML Beschreibung Zusagen, Absagen, Löschen, Canceln, Gegenvorschlag, Delegieren Öffnen von untergeordneten Dokumenten Gib alle „nicht verarbeiteten“ Notizen >> NotesCalendarEntry Klasse (Nicht Dokumentiert) 39 >> NotesCalendarEntry Klasse (Nicht Dokumentiert) 40 >> NotesCalendarEntry Klasse (Nicht Dokumentiert) 41 >> NotesCalendarNotice • • Lesen des Kalendereintrags als ICalendar Aktionen: • • • 42 Zusagen, Absagen, etc Rückgabe der Notiz als Dokument Rückgabe aller nicht zugesagten Notizen Demo 43 Erstellen eines Eintrags ohne NotesCalendar Klasse 44 >> Aufbau und Workflow • • Erstellen des Appointment mit allen Feldern Erzeugen des Richtextobjekts/Mime sobald Attachments – • Erstellen des ICalendar Items und Konvertierung in ein String – • • • 45 (session.Convertmime) um das Body wieder als Mime zu öffnen Zeiten auf den unterschiedlichen Systemen beachten Erstellen des MultimimepartItem und hinzufügen von dem Body und ICalendar Items Erstellen der Einladungen an die erforderlichen Adressen Speichern der Dokument in der Mail.box um SentBy zu unterbinden >> Wie baue ich ein ICalender auf? 46 >> Wie baue ich ein MultiPartRelated Mime Item auf? 47 >> Wie baue ich ein MultiPartRelated Mime Item auf? 48 >> Wie hänge ich ein ICS an das Google erkennt? • • • 49 Set streamc = session.createStream Call streamc.Writetext(icale) cid = mime.attach(streamc, ENC_NONE, "", |text/calendar; charset=UTF-8; method=REQUEST; name="thisAppointment.Subject+ ".ics"|) Demo 50 >> Wie sieht es in Google aus? 51 >> Wie sieht es in Google aus? 52 Wa s k a n n s c h i e f g e h e n b e i m T h e m a W e b s e r v i c e ? 53 >> Was kann schief gehen? (Spezifikation) Man versucht es nicht… Standard != Standard Spezifikations Anwälte – Beispiel Amazon/Google Webservices: • • Nimm eine WSDL importiere sie in Notes oder RAD Schreibe eine PMR und frag „Warum du 100 oder mehr Fehler bekommst“ – – – 54 Array von Objekten RAD(J2EE), Amazon .NET IBM und Microsoft haben unterschiedlicher Meinung zu den „Standards“ >> Was kann schief gehen? (Security) Welche Security? Was brauchen wir für eine Security? • Erreichbarkeit ( Kann ich den Webservice erreichen oder nicht?) – – • SSL (einfach) Oder Key basierend Authentifizieren beim aufrufen auf dem Server – – – 55 Intern/extern XML unlesbar machen (Verschlüsseln?) – – • Netzwerk Digitale Signaturen Gemeinsame Zertifikate Vertrauenswürdige Directories >> Was kann schief gehen? (Security) • • Authentifizieren bei der Antwort an dem Client Zugriff auf den Server – • SOAP über Mehrere Server – – • 56 Client -> Server -> Server …. Signaturen Reihenfolge der Umsetzung – • • Authentifizierter User Anmelden und verschlüsseln? Oder Verschlüsseln und Anmelden ACL XML Verschlüsslung oder Signaturen verwenden >> Was kann schief gehen? (Character Sets) • • Verwenden alle UTF-8 haben wir wenig Probleme ABER: – – – – – 57 Nicht jeder macht es ISO Chinesisch UTF-16 SHF-JIS D e m o : Te a m c a l e n d a r Consumer 58 59 >> Kleines Extra • ws.Setcredentials("User", "Password") – • Ws.Setendpoint( „url“ ) – – • 60 Run as Web User Lenkt den Webservice auf diese URL Zur Laufzeit (nicht im Consumer Hardcodieren) Call ws.Settimeout(300000) >> Das wars, Fragen? 61