3. Di cosa parleremo...
• … di quello di cui non parleremo
• … di quello di cui parleremo
• … dell'ambiente di sviluppo utilizzato per creare
applicazioni mobile native che si interfacciano con Domino
• … di chi si ricorda del progetto B.A.C.H.
• … di come consultare database Domino dal vostro tablet o
smartphone tramite applicazioni mobile native
• … di come eseguire agenti Domino in mobilità inviando
parametri in ingresso e ottenendo un output
• … di come sfruttare le potenzialità dei Web Services
Domino per realizzare applicazioni mobile avanzate
4. Di cosa non parleremo
• Progettazione e caratteristiche generali di un'applicazione mobile
cross-platform:
●
da 320x240 a 2048x1536
●
16:9... no, 9:16... no, 3:2... no, 1.85:1
●
Tap o Swipe?
●
Security
• Android vs. iOS vs. BlackBerry
• Titanium vs. PhoneGap vs. Corona vs...
• Mobile Web App
• E sì, lo so: parlando di ciò di cui non parleremo ne stiamo in realtà
parlando, ritrovandoci di fatto in una “slide di Möbius”
5. A.A.A. Domino in mobilità cercasi
• Applicazioni Domino mobile vs. applicazioni Domino mobilizzate
• «Signori, è arrivato il vecchio Bach»
• Utilizzare le funzioni native di Domino per consentire l'accesso
rapido in consultazione a dati in mobilità
• Sfruttare le potenzialità di LotusScript inviando parametri e
ottenendo un ritorno dati lasciando che sia Domino a occuparsi
delle attività onerose e comunicando con basi dati non esposte a
internet (anche riutilizzando codice già creato in precedenza)
• Implementare web services Domino per lo scambio dati complessi
realizzando applicazioni mobile avanzate per lavorare anche in
modalità off-line
6. Domino App Mobile....
• Creare oggi una nuova applicazione Domino significa con tutta
probabilità sviluppare con le XPages
• Un'applicazione realizzata con questa tecnologia è di fatto già pronta per
l'utilizzo mobile, senza limitazioni di OS, necessitando eventualmente di
una ottimizzazione orientata alle necessità pratiche di smartphone e
tablet (dimensioni schermo, connettività, ecc.)
7. ...Vs. Domino App Mobilizzate
• Necessità specifiche legate a funzionalità proprie dei dispositivi mobile
(e.g. accesso a rubrica contatti locale, geolocalizzazione, accesso ai dati
in modalità off-line) potrebbero invece far propendere per lo sviluppo di
applicazioni native che si interfacciano con Domino...
• ...soluzione che può risultare particolarmente indicata per rendere
accessibili in mobilità applicazioni client consolidate da tempo (anche
realizzate su versioni Notes meno recenti), sfruttando la possibilità di
creare un framework centralizzato per la gestione rapida delle
configurazioni mobile
• (e se eravate presenti al primo storico Dominopoint Day, tra quattro
slide sperimenterete probabilmente una sensazione di déjà vu)
8. Scontro di Titani...um
• http://www.appcelerator.com/
• Parole chiave: Titanium Studio, Titanium Mobile SDK
• Programmazione Javascript
• Ricompilazione del codice in applicazioni native tramite gli SDK per
Android, iOS, BlackBerry (il supporto per quest'ultimo è
attualmente in beta)
• Perchè proprio Titanium? Ve lo dirò alla fine (ma niente a che
vedere con Titanium vs. the rest of the world)
9. What's App?
Cartella principale
(script, immagini, ecc.)
Script eseguito
all'avvio
Librerie di script
Configurazione
10. Codice cross-platform?
Sì, ma almeno un “if” vi tocca...
• In ambito business, l'opportunità di realizzare applicazioni mobile rivolte
a un sottoinsieme noto di piattaforme non è così infrequente
• La possibilità di scrivere il codice una sola volta lasciando a Titanium
l'onere di compilarlo per i diversi sistemi operativi è comunque
benvenuta...
• … anche se oggetti, proprietà e metodi dedicati sono a disposizione dei
programmatori per sfruttare al meglio le caratteristiche specifiche dei
vari dispositivi (e.g. Titanium.UI.Android, Titanium.UI.iOS,
Titanium.UI.iPad, Titanium.UI.iPhone)
• Curiosamente, sarà una peculiarità hardware a forzarvi all'utilizzo di
un'istruzione “if” platform-specific:
if(Titanium.Platform.getOsname == "android") {
Titanium.App.addEventListener('android:back',
function(){
//do something
})
};
11. Il caro vecchio Johann Sebastian
• Ricordate il progetto B.A.C.H. - BlackBerry Application Central
Highway?
• Le potenzialità legate all'utilizzo di un unico punto di accesso alla
intranet Domino per i dispositivi in mobilità (e in grado di automatizzare
la gestione dell'autenticazione e delle ACL) sono a tuttoggi considerevoli
e valorizzabili sviluppando in Titanium
• Parole chiave: Lightweight Persistence, Properties API
Ti.App.Properties.setString('myString','This is a string');
Ti.App.Properties.setInt('myInt',10); secondo parametro
metodo GET per per metodo GET:
Ti.App.Properties.setBool('myBool',true); per recupero informazioni valore di default
Ti.App.Properties.setDouble('myDouble',10.6);
Ti.App.Properties.setList('myList',myArray);
Ti.App.Properties.getString('myString','This is a string default');
Ti.App.Properties.getInt('myInt',20);
metodo SET per Ti.App.Properties.getBool('myBool',false);
impostazione proprietà
Ti.App.Properties.getDouble('myDouble',20.6);
Ti.App.Properties.getList('myList');
12. Soggetto: accesso dati in lettura (1)
• Esigenza base: consultazione via HTTP da dispositivi mobili di dati
residenti su applicazioni intranet
13. Soggetto: accesso dati in lettura (2)
• Rendere disponibili i dati da Domino in modalità strutturata: comando
URL ReadViewEntries e relativi parametri
14. Soggetto: accesso dati in lettura (3)
• Lettura dati: Titanium.Network.HTTPClient, getResponseXML e
Titanium.XML.Document
var client = Ti.Network.createHTTPClient({
// funzione richiamata quando sono disponibili dati di ritorno
onload : function(e) {
var xmlDoc=this.responseXML;
// inserire il codice per il parsing
},
// funzione richiamata in caso di errore, incluso il timeout
onerror : function(e) {
// inserire il codice per la gestione degli errori
},
timeout : 5000 // in millisecondi
});
var url='http://<servername>/<dbpath>/<dbname>/<viewname>?ReadViewEntries&StartKey='+field.value;
// preparazione della connessione
client.open("GET", url);
// invio della richiesta
client.send();
15. Risposta: LotusScript Agents (1)
• Esigenza speciale: S.I.C.B.S.O (Simple In, Complex Between, Simple Out)
Parametro Parametro
IN OUT
http://turbulence.org/spotlight/thinking/chess.html
16. Risposta: LotusScript Agents (2)
• Predisposizione agente LotusScript per chiamata via URL con passaggio
parametri e ritorno valore: Query_String e Print
Dim Ss As New NotesSession
Dim wDoc As NotesDocument
Dim ret As String, retError As String
Dim strParamList As Variant
Dim strQueryString As String, param1 As String
On Error GoTo retError 'gestione per errori non previsti
Set wDoc=Ss.DocumentContext
'lista dei parametri passati via url
strQueryString=StrRight(wDoc.Query_String(0),"&")
strParamList=Evaluate({@Explode("} & strQueryString & {"; "&")})
'definisco i parametri passati via url
param1=StrRight(strParamList(0),"=")
'INSERIRE CODICE PERSONALIZZATO
ret="Operazione eseguita con successo."
ret:
Print "Content-type: text/xml; charset=utf-8"
Print ret
Exit Sub
retError:
Resume errMsg
errMsg:
retError="ATTENZIONE!"+Chr(10)+"L'applicazione ha riscontrato un errore imprevisto."
Print "Content-type: text/xml; charset=utf-8"
Print retError
17. Risposta: LotusScript Agents (3)
• Esecuzione agente e lettura risposta: Titanium.Network.HTTPClient e
getResponseText
var client = Ti.Network.createHTTPClient({
// funzione richiamata quando sono disponibili dati di ritorno
onload : function(e) {
var retAgent=this.responseText;
// inserire il codice per la gestione del messaggio di ritorno
},
// funzione richiamata in caso di errore, incluso il timeout
onerror : function(e) {
// inserire il codice per la gestione degli errori
},
timeout : 5000 // in millisecondi
});
var url='http://<servername>/<dbpath>/<dbname>/<agentname>?OpenAgent¶m1='+field.value;
// preparazione della connessione
client.open("GET", url);
// invio della richiesta
client.send();
19. Controsoggetto per aumentazione:
Domino Web Services e SQLite Database (2)
• Predisposizione Domino per gestione dati strutturati: LotusScript/Java e
WSDL
Class wsClass
Function wsFunction(param1 As String, param2 As String) As String
Dim Ss As New NotesSession
Dim Db As NotesDatabase
On Error GoTo retError
Set Db = Ss.CurrentDatabase
' INSERIRE CODICE PERSONALIZZATO
' IMPOSTARE VALORE DI RITORNO
wsFunction = "ok"
Exit Function
retError:
Resume errMsg
errMsg:
' VALORE DI RITORNO IN CASO DI ERRORE
wsFunction="error"
End Function
End Class
20. Controsoggetto per aumentazione:
Domino Web Services e SQLite Database (3)
• Interazione da dispositivo: Titanium.Network.HTTPClient, SOAPAction e
Ti.Database.open
var url = 'http://<servername>/<dbpath>/<dbname>/<webservicename>?OpenWebService';
var callparams = {
parameter1 : field1.value,
parameter2 : field2.value,
};
var wsclient = new customWSHTTPClient({ // funzione che restituisce un oggetto
endpoint : url, // HTTPClient predisposto per protocollo SOAP
targetNamespace : 'http://www.webserviceX.NET/'
});
try {
wsclient.invoke('<FUNCTIONAME>', callparams, function(xmlDoc) {
var results = xmlDoc.documentElement.getElementsByTagName('<TAGNAME>');
if(results && results.length > 0) {
var result = results.item(0).firstChild.nodeValue;
var db = Ti.Database.open('dbname');
db.execute('INSERT INTO tablename (columnname) VALUES (?)', result);
db.close();
} else {
alert('Errore risultato');
}
});
} catch(e) {
alert('Errore connessione');
}
22. Dal frontespizio dell'autografo delle
“Invenzioni e Sinfonie” di J. S. Bach
• «Metodo efficace con cui si presenta in forma chiara agli
appassionati degli strumenti a tastiera e soprattutto a coloro che
sono desiderosi di apprendere, non soltanto (1) come si suona
correttamente a due voci, ma anche (2) come si può arrivare, man
mano che l'allievo progredisce, a far buon uso di tre voci obbligate
e ottenere così non soltanto delle buone invenzioni, ma poterle
pure bene eseguire e soprattutto acquistare l'arte del cantabile e il
gusto della composizione»
(Joh. Seb. Bach, Maestro di Cappella di Sua Altezza il Principe di
Anhalt-Köthen, Anno Christi 1723)
23. PERCHÈ PROPRIO TITANIUM (1)
Uno studio in Titanium
http://www.theindieshelter.com/2012/indieanapolis-2012-fabriziomarchesano/
24. PERCHÈ PROPRIO TITANIUM (2)
Halloween Stories for Music Lovers
https://play.google.com/store/apps/details?id=com.mozartfma.firstnameday