Android Studio vs Omnis Studio
(articolo di Francisco Ramos dell’Università Pontificia di Salamanca, 15 dicembre 2017)

In questo articolo voglio confrontare che cosa significa realizzare una semplice applicazione per un dispositivo Android, con due diversi strumenti per lo sviluppo di “App”: Android Studio (utilizzabile solo per la piattaforma android e gratuito) e Omnis Studio (multi-piattaforma e a pagamento).
Vogliamo che l’applicazione sia in grado di creare un database SQLite sul dispositivo, con tre campi: ID, Nome e Cognome e quattro pulsanti per l’iterazione con l’utente: “Cerca”, “Inserisci”, “Aggiorna” e “Elimina” , aspetto e codice necessari sono mostrati di seguito.

 

Aspetto con Android Studio

 

Aspetto con Omnis Studio

 

Per aggiungere gli elementi dell’interfaccia in entrambi i casi è stato necessario solo trascinare e rilasciare i componenti dalle rispettive palette, ma al momento della rotazione del dispositivo, “Android Studio” ha rchiesto una programmazione aggiuntiva, mentre con “Omnis Studio” non è stato necessaria alcuna programmazione.

Successivamente indicheremo il codice che è stato necessario scrivere in ciascuno dei due casi, iniziando con la creazione del DB SQLite sul dispositivo:


Creazione del BBDD in Android Studio

public class Estructura_BBDD {

private Estructura_BBDD() {}

        public static final String TABLE_NAME = “datosPersonales”;

public static final String NOMBRE_COLUMNA1 = “id”;

public static final String NOMBRE_COLUMNA2 = “nombre”;

public static final String NOMBRE_COLUMNA3 = “apellido”;

    public static final String SQL_CREATE_ENTRIES =

“CREATE TABLE ” + Estructura_BBDD.TABLE_NAME + ” (” +

Estructura_BBDD.NOMBRE_COLUMNA1 + ” INTEGER PRIMARY KEY,” +

Estructura_BBDD.NOMBRE_COLUMNA2 + ” TEXT,” +

Estructura_BBDD.NOMBRE_COLUMNA3 + ” TEXT)”;

public static final String SQL_DELETE_ENTRIES =

“DROP TABLE IF EXISTS ” + Estructura_BBDD.TABLE_NAME;

}

 

Creazione del BBDD in Omnis Studio

Do $cinst.$sqlobject.$execute(‘CREATE TABLE Empleados (Id INTEGER UNIQUE, Nombre TEXT, Apellido TEXT)’)

Returns IDcreatetable
Una nota prima di continuare con la programmazione associata a ciascun pulsante, nel caso di “Andriod Studio” è stato necessario aggiungere altro codice per mettere i pulsanti in modalità “OnClickListener”, qualcosa di totalmente inutile in “Omnis Studio”. Vediamo il codice associato ad ogni pulsante:


Pulsante “Cerca” in Android Studio

 botonBuscar.setOnClickListener(new View.OnClickListener() {

@Override   public void onClick(View v) {

SQLiteDatabase db = helper.getReadableDatabase();

       String

[] projection = {

               Estructura_BBDD.NOMBRE_COLUMNA2,

Estructura_BBDD.NOMBRE_COLUMNA3       };

       String selection = Estructura_BBDD.NOMBRE_COLUMNA1 + ” = ?”;

String[] selectionArgs = { textoId.getText().toString() };

       try {

Cursor c = db.query(

Estructura_BBDD.TABLE_NAME,

                   projection,

                   selection,

                   selectionArgs,

                   null,

                   null,

                   null                               

           );

c.moveToFirst();

textoNombre.setText(c.getString(0));

textoApellido.setText(c.getString(1));

}catch (Exception e){

Toast.makeText(getApplicationContext(),“No se han encontrado registros.”, Toast.LENGTH_LONG).show();

}

}

});

 

Pulsante “Cerca” in Omnis Studio

On evClick

Do lRow.$define(i_ID;i_Nombre;i_Apellido)

Do lRow.$assigncols(i_ID;i_Nombre;i_Apellido)

Do $cinst.$sqlobject.$selectfetch(“Select * from Empleados where Id = @[i_ID]”;lRow;kFetchAll)

Returns IDselectfetch


Pulsante “Inserisci” in Android Studio

botonInsertar.setOnClickListener(new View.OnClickListener() {

@Override    public void onClick(View v) {

        SQLiteDatabase db = helper.getWritableDatabase();

        ContentValues values = new ContentValues();

values.put(Estructura_BBDD.NOMBRE_COLUMNA1, textoId.getText().toString());

values.put(Estructura_BBDD.NOMBRE_COLUMNA2, textoNombre.getText().toString());

values.put(Estructura_BBDD.NOMBRE_COLUMNA3, textoApellido.getText().toString());

        long newRowId = db.insert(Estructura_BBDD.TABLE_NAME, null, values);

Toast.makeText(getApplicationContext(),“Insertado ID: ” + newRowId, Toast.LENGTH_LONG).show();

}

});

 

Pulsante “Inserisci” in Omnis Studio

On evClick

Do lRow.$define(i_ID;i_Nombre;i_Apellido)

Do lRow.$assigncols(i_ID;i_Nombre;i_Apellido)

Do $cinst.$sqlobject.$insert(“INSERT INTO Empleados (Id, Nombre, Apellido) VALUES (@[i_ID],@[i_Nombre],@[i_Apellido])”;lRow)

Returns IDinsert

 

Pulsante “Aggiorna” in Android Studio

botonActualizar.setOnClickListener(new View.OnClickListener() {

@Override    public void onClick(View v) {

SQLiteDatabase db = helper.getWritableDatabase();

        ContentValues values = new ContentValues();

values.put(Estructura_BBDD.NOMBRE_COLUMNA2, textoNombre.getText().toString());

values.put(Estructura_BBDD.NOMBRE_COLUMNA3, textoApellido.getText().toString());

        String selection = Estructura_BBDD.NOMBRE_COLUMNA1 + ” LIKE ?”;

String[] selectionArgs = { textoId.getText().toString() };

int count = db.update(

Estructura_BBDD.TABLE_NAME,

values,

selection,

selectionArgs);

Toast.makeText(getApplicationContext(),“Registro actualizado.”, Toast.LENGTH_LONG).show();

}

});

 

Pulsante “Aggiorna” in Omnis Studio

On evClick

Do lRow.$define(i_ID;i_Nombre;i_Apellido)

Do lRow.$assigncols(i_ID;i_Nombre;i_Apellido)

Do $cinst.$sqlobject.$update(“UPDATE Empleados SET Nombre=@[i_Nombre], Apellido=@[i_Apellido] where Id = @[i_ID]”;lRow;lRow)

Returns IDupdate


Pulsante “Elimina” in Android Studio

botonBorrar.setOnClickListener(new View.OnClickListener() {

@Override    public void onClick(View v) {

SQLiteDatabase db = helper.getWritableDatabase();

        String selection = Estructura_BBDD.NOMBRE_COLUMNA1 + ” LIKE ?”;

        String[] selectionArgs = { textoId.getText().toString() };

        db.delete(Estructura_BBDD.TABLE_NAME, selection, selectionArgs);

Toast.makeText(getApplicationContext(),“Registro borrado.”, Toast.LENGTH_LONG).show();

textoId.setText(“”);

textoNombre.setText(“”);

textoApellido.setText(“”);

}

});

 

Pulsante “Elimina” in Omnis Studio

On evClick

Do lRow.$define(i_ID;i_Nombre;i_Apellido)

Do lRow.$assigncols(i_ID;i_Nombre;i_Apellido)

Do $cinst.$sqlobject.$delete(“DELETE FROM Empleados WHERE Id = @[i_ID]”;lRow)

Returns IDdelete

Si noti che nel codice Android ho deliberatamente evitato di incorporare il codice necessario per gestire le eccezioni, tranne nel caso del pulsante “Cerca” in cui viene utilizzato un “try-catch”, per controllare il fatto che il record cercato potrebbe non essere trovato . Omnis definisce un metodo per trattare le eccezioni chiamate “$ sqldone”, mostriamo di seguito un esempio di utilizzo:

;  Si esegue ogni volta che finisce una operazione SQL (asíncrona)

;  Abbandona il método con il messaggio di errore, se si produce.

Do $cinst.$sqlobject.$getlasterrortext() Returns lErr

If lErr<>”OK”

Calculate i_ID as 0

Calculate i_Nombre as ”

Calculate i_Apellido as ”

Do $cinst.$showmessage(lErr;”Errore”)

Quit method

End If

 

;  Si esegue uno o un’altro proceso secondo il risultato

Switch pID

Case IDselecttables

If pResult.$linecount=0

Do $cinst.$creaTabla()     ;; Se non existe si crea la tabella

End If

 

Case IDselectfetch

Calculate lRows as pResult.$linecount

If lRows=0

Calculate i_ID as 0

Calculate i_Nombre as ”

Calculate i_Apellido as ”

Do $cinst.$showmessage(“No existe el ID”;”Risposta”)

Quit method

End If

Calculate i_Nombre as pResult.C2

Calculate i_Apellido as pResult.C3

 

Case IDcreatetable

Do $cinst.$showmessage(“Tabla creada”;” Risposta”)

 

Case IDinsert

Do $cinst.$showmessage(“Inserción realizada”;” Risposta”)

 

Case IDdelete

Calculate i_ID as 0

Calculate i_Nombre as ”

Calculate i_Apellido as ”

Do $cinst.$showmessage(“Entrada borrada”;” Risposta”)

 

Case IDupdate

Do $cinst.$showmessage(“Actualización realizada”;” Risposta”)

 

Default

Calculate i_ID as 0

Calculate i_Nombre as ”

Calculate i_Apellido as ”

Do $cinst.$showmessage(“Errore non aspettato”)

End Switch

 

A volte i programmatori e le aziende dedicate allo sviluppo e alla manutenzione del software ci chiedono perché pagare uno strumento, quando ce n’è un altro gratuito? Posso dire con sicurezza che spesso ciò che è “economico” risulta poi costoso. Omnis Studio consente lo sviluppo di applicazioni per dispositivi mobili (Android, iOS e Windows), applicazioni desktop (MacOS, Windows, Linux) o applicazioni Web, senza la necessità di utilizzare più strumenti oltre Omnis Studio stesso. L’esempio di efficacia che abbiamo esposto, confronta uno strumento che consente solo lo sviluppo per dispositivi Android, quindi il codice risultante non può essere eseguito in (per esempio) un dispositivo iOS, con il codice di Omnis che invece può essere senza alcuna dmodifica, su dispositivi iOS o Windows 10.

Giudicate voi stessi se in fquesto caso “economico” è costoso, ho lavorato con Omnis Studio per circa 20 anni, un periodo in cui le tecnologie hanno subito molti e diversi cambiamenti che hanno fatto apparire e scomparire linguaggi di programmazione e piattaforme, mentre Omnis Studio ha saputo adattarsi ai tempi con grande cura e lungimiranza.

La programmazione con Omnis Studio fa sì che mi piaccia il lavoro che faccio.