Udvikling af en app med brug af Domino Data Dervice Apiet

Post on 05-Dec-2014

509 views 0 download

description

Præsentation afholdt på DanNotes 27/11-2013

Transcript of Udvikling af en app med brug af Domino Data Dervice Apiet

UDVIKLING AF EN APP MED BRUG AF DOMINO DATA SERVICE APIET DanNotes, Korsør, 27/11-2013

Af Jens Bruntt - Convergens

Systemarkitekt Service Orienteret Arkitektur Digital Post OIO standarderne Notes /Domino baggrund Tomcat Java Leger med Android

Leverandør til offentlige sektor Sagsbehandling (Notes/Domino) Integration – digitalisering Digital Post OIO standarder Fjernprint Notes/Domino generelt Java WebSphere portal xPages iOS

PROGRAMMET CA 60 MINUTTER

Hurtig introduktion til DomDisc app’en

Authentication med IBM Domino fra app

Introduktion til Domino Data Service API

Læse dokumenter

Skrive dokumenter

Vi laver en kode-modifikation i DomDisc

Eventuelt og ubesvarede spørgsmål

HURTIG INTRODUKTION TIL DOMDISC APP’EN

Native Android app - Java

Konfigureres til at ”replikere” med en Diskussions-type Notes database på en Domino server

HTTP eller HTTPS

Gemmer data lokalt i sql database

Bruger Domino Data Service APIet = REST

Kan installeres fra Google Play

Kildekoden kan downloades fra openntf.org eller github.org

Open source med meget genbrugsvenlige licensforhold

AUTHENTICATION MED IBM DOMINO FRA APP

Vi skal bruge en LtpaToken for at kunne tale sikkert med IBM Domino over HTTP

LtpaToken er en sessions-cookie som står i HTTP headeren på alle HTTP-transaktioner mellem klient og webserver når brugeren er logget på Domino

Ved f.eks. iNotes-login til Domino vises en login-formular – den kan vi simulere og få en LtpaToken

LOGIN I BROWSER

KODEEKSEMPEL: GETAUTHENTICATIONTOKEN

• Byg en Request-body

– Username

– Password

• POST

• Kig i svar HTTP header efter ”Set-Cookie”

• ”LtpaToken=abcd” gemmes og bruges i efterfølgende forespørgsler til Domino

INTRODUKTION TIL DOMINO DATA SERVICE API

Domino Data Service APIet er nu en del af Domino Access Services

REST kald til Domino

Arbejde mod views, view-design og dokumenter (selve dokumenterne)

Dokument-muligheder: GET- læse et dokument

PATCH (POST) – opdatere enkelt-felter

PUT – overskrive alle felter

DELETE – gæt selv

INTRODUKTION TIL DOMINO DATA SERVICE API

• Collection-muligheder

– GET – udlæse samtlige dokumenter i kompakt format

– POST – oprette et helt nyt dokument

• View/Folder-muligheder

– GET – udlæse view/folder entries. Uddata er system-felter + egne kolonner

• Der er flere muligheder – Nogle highlights

– Søge-parametre

– paging i udlæsninger

– Domino Calendar Service

LÆSE DOKUMENTER LOGIK I DOMDISC

Udlæs en liste med samtlige dokumenter i kompakt format

For hvert dokument Check om vi har det i forvejen (UNID)

Hvis nej

Hent det fulde dokument (nyt REST kald)

Gem

Hvis ja

Er det opdateret (modified er ændret)

Hvis ja

Hent det fulde dokument

Gem

LÆSE ET HELT DOKUMENT

• http//host/sti/db.nsf/api/data/documents/unid/D1D1114365B55618852578B700499AFD

• Værdien vi bruger tager vi fra @href i det opslag der hentede den komplette liste med noter

• Output er – En række systemfelter som

• @unid • @created • @authors • @form

– Alle de items der ellers er gemt i dokumentet. Selve applikationens data. som f.eks. • Subject • body

KODEEKSEMPEL: LÆSE COLLECTION

• GET ../api/data/documents

• Inkludere LtpaToken

• Parse indhold og sammenligne med lokale database

• Evt udlæse hele dokumenter

KODEEKSEMPEL: LÆSE DOKUMENT

• GET url taget fra @href

• Inkludere LtpaToken

• Parse indhold og skrive til database

SKRIVE DOKUMENTER

POST en JSON-struktur til Domino. Indhold: De felter som ønskes gemt Subject

Body

Categories

http//host/sti/db.nsf/api/data/ documents/?form=MainDocument& computewithform= false/true

Der udføres felt-valideringer

KODEEKSEMPEL: SKRIVE DOKUMENT

• Byg en Request-body

– Subject

– Body

• Sæt LtpaToken i request-header

• POST

• Kig i svar HTTP-header efter ”Location” <> tom = succes

VI LAVER EN KODE-MODIFIKATION I DOMDISC

Problem: DomDisc mangler mulighed for at kunne notificere når der er nyt eller der er opstået en fejl

Vi vil Downloade DomDisc kildekoden

Downloade et støtte-bibliotek: ActionBar sherlock

Sætte koden op så den virker i Eclipse

Foretage kode-ændringen: notifikation

Se at den virker

SÆTTE ECLIPSE OP MED ACTIONBARSHERLOCK

• File->Import->Existing Android code

SÆTTE ECLIPSE OP MED DOMDISC

• File->Import-> Existing Android code

• Samme som for ActionBarSherlock

• Knyt DomDisc sammen med ActionBarSherlock

KODEÆNDRING: NOTIFIKATION

• Opdater til nyeste compatibility library i ActionBarSherlock -

KODEÆNDRING: NOTIFIKATION

import android.support.v4.app.NotificationCompat; notifyUser("We just replicated", "replication"); private void notifyUser(String notificationText, String tickerText) { NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(context); notificationBuilder.setSmallIcon(R.drawable.domdisclaunchericon); notificationBuilder.setAutoCancel(true); Intent intent = new Intent(context, StartActivity.class); PendingIntent pIntent = PendingIntent.getActivity(context, 0, intent, 0); notificationBuilder.setContentIntent(pIntent); notificationBuilder.setContentTitle("DomDisc replication"); notificationBuilder.setContentText(notificationText); notificationBuilder.setTicker(tickerText); NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.notify(0, notificationBuilder.build()); }

EVENTUELT OG UBESVAREDE SPØRGSMÅL

Pas på Rich Text - eksempler Json Simpelt - original

Json Text/html - original

Json Text/html med inline image – original

Husk at felter kan skifte design i applikationens levetid

HTTP 200 ved login betyder ikke nødvendigvis at der er logget ind

HTTP 302 kan drille ved authentication

Indhold af @href skifter fra absolout til relativt i 9.0.1

Info: Der er links til informationskilder i præsentationen.

Der er en developer readme i DomDisc projektet

KONTAKT Jens Bruntt

Mail jbr@convergens.dk

Blog http://www.jens.bruntt.dk

Mere blog http://www.convergens.dk

Twitter https://twitter.com/JensBruntt

G+ https://plus.google.com/+JensBruntt

LinkedIn http://dk.linkedin.com/in/jbruntt/