COMPONENTI ARCHIVIAZIONE (Storage Components)

Diversi sono i metodi di memorizzazione in un’app:

  • quando viene salvato un valore provvisoriamente (ad esempio, quando la scelta GET di una ListPicker  viene scritta nella proprietà testo di una Label);

  • all’interno di un Evento. Ad esempio nell’evento Afterchoosing del Notifier la variabile Choose è utilizzabile solo nel proprio blocco;

  • creando una variabile e assegnandogli un valore.
Purtroppo, questi metodi non sono persistenti e al riavvio dell’app, i dati saranno spariti. A nostro soccorso arrivano i componenti di archivazione che salvano permanentemente nel dispositivo. NB: nel gergo informatico la sigla DB sta per DataBase, cioè base di dati.
  1. Data File
  2. File
  3. Tiny DB
  4. Tiny Web DB
  5. Cloud DB
  6. Firebase

Mentre File e TinyDB archiviano i dati solo sul dispositivo che esegue l’app, un componente che si poggia sul web (Tiny Web DB, CloudD o Firebase) è condiviso tra gli utenti che eseguono la stessa app (quindi su più dispositivi), perché archivia i dati online. L’accesso ai dati web è asincrono, il che significa che l’archiviazione e il recupero dei dati potrebbero non avvenire immediatamente.

Annotazione importante sul Componente Firebase

In AI2 il componente FirebaseDB del gruppo Sperimentale, dal gennaio del 2021 non verrà più supportato da Google per AppInventor della MIT (ispiratrice e sovvenzionatrice del progetto APP INVENTOR).
Precisazione: Firebase viene utilizzato ugualmente con soddisfazione da migliaia di utenti AI2 (anche THUNKABLE), ma evidentemente la Google non vuole più spendere risorse per seguire il componente su AI2. CloudDB è basato su FirebaseDB con tutti gli stessi blocchi ma è ospitato sui server della MIT.
“Quindi, nel momento in cui scriviamo (Dicembre 2020 n.d.r.) solo tre componenti di archiviazione App Inventor 2, hanno il beneplacito della Google: CloudDb, File e TinyDB. (Siccome TinyWeDB viene utilizzato su un server pubblico della MIT, è stato scartato da questo elenco perchè non soddisfa nessun metodo di sicurezza e viene utilizzato solo a scopo scolastico).”

Leggi le differenze tra FirebaseDB e CloudDB.

Differenze
Se KODU, oltre a File, TinyDB e TinyWeDB ha altri tre componenti Cloudinary, Foglio elettronico e SQLite, THUNX ne esce fuori come un campione assoluto, avendo la possibilità di collegamento con piattaforme del calibro di Firebase, Airtable, WEB API e Oasis.

Sistema di archiviazione Android

All’articolo Nozioni di base sul sistema di archiviazione Android , trovate una dettagliata spiegazioni delle Directory e dei relativi percorsi nei dispositivi Android (nuovi e vecchi).

Consiglio di leggerlo prima di addentrarvi nella spiegazione dei singoli componenti.

Contenuti APP INVENTOR 2:

Contenuti KODU:

  • Cloudinary
  • File
  • Spreadsheet
  • SQLite

Contenuti THUNX:

PREMESSA

  1. Local storage (archiviazione locale) – Solo in interfaccia Snap to place
  2. Local DB (DataBase tabellare locale) – In interfacce Snap to place e Drag and drop
  3. Realtime DB by Firebase – Solo in interfaccia Snap to place
  4. Media DB by Cloudinary – Solo in interfaccia Snap to place
  5. Web API – In interfacce Snap to place e Drag and drop (nei Blocchi)
  6. File Picker – Solo in interfaccia Snap to place

DATASOURCE

  1. Airtable – In interfacce Snap to place e Drag and drop
  2. Webflow – In interfacce Snap to place e Drag and drop
  3. Google Sheets – In interfacce Snap to place e Drag and drop

COMPONENTI NON PIU’ UTILIZZATI

 

App Inventor 2 Kodular ThunkableX
 
Fig.: Le tre liste dei componenti

CloudDB

Il CloudDB è un componente non visibile che consente di archiviare i dati (di tipo Testo e Immagini .JPG e .PNG) su un server di database connesso a Internet (utilizzando il software Redis https://redis.io/). Ciò consente agli utenti della tua app di condividere i dati tra loro. Per impostazione predefinita, i dati verranno archiviati in un server gestito dal MIT, tuttavia è possibile configurare ed eseguire il proprio server. Impostare la proprietà RedisServer e la proprietà RedisPort per accedere al proprio server. Se vuoi ospitare un DB Redis sul tuo server leggi qui.
Redis è un popolare database NoSQL di tipo key/value noto per la sua efficienza e versatilità. È open-source, ottimizzato per le prestazioni in-memory, ma con opzioni di salvataggio su disco. Gestisce diversi tipi di dati, supporta scadenze per le chiavi, transazioni e configurazioni in cluster. Redis utilizza scripting in LUA per l’interazione ed offre API per vari linguaggi di programmazione. È ideale per scopi come la memorizzazione temporanea in cache, il supporto delle sessioni utente e lo scambio di messaggi con identificativi basati su chiavi. Tuttavia, può essere utilizzato come un database generico per diverse applicazioni, con le chiavi e i dati che collegano le informazioni nella rete.

Proprietà

ProjectID

text read-only Ottiene il ProjectID per questo progetto CloudDB.

RedisPort

number  read-only La porta del server Redis da usare. Il valore predefinito è 6381

RedisServer

text read-only Il server Redis da utilizzare per archiviare i dati. Un’impostazione di “DEFAULT” indica che verrà utilizzato il server MIT.

Gettone Token

text designer-only Questo campo contiene il token di autenticazione utilizzato per accedere al server Redis supportato. Per il server “DEFAULT”, non modificare questo valore, il sistema lo riempirà per te. Un amministratore di sistema può anche fornire un valore speciale all’utente che può essere utilizzato per condividere dati tra più progetti di più persone. Se si utilizza il proprio server Redis, impostare una password nella configurazione del server e inserirla qui.

UseSSL

boolean designer-only Impostare su true per utilizzare SSL per comunicare con il server CloudDB / Redis. Questo dovrebbe essere impostato su True per il server “DEFAULT”.

Eventi

CloudDBError ( text message)

Indica che si è verificato un errore durante la comunicazione con il server Redis CloudDB.

DataChanged ( text tag , any value)

Indica che i dati nel progetto CloudDB sono cambiati. Lancia un evento con quel tag che è stato aggiornato e value che ora ha.

FirstRemoved ( any value)

Evento attivato dalla Funzione RemoveFirstFromList. L’argomento value è l’oggetto che è stato il primo nell’elenco e che ora è stato rimosso.

GotValue ( text tag , any value)

Indica che una richiesta GetValue è riuscita.

TagList ( valore )

Evento attivato quando abbiamo ricevuto l’elenco di tag noti. Esegui in risposta a una chiamata alla funzione GetTagList.

Metodi

AppendValueToList ( text tag,any itemToAdd )

Aggiungi atomicamente un valore alla fine di un elenco. Se due dispositivi utilizzano questa funzione contemporaneamente, entrambi verranno aggiunti e non verranno persi dati.

ClearTag ( text tag )

Rimuovi il tag da CloudDB.

CloudConnected ()

Restituisce true se siamo in rete e probabilmente saremo in grado di connetterci al server CloudDB.

GetTagList ()

Chiede al CloudDB di recuperare tutti i tag appartenenti a questo progetto. L’elenco risultante viene restituito nell’evento TagList.

GetValue ( text tag, any value valueIfTagNotThere )

GetValue chiede al CloudDB di ottenere il valore memorizzato sotto il tag specificato. Passerà il risultato al dato GotValue.

RemoveFirstFromList ( text tag )

Ottieni il primo elemento di un elenco e rimuovilo atomicamente. Se due dispositivi utilizzano questa funzione contemporaneamente, uno otterrà il primo elemento e l’altro otterrà il secondo elemento, oppure un errore se non è disponibile alcun elemento. Quando l’elemento è disponibile, l’evento FirstRemoved verrà attivato.

StoreValue ( text tag , anyvalue valueToStore )

Chiede al CloudDB di conservare il dato value sotto il dato tag.

Data File

Il componente DataFile è un componente non visibile che è in grado di leggere i file, analizzarne il contenuto da CSV/JSON per generare righe, colonne e nomi di colonna, che vengono quindi archiviati internamente. Queste proprietà possono quindi essere recuperate e utilizzate, ad esempio, dai componenti dei dati del grafico.

Proprietà

Nomecolonnalist read-only, blocks-only

Recupera i nomi delle colonne del file di origine attualmente caricato. Per i file CSV, questo restituirà un elenco di voci nella prima riga. Per i file JSON, questo restituirà un elenco di chiavi nell’oggetto JSON.

Colonnelist read-only, blocks-only

Recupera un elenco di colonne del file di origine attualmente caricato.

DefaultScopescope write-only, designer-only

(App; Asset; Cache; Legacy; Private; Shared)

Specifica l’ambito predefinito per i file a cui si accede utilizzando il componente File. L’ambito dell’app dovrebbe funzionare per la maggior parte delle app. La modalità legacy può essere usata per le app che precedono i vincoli più recenti in Android sull’accesso ai file dell’app.

Righelist read-only, blocks-only

Recupera un elenco di righe del file di origine attualmente caricato.

File sorgentetext write-only, designer-only

Imposta il file di origine da cui analizzare i dati, quindi analizza il file in modo asincrono. I risultati vengono archiviati nelle proprietà Columns, Rows e ColumnNames. La formattazione prevista del file è il formato CSV o JSON.

Eventi

Nessuno

Metodi

LeggiFiletext(NomeFile)

Indica il file di origine da cui caricare i dati. Il formato previsto del contenuto del file è CSV o JSON. Prefissare il filename con / per leggere da un file specifico sulla scheda SD (ad esempio, /myFile.txt leggerà il file /sdcard/myFile.txt). Per leggere le risorse impacchettate con un’applicazione (funziona anche per Companion) avvia il filename con // (due barre). Se un filename non inizia con una barra, verrà letto dalla memoria privata dell’applicazione (per le app in pacchetto) e da /sdcard/AppInventor/data per il Companion.

File

Componente non visibile per l’archiviazione e il recupero di file. Utilizzare questo componente per scrivere o leggere file sul dispositivo. Il comportamento predefinito è scrivere i file nella directory dei dati privati ​​associata all’app. Companion scrive i file in /sdcard/AppInventor/data per semplificare il debug. Se il percorso del file inizia con una barra ( /), il file viene creato in relazione a /sdcard. Ad esempio, scrivendo un file in /myFile.txt cui scriveremo il file /sdcard/myFile.txt.

Componente non visibile per l’archiviazione e il recupero di file. Utilizzare questo componente per scrivere o leggere file sul dispositivo.

La posizione esatta in cui vengono inseriti i file esterni è una funzione del valore della proprietà Scope, se l’app è in esecuzione nel Companion o è compilata e su quale versione di Android è in esecuzione l’app.

NB: Scope in italiano può essere tradotto come SCOPO ma anche, e questo è il caso, in AMBITO, PORTATA. In programmazione è molto conosciuta la proprietà scope of variables, si riferisce alla visibilità e alla durata delle variabili. In altre parole, quali parti del tuo programma possono vederlo o usarlo. Normalmente sono riconosciute come LOCALI o GLOBALI.

Poiché le versioni più recenti di Android richiedono che i file vengano archiviati in directory specifiche dell’app, DefaultScope è impostato su App. Se stai utilizzando una versione precedente di Android e hai bisogno di accedere all’archivio pubblico legacy, modifica la proprietà DefaultScope in Legacy. Puoi anche cambiare l’ambito usando i blocchi.

Di seguito descriviamo brevemente ciascun tipo di ambito: (Per capire le versioni di Android, leggi la pagina Differenza tra versioni Android e API)

  • App: i file verranno letti e scritti nella memoria specifica dell’app su Android 2.2 e versioni successive. Nelle versioni precedenti di Android, i file verranno scritti nell’archivio legacy.
  • Asset (Risorsa hardware): i file verranno letti dalle risorse dell’app. È un errore tentare di scrivere sugli asset dell’app poiché sono contenuti nell’archiviazione di sola lettura.
  • Cache: i file verranno letti e scritti nella directory della cache dell’app. La cache è utile per i file temporanei che possono essere ricreati in quanto consente all’utente di cancellare i file temporanei per recuperare spazio di archiviazione.
  • Legacy (Obsoleto): i file verranno letti e scritti nel file system utilizzando le regole di App Inventor prima del rilascio nb187. Cioè, i nomi di file che iniziano con un singolo / verranno letti e scritti nella radice della directory di archiviazione esterna, ad esempio /sdcard/. La funzionalità legacy non funzionerà su Android 11 o versioni successive.
  • Private (Privato): i file verranno letti e scritti nella directory privata dell’app. Usa questo ambito per archiviare informazioni che non dovrebbero essere visibili ad altre applicazioni, come le app di gestione dei file.
  • Shared (Condiviso): i file verranno letti e scritti nelle directory multimediali condivise del dispositivo, ad esempio Immagini.

All’articolo Nozioni di base sul sistema di archiviazione Android troverai le Directory e i percorsi dei diversi ambiti.

Nota 1: in modalità Legacy, i nomi dei file possono assumere una delle tre forme seguenti:

  • I file privati ​​non hanno iniziali / e vengono scritti nell’archivio privato dell’app (ad es. ‘file.txt’)
  • I file esterni hanno una singola / iniziale e vengono scritti nella memoria pubblica (ad es. ‘/file.txt’)
  • Le risorse dell’app in bundle hanno due // iniziali e possono essere solo lette (ad es. ‘//file.txt’)

Nota 2: in tutti gli ambiti, un nome di file che inizia con due barre (//) verrà interpretato come un nome di risorsa.

Proprietà

DefaultScope scope write-only, designer-only

Specifica l’ambito predefinito per i file a cui si accede utilizzando il componente File. L’ambito dell’app dovrebbe funzionare per la maggior parte delle app. La modalità legacy può essere utilizzata per le app che precedono i nuovi vincoli in Android (del 2021) sull’accesso ai file dell’app.

ReadPermissionboolean write-only, designer-only

Una proprietà solo per la finestra di progettazione (Designer) che può essere usata per abilitare l’accesso in lettura all’archiviazione di file al di fuori delle directory specifiche dell’app.

Scope scope blocks-only

Indica l’ambito corrente per operazioni come ReadFrom e SaveFile.

WritePermissionboolean write-only, designer-only

Una proprietà solo designer che può essere usata per abilitare l’accesso in scrittura all’archiviazione di file al di fuori delle directory specifiche dell’app.

Eventi

AfterFileSaved ( text fileName )

Evento che indica che il contenuto del file è stato scritto.

GotText ( text text )

Evento che indica che i contenuti del file sono stati letti.

Metodi

AppendToFile ( text text , text fileName )

Aggiunge il testo alla fine di un file. Crea il file se non esiste già. Per informazioni, vedi il metodo SaveFile, su dove sono scritti i file. In caso di successo, l’evento AfterFileSaved si attuerà.

CopyFile(fromScope,fromFileName,toScope,toFileName)

Copia il contenuto dal primo file al secondo file.

Delete ( text fileName )

Elimina un file dalla memoria. Anteporre al filename una / per eliminare un file specifico nella scheda SD (ad esempio, /myFile.txt eliminerà il file /sdcard/myFile.txt). Se il filename non inizia con un /, il file che si trova nella memoria privata del programma verrà eliminato. Anteporre al  filename una // è un errore, perché non è possibile eliminare i file delle risorse.

Exists(scope,path)

Verifica se il percorso esiste nell’ambito specificato.

IsDirectory(scope,path)

Verifica se il percorso denominato nell’ambito specificato è una directory.

ListDirectory(scope,directoryName)

Ottieni un elenco di file e directory nella directory data.

MakeDirectory(scope,directoryName)

Crea una nuova directory per l’archiviazione dei file. La semantica di questo metodo è tale che restituirà true se la directory esiste al suo completamento. Ciò può significare che la directory esisteva già prima della chiamata.

MakeFullPath(scope,path)

Converte l’ambito e il percorso in una singola stringa per altri componenti.

MoveFile(fromScope,fromFileName,toScope,toFileName)

Sposta un file da una posizione all’altra.

ReadFrom ( text fileName )

Legge il testo da un file in memoria. Anteporre al filename una / per leggere da un file specifico sulla scheda SD (ad esempio, /myFile.txt leggerà il file /sdcard/myFile.txt). Per leggere le risorse impacchettate con un’applicazione (funziona anche per il Companion), iniziare il fileName con // (due barre). Se un filename non inizia con una barra, verrà letto dalla memoria privata dell’applicazione (per le app in pacchetto .apk o Bundle .aab) e da /sdcard/AppInventor/data per il Companion.

RemoveDirectory(scope,directoryName,recursive)

Rimuovere una directory dal file system. Se recursive è True, tutto viene rimosso. Se invece è False, viene rimossa solo la directory e solo se è vuota.

SaveFile ( text text , text fileName )

Salva il testo in un file. Se filename inizia con una barra (/) il file viene scritto sulla sdcard (ad esempio, scrivendo su /myFile.txt scriverà il file /sdcard/myFile.txt). Se fileName non inizia con una barra, verrà scritto nella directory dei dati privati ​​del programma dove non sarà accessibile ad altri programmi sul telefono. Esiste un’eccezione speciale per AI Companion in cui questi file vengono scritti su /sdcard/AppInventor/data per facilitare il debug. Si noti che questo blocco sovrascriverà un file se esiste già. Se si desidera aggiungere contenuto a un file esistente, utilizzare il metodo AppendToFile.

Spreadsheet

Finalmente APP INVENTOR si collega ai Fogli di Google (Google Sheet).

Come sapete GOOGLE DOCS è una suite di programmi emuli di Microsoft Office che girano su browser. Quindi basta crearsi una email GMAIL e avere a disposizione il pacchetto di programmi Google (elaboratore di testi, fogli elettronici …).

Il foglio di lavoro è un componente non visibile per l’archiviazione e la ricezione di dati da un documento di Fogli Google utilizzando l’API di Fogli Google.

Per utilizzare questo componente, devi prima avere un account sviluppatore Google

(Guarda questo video esemplificativo):

 

Quindi, devi

  1. creare un nuovo progetto con quell’account sviluppatore Google,
  2. abilitare l’API di Fogli Google su quel progetto e infine
  3. creare un account di servizio per l’API di Sheets.

I numeri di riga e colonna sono indicizzati a 1.

Istruzioni

Le istruzioni su come creare l’account di servizio, nonché su dove trovare altre informazioni rilevanti per l’utilizzo del componente Fogli Google, sono disponibili qui.

Le istruzioni del link precedente che puntano alla pagina di AI2, ho dovuto barrarle perchè non più aggiornate con gli ultimi cambiamenti (28/1/23).

Per aggiornarvi sulle ultime novità, ho creato due video sul mio canale di Youtube (video crea account sviluppatore e
video su come aggiungere i metodi e gli eventi dalla pagina blocchi) con tutte le necessarie spiegazioni.

Comunque, il concetto importante per destreggiarsi con i blocchi del componente Spreadsheet sono:

  • I Metodi si interfacciano col foglio di lavoro di Google (Google Sheet), perciò qui sono più importanti degli eventi, che sono solo dei callback (richiamate dalle richieste dei metodi).

Proprietà

Nome dell’applicazione text designer-only

Il nome della tua applicazione, utilizzato quando si effettuano chiamate API.

CredentialsJson text

Il file JSON con le credenziali per l’account di servizio

SpreadsheetID text

L’ID del file di Fogli Google che desideri modificare. Puoi trovare l’ID foglio di lavoro nell’URL del file Fogli Google.

Eventi

ErrorOccurred text(errorMessage)

Attivato ogni volta che una chiamata API rileva un errore. I dettagli sull’errore sono in errorMessage.

FinishedAddCol number(columnNumber)

L’evento di callback per il blocco Metodo AddCol, chiamato dopo che i valori della tabella sono stati aggiornati. Ciò restituisce inoltre il numero di colonna per la nuova colonna.

FinishedAddRow number(rowNumber)

L’evento di callback per il blocco numberAddRow, chiamato dopo che i valori nella tabella sono stati aggiornati. Ciò restituisce inoltre il numero di riga per la nuova riga.

FinishedClearRange()

L’evento di callback per il blocco Metodo ClearRange, chiamato dopo che i valori nella tabella sono stati aggiornati.

FinishedRemoveCol()

L’evento di callback per il blocco Metodo RemoveCol, chiamato dopo che i valori della tabella sono stati aggiornati.

FinishedRemoveRow()

L’evento di callback per il blocco Metodo RemoveRow, chiamato dopo che i valori nella tabella sono stati aggiornati.

FinishedWriteCell()

L’evento di callback per il blocco Metodo WriteCell, chiamato dopo che i valori della tabella sono stati aggiornati.

FinishedWriteCol()

L’evento di callback per il blocco Metodo WriteCol, chiamato dopo che i valori della tabella sono stati aggiornati.

FinishedWriteRange()

L’evento di callback per il blocco Metodo WriteRange, chiamato dopo che i valori della tabella sono stati aggiornati.

FinishedWriteRow()

L’evento di callback per il blocco Metodo WriteRow, chiamato dopo che i valori della tabella sono stati aggiornati.

GotCellData text(cellData)

L’evento di callback per il blocco Metodo ReadCell. cellData è il valore di testo nella cella.

GotColData(list colDataList)

L’evento di callback per il blocco Metodo ReadCol. colDataList è un elenco di valori di cella di testo in ordine di numero di riga crescente.

GotFilterResult(list return_rows,return_data)

L’evento callbeck per il blocco Metodo ReadWithQuery. La risposta è un elenco di righe, in cui ogni riga soddisfa la query.

GotRangeData(list rangeData)

L’evento di callback per il blocco Metodo ReadRange. Il rangeData è un elenco di righe, in cui le dimensioni sono le stesse del rangeReference.

GotRowData(list rowDataList)

L’evento di callback per il blocco Metodo ReadRow. RowDataList è un elenco di valori di cella di testo in ordine crescente di numero di colonna.

GotSheetData(list sheetData)

L’evento di callback per il blocco Metodo ReadSheet. sheetData è un elenco di righe.

Metodi

In questo capitolo, trovate questa prima immagine riassuntiva di tutti i metodi ed ogni sottocapitolo separato dagli altri da immagini di abbinamento metodo/evento.

ADD

AddCol(text sheetname,list data)

Dato un elenco di valori come dati, aggiunge i valori alla successiva colonna vuota del foglio. Inizierà sempre dalla riga superiore e continuerà verso il basso. Una volta completato, attiva l’evento di callback FinishedAddCol.

Addrow(text sheetName,list data)

Dato un elenco di valori come dati, aggiunge i valori alla riga vuota successiva del foglio. Inizierà sempre dalla colonna più a sinistra e continuerà a destra. Una volta completato, attiva l’evento di callback FinishedAddRow. Ciò restituisce inoltre il numero di riga per la nuova riga.

REFERENCE

 

Da un inserimento del tipo Stile di riferimento R1C1 ottengo dei risultati di testo nel formato Colonne in Lettere e Righe in Numeri.

I blocchi originali del metodo Reference non hanno le spine dei numeri, nell’immagine precedente li ho inseriti a livello esemplificativo. Quindi, dagli eventi in figura otterrò come risultato i testi:

  • B1
  • B1:D3

text GetCellReference( numberrow, numbercol)

Converte la rappresentazione intera di righe e colonne in notazione A1 utilizzata in Fogli Google per una singola cella. Ad esempio, la riga 1 e la colonna 2 corrispondono alla stringa ‘B1’.

text GetRangeReference( numberrow1, numbercol1, numberrow2, numbercol2)

Converte la rappresentazione intera di righe e colonne per gli angoli dell’intervallo in notazione A1 utilizzata in Fogli Google. Ad esempio, selezionando l’intervallo dalla riga 1, col 2 alla riga 3, col 4 corrisponde alla stringa “B1:D3”.

READ

ReadCell( textsheetName, textcellReference)

Nella pagina con il sheetName fornito, legge la cella in corrispondenza del dato cellReference e attiva l’evento di callback GotCellData. Il cellReference può essere un blocco di testo con notazione A1 o il risultato del blocco getCellReference.

ReadCol( textsheetName, numbercolNumber)

Nella pagina con il sheetName fornito, legge la colonna in corrispondenza del colNumber specificato e attiva l’evento di callback GotColData.

ReadRange( textsheetName, textrangeReference)

Nella pagina con il sheetName fornito, legge le celle nel rangeReference specificato e attiva l’evento di callback GotRangeData. Il rangeReference può essere un blocco di testo con notazione A1 o il risultato del blocco getRangeReference.

ReadRow( textsheetName, numberRowNumber)

Nella pagina con il sheetName fornito, legge la riga in corrispondenza del rowNumber specificato e attiva l’evento di callback GotRowData.

ReadSheet( textsheetName)

Legge l’intero documento di Fogli Google e attiva l’evento di callback GotSheetData.

READ WITH FILTER

 

ReadWithExactFilter( textsheetName, numbercolID, textvalue)

Filtra un foglio Google per le righe in cui il numero di colonna specificato corrisponde al valore fornito.

ReadWithPartialFilter( textsheetName, numbercolID, textvalue)

Filtra un foglio Google per le righe in cui il numero di colonna specificato contiene la stringa del valore fornita.

CLEAR & REMOVE

ClearRange(text sheetName, text rangeReference)

Svuota le celle nell’intervallo specificato. Una volta completato, questo blocco attiva l’evento di callback FinishedClearRange.

 

RemoveCol( textsheetName, numbercolNumber)

Elimina la colonna con il numero di colonna specificato dalla tabella. Questo non cancella la colonna, ma la rimuove completamente. L’id della griglia del foglio si trova alla fine dell’URL del documento Fogli Google, subito dopo ‘gid=’. Una volta completato, attiva l’evento di callback FinishedRemoveCol.

RemoveRow( textsheetName, numbercolNumber)

Elimina la riga con il numero di riga specificato (indicizzato a 1) dalla tabella. Questo non cancella la riga, ma la rimuove completamente. L’id della griglia del foglio si trova alla fine dell’URL del documento Fogli Google, subito dopo ‘gid=’. Una volta completato, attiva l’evento di callback FinishedRemoveRow.

WRITE

WriteCell( textsheetName, textCellReference,anydata)

Dato un testo o un numero come dati, scrive il valore nella cella. Sovrascriverà tutti i dati esistenti nella cella con quello fornito. Una volta completato, attiva l’evento di callback FinishedWriteCell.

WriteCol( textsheetName, numbercolNumber,list data)

Dato un elenco di valori come dati, scrive i valori nella colonna con il numero di colonna specificato, sovrascrivendo i valori esistenti dall’alto verso il basso. (Nota: non cancellerà l’intera colonna.) Una volta completato, attiva l’evento di callback FinishedWriteCol.

WriteRange( textsheetName, textRangeReference,list data)

Dato l’elenco di elenchi come dati, scrive i valori nelle celle nell’intervallo. Il numero di righe e colonne nell’intervallo deve corrispondere alle dimensioni dei dati. Questo metodo sovrascriverà i dati esistenti nell’intervallo. Una volta completato, attiva l’evento di callback FinishedWriteRange.

WriteRow( textsheetName, numberRowNumber, listdata)

Dato un elenco di valori come dati, scrive i valori nella riga con il numero di riga specificato, sovrascrivendo i valori esistenti da sinistra a destra. (Nota: non cancellerà l’intera riga.) Una volta completato, attiva l’evento di callback FinishedWriteRow.

TinyDB

TinyDB è un componente non visibile che archivia dati di tipo testo e immagine.
Le app create con App Inventor vengono inizializzate ogni volta che vengono eseguite. Ciò significa che se un’app imposta il valore di una variabile e l’utente quindi esce dall’app, il valore di quella variabile non verrà ricordato alla successiva esecuzione dell’app.
Al contrario, TinyDB è un archivio di dati persistente. I dati memorizzati in a TinyDB saranno disponibili ogni volta che l’app viene eseguita. Un esempio potrebbe essere un gioco che salva il punteggio più alto e lo recupera ogni volta che si gioca.
Gli elementi di dati sono costituiti da tag e valori. Per memorizzare un elemento dati, è necessario specificare il tag in cui deve essere archiviato. Il tag deve essere un blocco di testo, che dà un nome ai dati. Successivamente, è possibile recuperare i dati archiviati in un determinato tag.
Non è possibile utilizzare il TinyDB per trasferire i dati tra due diverse app sul telefono, anche se è possibile utilizzare il TinyDB per condividere i dati tra le diverse schermate di un’app multi-schermo.
Quando si sviluppano app utilizzando AI Companion, tutte le app che utilizzano tale Companion condivideranno le stesse TinyDB. Tale condivisione scompare una volta che le app sono state impacchettate e installate sul telefono. Durante lo sviluppo, dovresti fare attenzione a cancellare i dati dell’ app Companion ogni volta che inizi a lavorare su una nuova app.

Proprietà

Spazio dei nomi

text Spazio dei nomi per l’archiviazione dei dati.

Eventi

Nessuno

Metodi

Cancella tutto()

Cancella l’intero archivio dati.

ClearTag ( text tag )

Cancella la voce con il dato tag.

any GetTags ()

Restituisce un elenco di tutti i tag nell’archivio dati.

any GetValue (text tag ,any valueIfTagNotThere )

Recupera il valore memorizzato sotto il dato  tag. Se non è presente tale tag, quindi tornare valueIfTagNotThere.

StoreValue ( text tag , any valueToStore )

Archivia il dato valueToStore sotto il dato tag. La memoria persiste sul telefono al riavvio dell’app.

TinyWebDB

Fig: Come funziona la trasmissione coi componenti web

Il componente TinyWebDB comunica con un servizio Web per archiviare e recuperare informazioni di tipo testuale. Sebbene questo componente sia utilizzabile, è molto limitato e inteso principalmente come dimostrazione per le persone che desiderano creare i propri componenti che parlano al Web. Il servizio Web è disponibile all’indirizzo (http://tinywebdb.appinventor.mit.edu). Il componente ha metodi per archiviare un valore sotto un tag e per recuperare il valore associato al tag. L’interpretazione del significato di “archivio” e “recupero” dipende dal servizio Web.

In questa implementazione, tutti i tag e i valori sono stringhe di testo. Questa restrizione potrebbe essere attenuata nelle versioni future.

Proprietà

ServiceURL

text Specifica l’URL del servizio Web. Il valore predefinito è il servizio demo in esecuzione su App Engine.

Eventi

GotValue ( text tagFromWebDB ,any valueFromWebDB )

Indica che una richiesta GetValue del server ha avuto esito positivo.

ValueStored ()

Evento che indica che una richiesta StoreValue del server è riuscita.

WebServiceError ( text messaggio )

Indica che la comunicazione con il servizio Web ha segnalato un errore.

Metodi

GetValue ( text tag)

GetValue chiede al servizio Web di ottenere il valore archiviato sotto il dato tag. Spetta al servizio Web cosa restituire se non esiste alcun valore memorizzato in tag. Questo componente accetta solo tutto ciò che viene restituito. L’evento GotValue verrà eseguito al completamento.

StoreValue ( text tag , any valueToStore )

Invia una richiesta al servizio Web per archiviare il dato valueToStore sotto il dato tag. L’evento ValueStored verrà eseguito al completamento.

Contenuti KODU:

Cloudinaryhttps://cloudinary.com è un sito che ci mette a disposizione 10MB per i nostri database. La multimedialità è il loro forte, infatti Coudinary semplifica la gestione dei media e migliora l’esperienza utente fornendo automaticamente immagini e video, migliorati e ottimizzati per ciascun utente. Consigliamo di creare un account specifico per questo servizio.

File Componente non visibile per la memorizzazione e il recupero dei file. Usa questo componente per scrivere o leggere file sul tuo dispositivo. Il comportamento predefinito è scrivere file nella directory dei dati privati associata alla tua app. Il Companion è un caso speciale per scrivere file in /sdcard/Makeroid/data per facilitare il debug. Se il percorso del file inizia con una barra (/), il file viene creato rispetto a /sdcard. Ad esempio, scrivere un file in /myFile.txt scriverà il file in /sdcard/myFile.txt.
Nel componente File di KODULAR sono anche compresi blocchi Eventi e Metodi per zippare e unzippare un file.

Fusiontables Control Servizio interrotto nel 2019. Alternative altrettanto utili, tra cui BigQuery, Cloud SQL, Maps Platform e Data Studio“.

Spreadsheet Un componente non visibile che fornisce l’accesso alla memoria del foglio di calcolo Airtable. https://airtable.com/ è il sito che ci permette di salvare dati nei loro server in maniera privata (bisogna entrare nel proprio account con una propria password). A questo link https://www.youtube.com/watch?v=2fVRne8drfQ&feature=emb_logo potete vedere tutte le caratteristiche e le fasi d’inserimento.

SQLite Un componente non visibile che accede al database SQLite dell’applicazione. Qui il link alla pagina italiana di wikipedia.

Contenuti THUNX DATA:

PREMESSA

  1. Local storage (archiviazione locale) – Solo in interfaccia Snap to place
  2. Local DB (DataBase locale tabellare) – In interfacce Snap to place e Drag and drop
  3. Realtime DB by Firebase – Solo in interfaccia Snap to place
  4. Media DB by Cloudinary – Solo in interfaccia Snap to place
  5. Web API – In interfacce Snap to place e Drag and drop (nei Blocchi)
  6. File Picker – Solo in interfaccia Snap to place

DATASOURCE

  1. Airtable – In interfacce Snap to place e Drag and drop
  2. Webflow – In interfacce Snap to place e Drag and drop
  3. Google Sheets – In interfacce Snap to place e Drag and drop

COMPONENTI NON PIU’ UTILIZZATI

PREMESSA:

A seguito dell’introduzione dell’interfaccia Drag and drop, THUNKABLE ha deciso di adeguare anche i componenti storage. Al momento attuale (maggio 2023) l’interfaccia standard Snap to place è ancora attiva, ma con la nuova D&D (ancora in Beta Test), il Local DB è sparito a beneficio del DATASOURCE e sono spariti anche: Realtime DB by Firebase, Media DB by Cloudinary , File Picker. Ti consiglio di leggere la pagina di THUNKABLE dove troverai una breve panoramica della piattaforma.

Local Storage

NB: Con l’arrivo della nuova interfaccia Drag and drop, ora dovresti usare le Stored variable, invece di aggiungere un componente Local Storage. Il funzionamento in background sarà lo stesso, ma si risparmieranno molti blocchi. Per lavorare con i dati tabellari nella vostra applicazione, utilizza il componente DB locale nella tua applicazione.

Come metodo di utilizzo e come blocchi , ricorda molto il TinyDB. Nel Design non ha proprietà, mentre nei Blocchi utilizza tre metodi:Save; Get, Remove. Come in TinyDB, bisogna dichiarare una chiave Key.

Local DB

Molte app richiedono una semplice tabella di dati per eseguire una serie di attività essenziali. Un modo per aggiungere questi dati è tramite un DB locale (Local DB). È simile al TinyDB ma con un’interfaccia a tabella, sicuramente più easy. Anche con questo componente non abbiamo proprietà nel design, ma abbiamo un link in alto a destra CLICK TO EDIT DATA TABLE che ci permette di inserire i dati e aggiungere righe e colonne.

Invece, ecco i sei blocchi: GETCELL ottieni celle; SETCELL imposta celle; NUMBEROFROWS numero di righe; GETCOLUMNS ottieni colonna; GETROW ottieni riga; ADDROW aggiungi riga.

Realtime DB by Firebase

Questa opzione di archiviazione è utile per qualsiasi cosa, dal salvataggio dei punteggi più alti del gioco al monitoraggio del credito di lavoro, fornito da Firebase. Bisogna crearsi un account Firebase e così si ha diritto a dello spazio privato sui server Google.

Sicuramente ti interessano i blocchi per accreditarsi a Firebase da App: https://www.appedia.it/componenti-social-social-components/#signinfirebase .

Airtable

https://airtable.com/ è il sito che ci permette di salvare dati nei loro server in maniera privata (bisogna entrare nel proprio account con una propria password). A questo link https://www.youtube.com/watch?v=2fVRne8drfQ&feature=emb_logo  potete vedere tutte le caratteristiche e le fasi d’inserimento. (qui le istruzioni complete).

Media DB by Cloudinary

 https://cloudinary.com  un altro sito che ci mette a disposizione 10MB per i nostri database. La multimedialità è il loro forte, infatti Coudinary semplifica la gestione dei media e migliora l’esperienza utente fornendo automaticamente immagini e video, migliorati e ottimizzati per ciascun utente. Consigliamo di creare un account specifico per questo servizio.

Il componente Media DB di Thunkable ti consente di inviare contenuti multimediali direttamente dalla tua app Thunkable a un account Cloudinary collegato.
NB: Se utilizzi Cloudinary DB predefinito di Thunkable, i tuoi file verranno eliminati dopo 90 giorni. Connetti il ​​tuo DB Cloudinary al tuo progetto Thunkable per proteggere i tuoi file multimediali.

Web API

Il componente WebAPI ti consente di connetterti rapidamente e facilmente a qualsiasi API di terze parti.

I grandi dati sono una parte essenziale di molte app create oggi e il componente Web API consente alle app di recuperare dati da qualsiasi servizio API (interfaccia di programmazione dell’applicazione) pubblico o privato sul Web. Per gli sviluppatori più avanzati che hanno accesso in scrittura a un’API privata, questo componente consente anche di caricare ed eliminare dati.
Per vedere quali API pubbliche sono disponibili, ti consigliamo questa lista TODD MOTTO

Per la maggior parte delle API pubbliche, probabilmente dovrai prima creare un account per ottenere la tua chiave API univoca. Questo di solito serve per evitare che le persone facciano troppe richieste o per addebitare agli sviluppatori quando superano determinati limiti gratuiti.

Per approfondimenti, leggi la pagina Funzionalità avanzate dell’app.

Nel Design le Proprietà sono:

Proprietà

Nei blocchi, le proprietà sono:

Metodi

File Picker

Il File Picker aprirà la libreria di file dell’utente finale e consentirà loro di selezionare un file. Il file può quindi essere utilizzato nell’app. Puoi consentire al tuo utente finale di caricare qualsiasi tipo di file o limitare la selezione in base al tipo di file, ad es. HTML, PDF, ecc.

Gli utenti finali potrebbero riscontrare ritardi o ritardi se la dimensione del file che si tenta di caricare è maggiore di 5 MB.

Metodi

Nessuna Proprietà, solo il metodo GETFILE:

Come argomento ANY TYPE OF, abbiamo le voci:

  • any type of
  • image
  • video
  • html
  • pdf.

DATASOURCE

Il Data source è una maniera per collegare alla propria App fogli di calcolo o Database esterni a cui siamo registrati. Basta andare in alto a sinistra del nostro Design e cliccare sul + della voce DATA SOURCES, si aprirà una finestra modale intitolata Create new DataSource from , da cui scegliere il componente che ci interessa:

Il primo componente tabellare è il Local DB , già esposto prima.

Webflow

 https://webflow.com/ Puoi collegare il tuo progetto Thunkable a un sito Webflow. Un sito si basa su una serie di raccolte (collections). Ogni collezione è un gruppo di elementi (items).
Quando colleghi il tuo sito Webflow al tuo progetto Thunkable, puoi scegliere una raccolta da questo sito nello stesso modo in cui puoi scegliere una tabella da un’origine dati locale.
Per iniziare, accedi a Impostazioni progetto dal dashboard o dal Designer di Webflow, fai clic sulla scheda Integrazioni e Genera una chiave API. Incolla questo token in Thunkable e fai clic sul pulsante Aggiorna per vedere il tuo sito Webflow elencato.Scegli il sito che desideri utilizzare come origine dati e fai clic su Crea.

Ora hai accesso alle raccolte e ai relativi elementi del sito Webflow selezionato. (qui le istruzioni complete)

GOOGLE SHEETS

: https://docs.thunkable.com/data-sources#google-sheets In Fogli di Google, l’intero documento è considerato l’origine dati. Per utilizzare un foglio Google come origine dati, la prima riga del foglio deve essere una riga di intestazione.
Il tuo foglio Google deve essere condivisibile per Thunkable per accedere ai suoi dati.
Per collegare un foglio Google, accedi e concedi al tuo progetto Thunkable l’autorizzazione ad accedere al tuo Google Drive. (qui le istruzioni complete)

Componenti non più utilizzati

Come è solito per i tecnici che aggiornano la documentazione, questo componenti è sparito dalla guida di THUNKABLEX. Ugualmente lascio la vecchia documentazione:

Smart Contract by Oasis Blockchain Wallet by Oasis

Oasis Labs www.oasislabs.com offre una piattaforma di cloud computing su blockchain costruita per privacy, sicurezza e prestazioni superiori. La Blockchain, viene intesa come database trasparente al quale tutti gli utenti possono partecipare a patto che, gli stessi, decidano di condividere con gli altri le proprie conoscenze e risorse informatiche (condivisione delle risorse hardware e dei dati), affinché la stessa catena possa funzionare in modo migliore, offrendo quindi dei vantaggi a tutti gli altri utenti e ottenendone come conseguenza dell’impegno messo a disposizione da parte dei membri che fanno parte della stessa catena.

Aggiornato al 30/01/2023
Aggiornato al 15/12/2023
Aggiornato al 22/05/2023

PDF Lista comparazione dei componenti di AI2 KODULAR THUNKABLEX agg.20210911

Vuoi avere più informazioni sul Coding visuale? Vai alla pagina dei Blocchi incorporati dove potrai imparare a scrivere il linguaggio di programmazione per App Inventor 2, Kodular e Thunkable X. Visita la pagina del Blog con le ultime notizie sulle le tre piattaforme. Nella pagina Documentazione troverai i collegamenti ai forum, il glossario, i link ai siti dei migliori programmatori, i download e tanti altri accessori.