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