12644
Commento:
|
10230
ready for #70
|
Le cancellazioni sono segnalate in questo modo. | Le aggiunte sono segnalate in questo modo. |
Linea 1: | Linea 1: |
## page was renamed from Fcm/Edizione/HowTo6 #acl GruppoAdmin:admin,read,write,revert GruppoEditori:read,write,revert GruppoFcm:read,write,revert -All:read -Known:read |
#acl GruppoAdmin:admin,read,write,revert GruppoOperatori:admin,read,write,revert GruppoEditori:read,write,revert GruppoFcm:read,write,revert palombo:admin,read,write,revert new.life:admin,read,write,revert paolettopn:admin,read,write,revert Known:read All:read |
Linea 4: | Linea 4: |
= Testo inglese = | |
Linea 5: | Linea 6: |
== HowTo6 == | LibreOffice Part 23: Base Form Enhancements with Macros |
Linea 7: | Linea 8: |
=== Traduzione italiana === HOW-TO Backup con Wubi scritto da Chris Binnie |
by Elmer Perry |
Linea 10: | Linea 10: |
Non abbiate timore fan della virtualizzazione, la serie di Luca riprenderà il prossimo mese. Come molte persone, anch'io negli anni ho utilizzato il mio pc desktop con Ubuntu per svariati compiti. Per lavoro mi occupo anche di gestire alcuni Server Ubuntu e ho scoperto che non c'è nulla di più semplice che provare nuove applicazioni o configurazioni sul mio desktop prima di eseguire le stesse modifiche sui server - per evitare incidenti di percorso. Oltre a ciò che attiene il lavoro, sono un fan di Compiz e qualche volta spingo la mia scheda grafica al limite per vedere se riesce a supportare i più recenti effetti grafici messi a disposizione da Gnome, come effetto secondario spesso mi ritrovo con un desktop inutilizzabile. L'ultima volta è capitato con una configurazione un po' ardita di Grub2 che ha reso il mio sistema non più avviabile. Sebbene Apt sia molto efficace nel rimuovere ogni applicazione non più necessaria (mi riferisco a: apt-get autoremove), ogni tanto mi capita di installare di proposito una nuova configurazione con l'intenzione di manomettere quella esistente, trasformando di fatto il mio desktop in un server di sviluppo. |
For the previous four parts of this series, we have slowly built a database document using LibreOffice's Base module. We have a database with forms to enter our data, and queries and reports for extracting the data. We now have a usable document for recording our book library. However, our current design has one flaw we need to overcome. If we need to enter a new author or media type while we are in the books form, we have to close the book form and open one of the others. If we could enter new authors and media types directly from the books form, it would behave more like an application and make data entry even easier. We can accomplish this through a few short macros. The LibreOffice Basic language is very similar to other Basic languages, such as Visual Basic for Applications. To manipulate the underlying LibreOffice document, we access the Uno framework controlling the document. The Uno framework is quite complex, but I will explain, as best I can, the properties and objects we will use. The goal is not to teach you how to write LibreOffice macros, but how you can use them. Macro Security and Options |
Linea 15: | Linea 14: |
Un server presente in un Data Centre che non si avvia è certamente un vero grattacapo, non è così per il mio desktop e questo grazie a un elegante software: Wubi (http://wubi-installer.org). Stando a quanto riportato sul sito, "Wubi è un programma per utenti Windows, ufficialmente supportato da Ubuntu, che ti può condurre nel mondo Linux con un semplice clic." Molti tecnici con cui ho parlato hanno sentito parlare di Wubi, ma dubito che essi lo utilizzino nello stesso modo in cui lo utilizzo io. Wubi usa "loop disk", che non sono altro che normali file che al loro interno possono arrivare a contenere un intero sistema operativo, esattamente come avviene con i dispositivi a blocchi. Questi file normalmente sono utilizzati per trasferire immagini ISO su CD e floppy disk. Possiamo semplicemente dire che, su un pc con Windows già installato, Wubi aggiunge un'opzione al menu iniziale di boot, questa opzione fa riferimento ai propri "loop disk" come se fossero dischi aggiuntivi presenti sullo stesso computer. Wubi giustamente pubblicizza se stesso come sistema per avvicinare a Linux gli utenti Windows - senza la necessità di alcuna modifica ai loro pc. Si tratta di un grosso vantaggio. In caso di disinstallazione, Wubi rimuove la propria voce dal menù d'avvio e cancella i "loop disk"; non è necessario nessun ricorso a formattazione o partizionamento, una volta rimosso Wubi, a basso livello nulla è cambiato. Decisamente ingegnoso. Adoro la sua semplicità. Questa è il motivo che mi ha inizialmente attratto. Volevo esibire le virtù di Linux a un familiare che possedeva una installazione di Windows a cui teneva particolarmente e che quindi era un po' riluttante. Non volevo procedere con una installazione ad avvio multiplo (dual-boot), nel caso cambiasse idea. Una delle meraviglie di Wubi è che il risultato a cui si giunge installandolo sul proprio pc è identico a quello di una normale installazione di Ubuntu - confesso che inizialmente ero molto scettico, temevo problemi di compatibilità e prestazioni. I "loop disk" non sono privi di svantaggi, ma l'esperienza mi insegna che con i backup a portata di mano, essi sono relativamente innocui. Prima di tutto in caso di mancanza improvvisa di corrente e se qualcuno inavvertitamente spegne il vostro pc, non sarà semplice recuperare il file system contenuto in un "loop disk"; fsck fa del suo meglio, ma non sempre il risultato è paragonabile a quello ottenuto se l'installazione è su un disco fisico. Sembrerebbe che installare Wubi su una partizione dedicata possa aiutare a ripartire dopo una interruzione di corrente. Secondo, l'ibernazione non è supportata, questo potrebbe leggermente infastidire i possessori di portatili. Terzo, è importante deframmentare il disco di Windows contenente Wubi per conservare buone prestazioni. Nel caso in cui si sia dedicato tanto tempo alla personalizzazione di Wubi allora c'è sempre l'opportunità di convertire l'installazione in un disco fisico facendo ricorso ad alcuni utili strumenti facilmente reperibili. |
While macros allow us to do cool things in our documents, they can also cause problems. Some people use macros to compromise other people's systems, therefore, we need to take a few minutes to talk about macro security. Whether you are running LibreOffice on Linux, Mac, or Windows, malicious code in a macro can compromise your data and possibly your entire system. |
Linea 21: | Linea 16: |
Grazie alla portabilità dei "loop disk", posso salvare tutto il mio pc su un disco separato in circa novanta secondi. Questo significa che mi posso permettere di perdere un intero disco a causa di un guasto hardware, posso lasciare (inavvertitamente) aperta una falla di sicurezza e ritrovarmi con il mio computer compromesso da un attacco, riprendermi da un baco software bloccante o sconfigurare inavvertitamente qualche impostazione e rendere di fatto il mio sistema inutilizzabile. Sono sicuro che ognuno di voi avrà avuto occasione di sperimentare in quanti modi un pc si possa guastare. Si potrebbe dire che è come se la vostra installazione di Ubuntu fosse avvenuta in una specie di Macchina Virtuale (di fatto si tratta di un'immagine disco). Sono il primo a sostenere che non siamo di fronte a un sistema elegante, ma sono anche convinto che sia meglio mantenere le cose il più semplice possibile in modo che, in futuro, risulti semplice aggiustarle e non sia invece necessario leggere papiri di manuali. Il livello di portabilità del mio Sistema Operativo è così elevato che posso salvarlo su un supporto rimovibile e migrarlo su un altro computer, oppure, con una connessione ad Internet veloce, posso farne una copia nella nuvola. Oltre a questa insospettata possibilità, Wubi fornisce molte altre funzioni, fate riferimento a: http://wiki.ubuntu.com/WubiGuide Durante la veloce installazione (sotto Windows), è possibile specificare la dimensione iniziale del "loop disk" e sebbene l'operazione non sia completamente indolore (è consigliato eseguire prima un backup dell'installazione), esiste anche un utile comando che permette di ridimensionare l'installazione. Oltretutto è semplice montare i "loop disk" nel caso si vogliano copiare i file contenuti, è anche immediato accedere ai vostri file Windows, usando come è possibile immaginare: mount -o loop myloop.disk /mnt Reputo che i "loop disk" di dimensione intorno ai 6.5GB siano i più adatti per creare veloci copie di backup e che lo spazio libero si presti bene ad ospitare gli aggiornamenti dei pacchetti (l'installazione iniziale occupa solo pochi GB) come anche gli aggiornamenti di versione. Montare un disco indipendente dalla vostra installazione è così semplice che basta digitare mount /dev/sdX /mnt, questo si traduce nella possibilità di avere accesso a tutto lo spazio disco che il vostro hardware può offrire. Le mie prime installazioni di Wubi andavano dai 15GB ai 20GB ma, senza dubbio, avendo cura di tenerle più piccole, è possibile eseguire il backup della vostra installazione di Ubuntu su DVD o memoria USB in modo più facile. Un altro grande vantaggio dal mio punto di vista è che non è più necessario spegnere il computer per eseguire backup in tempo reale dell'intero sistema. La mia esperienza con i server mi porta ad avviare il sistema in Modalità Singolo Utente oppure da supporto esterno e duplicare il contenuto dei dischi con strumenti come dd, ma in questo caso Wubi copia questi "loop disk" senza necessità di interruzioni. I miei primi salvataggi erano decisamente rudimentali e veloci - ma leggermente laboriosi. La cosa più facile è fare clic sull'etichetta "File System" presente sulla sinistra in Nautilus per poi andare nella directory "host". Una volta raggiunta questa directory è possibile vedere una directory di nome Ubuntu contenente il vostro intero sistema (mancano i file appartenenti al bootloader), il file di dimensioni maggiori è il file root.disk che altro non è che il "loop disk". Per eseguire un backup del sistema operativo è sufficiente copiare la directory Ubuntu su un altro disco con sufficiente spazio libero. Terminata la copia, è buona norma rinominare la directory in ubuntu_10.09.10 o qualcosa di simile, in modo da distinguere le varie versioni dei salvataggi. Nel tempo ho messo insieme un semplice script che misurasse il tempo impiegato dal processo (soprattutto perché volevo rendermi conto di come il mio desktop si comportava), prima dell'avvio si sincerava di montare il drive dedicato a contenere il backup e al termine rinominava il backup. Lo script che utilizzo è molto semplice e si potrebbe migliorare aggiungendo per esempio una barra di progressione, utile nel caso si utilizzi hardware lento e un po' datato e si desideri tenere sotto controllo il tempo impiegato dall'operazione di backup. Come già riportato, novanta secondi sul mio desktop veloce equivale ad un battito di ciglio considerando l'importanza dell'operazione. Una volta alla settimana copio il backup nella nuvola (fortunatamente la velocità di trasmissione della mia connessione ad Internet è in grado di spostare 6,5GB in una notte), inoltre non di rado duplico il backup su un altro disco anch'esso contenuto nel mio pc desktop. Il cuore dello script che svolge in automatico il backup è il seguente: # Assegno al nome del file data e ora attuali filename="`date +%d.%m.%y-%H.%M`" # Monto il secondo disco fisso, e non restituisco errori se già montato sudo mount /dev/sdb2 /media/SECOND > /dev/null 2>&1 # Copio la directory ubuntu sul secondo disco sudo cp -R /host/ubuntu /media/SECOND/Wubi/ubuntu_$filename # Mi assicuro che anche l'utente chris possa eseguire il drag and drop su questi file e non solo root sudo chown -R chris:chris /media/SECOND/Wubi/ubuntu_$filename Per ripristinare un backup ci sono almeno tre alternative veloci. Avviare il sistema con qualcosa simile ad un CD Live di Ubuntu dopodiché rinominare la cartella contenente la versione danneggiata di Ubuntu in ubuntu_broken, e copiare la cartella di backup, per esempio ubuntu_10.09.10 e rinominarla nuovamente in ubuntu. In alternativa è sempre possibile modificare il bootloader, ad esempio Grub o LILO, in modo che punti sul disco alla copia di backup. Ho scoperto che avviare il pc con l'installazione Windows e sostituire i file prelevandoli dal backup è la soluzione più semplice adatta alle mie necessità, inoltre sono necessari solo cinque minuti per ripristinare il mio SO Ubuntu. Se per una ragione qualsiasi dovessi perdere completamente il mio computer, la mia installazione di Wubi dovrebbe essere compatibile con il nuovo sistema, dopo aver installato Windows, a patto che l'hardware non sia radicalmente diverso. L'unica raccomandazione che mi viene in mente è relativa a un paio di file che in fase di installazione Wubi scrive nella partizione principale di Windows, per sicurezza vale la pena di farne una copia. Sarebbe opportuno copiare questi file all'interno di ogni cartella contenente una copia di backup, anche se di solito ne conservo una sola copia per ogni computer sul quale installo Wubi. Questi file sono molto piccoli e si chiamano wubildr.mbr e wubildr. Dato che Wubi funziona anche con vecchie e oscure versioni di Windows aventi a disposizione solo 256MB di RAM e un processore con solo 1GHz adatto più ad uno smartphone che a un pc, allora è davvero difficile rinunciare a tutte le cose utili che è in grado di fare. |
Macro security in LibreOffice is simple. Tools > Options opens the Options dialog for LibreOffice. Under LibreOffice, select Security. Click on the Macro Security button to pop up the macro security options. You have four options. Never use the Low security option – it will run macros without asking you. I recommend the Medium security level. With this level, you are prompted whether to run the macros when you open a document containing macros. The High and Very High options require a certificate or folder you designate as trusted. While this is great, I believe nothing trumps the instincts of the user. You usually know whether you were expecting a document to contain macros. When in doubt, click No. Click OK to save your choice and OK to close the options dialog. Now, on to the fun stuff. The Macros |
Linea 44: | Linea 20: |
Idee ed editori cercasi Abbiamo creato alcune pagine su LaunchPad dedicata al progetto e al gruppo Full Circle. L'intenzione è di dare la possibilità a chi di voi ancora non partecipa di andare sulla pagina del progetto, fare clic su 'Answers' in cima alla pagina, e lasciare le vostre idee per un articolo, siate dettagliati! Sono da evitare frasi tipo 'articoli sui server', specificate cosa il server dovrebbe fare! Autori che vorrebbero scrivere un articolo e che sono alla ricerca di un argomento possono registrarsi sulla pagina del gruppo Full Circle, prenotare una delle richieste e cominciare a scrivere! Se vi accorgete che non riuscite a finire l'articolo in qualche settimana (un mese al massimo) allora rimuovete la prenotazione in modo da lasciare l'idea a qualcun altro. Pagina del progetto, dedicata alle idee: https://launchpad.net/fullcircle Pagina del gruppo, dedicata agli autori: https://launchpad.net/~fullcircle ==== Note alla traduzione ==== |
We will write four macros for our database document. Three will deal with opening forms, and the last will update the list boxes for authors and media types. The general idea behind macros is to accomplish tasks that are not built into the program, or to simplify complex tasks. Our macros really accomplish both, as we will simplify the tasks of adding authors and media types and provide functionality not built into the program. Before we can begin to write our macros, we need a container to hold them. Macros are contained in a module. Modules can live in the program itself or within a document. Since our macros are specific to our database file, we will embed them in the document. Macros embedded in a document are available only when the document is loaded. Macros contained in the program are available as long as the program is running. Tools > Macros > Organize Macros > LibreOffice Basic. The LibreOffice Basic Macros dialog pops up. Select book.odb from the Macro from-list. Click the New button. A dialog pops up asking you for a name for the module. Name it FormCalls. Click OK. This brings up the LibreOffice macro editor. The macro comes with a default main subroutine. We will not use this subroutine. Highlight Sub main and End Sub and press the backspace key to delete them. Our first macro is a generalized subroutine for opening a form. A generalized subroutine is written for reuse. We will call this routine twice from other routines we write. Type this subroutine into the editor: {{{ Sub OpenAForm (FormName as String) Dim GetForm as Object GetForm = ThisDatabaseDocument.FormDocuments.GetByName(FormName) GetForm.Open End Sub }}} The first line of the subroutine is called the signature. The signature determines how the subroutine is called. A signature starts with the keyword Sub, which defines this call as a subroutine. Next, the name of the subroutine. In our case, OpenAForm is the name of the subroutine. Finally in the parenthesis, we have the arguments used when calling this subroutine. In our case, we have a variable named FormName which is a type String. In the second line of the subroutine, Dim is another keyword. Dim initializes a variable as a type, and, optionally, a value. We define a variable named GetForm as a type Object. The third line assigns a value to the variable GetForm through a chain of commands in the Uno framework. ThisDatabaseDocument refers to the currently open database document. In our case, book.odb. FormDocuments is a collection of all the forms in the document. Finally, GetByName retrieves a specific form object from the collection. Notice, we pass the variable FormName from the signature to this method. Once the call is complete, the variable GetForm is the object of the form name passed to the subroutine. The fourth line calls the Open method of the form. On the fifth line, we tell Basic this is the end of the subroutine with the command End Sub. We will call the OpenAform subroutine twice. Once to open the authors form, and once to open the media form. Add these two subroutines to your editor: {{{ Sub OpenAuthorsForm(oEv As Object) OpenAForm("Authors") End Sub Sub OpenMediaForm(oEv As Object) OpenAForm("Media") End Sub }}} The signature on these two subroutines are a little different. Since we will call them from a control within a form, we need to pass the object making the call as an argument, even though we do not use it. The argument oEv is a reference to the object making the call. We will use this to our advantage later, in the last subroutine, but here we do it because it is required. These two subroutines are pretty simple. We just make a call to OpenAForm passing the name of the form we want to open, Authors or Media. The final subroutine deals with our problem of refreshing the data in the list boxes for authors and media when we add authors or media using the two subroutines above: {{{ Sub ListRefresh(oEv as Object) oEv.source.model.Refresh End Sub }}} Once again, since we will call this subroutine from a control, we need a reference to the control making the call. However, this time we will actually use the object. This subroutine makes a method call to the underlying model of the list box and refreshes the data in the list, thus updating our list of authors or media types. Save your module and close the Basic editor. Making Connections to Macros At this point, our macros do nothing. We need to connect them to objects in our form to activate them when needed. First, we will connect the open form subroutines to buttons in our form, and then we will connect the ListRefresh to the list boxes. In the database pane, click on Forms. Right-click the Books form and select edit. Add two push buttons to the form, one under the Authors table and another under the Media table. Right-click the button under the Authors table and select Control to bring up the buttons properties dialog. On the General tab, change the name to AddAuthors and the Label to Add Authors. On the Events tab, click the ellipses (…) button next to Execute Action – which brings up the Assign Action dialog. Click the Macro button to bring up the Macro Selector dialog. In the tree list under Library, select book.odb > Standard > FormCalls. Select OpenAuthorsForm from the Macro Name list and click OK. Click OK to close the Assign Action dialog. Close the buttons properties dialog. Do the same with the button under the Media table, only name it AddMedia, make the label Add Media Type, and assign the macro OpenMediaForm to the Execute Action event. Finally, we need to add the refresh subroutine to our list boxes. Right-click the Authors column in the authors table and select Column. On the Events tab, click the ellipse (…) button beside “When receiving focus”. In the Assign Action button, use the Macro button to assign the ListRefresh macro to the action. This will cause the list to update data from the Authors table when you click on a list box in the column. Do the same for the Media column in the media table. Save your changes to the Books form and close it. Testing Your Changes Any time we make changes to our forms, we will want to test them and make sure we got everything right, especially in cases where we have used macros. One simple typo could cause things to not work. Double-click the Books form to open it. Add a new book with an author and media type you have not added already. Click the Add Authors button to make sure it opens the form. Add some authors. Close the Authors form. Click on the authors dropdown list box and verify that the authors you added are there. Do the same test with the Add Media Type button and listbox. Final Thoughts and References Again, I would like to emphasize that writing macros in LibreOffice Basic is complex. Documentation is pretty sparse, but it is out there. If you are interested in taking up the challenge, here are some references to get you started: LibreOffice Basic Guide: http://wiki.documentfoundation.org/images/d/dd/BasicGuide_OOo3.2.0.odt Andrew Pitonyak's OpenOffice Macro Information: http://www.pitonyak.org/oo.php You can find the macros used in this How-To on pastebin.com at http://pastebin.com/MU2Ztizi Next time, we will move on to another part of the LibreOffice suite and explore the Math module. = Traduzione italiana = == Note alla traduzione == |
Linea 54: | Linea 77: |
=== Revisione === | = Revisione = |
Linea 57: | Linea 80: |
== Note alla revisione == | |
Linea 59: | Linea 83: |
==== Note alla revisione ==== | = Errata Corrige = |
Linea 61: | Linea 85: |
=== Errata Corrige === |
Testo inglese
LibreOffice Part 23: Base Form Enhancements with Macros
by Elmer Perry
For the previous four parts of this series, we have slowly built a database document using LibreOffice's Base module. We have a database with forms to enter our data, and queries and reports for extracting the data. We now have a usable document for recording our book library. However, our current design has one flaw we need to overcome. If we need to enter a new author or media type while we are in the books form, we have to close the book form and open one of the others. If we could enter new authors and media types directly from the books form, it would behave more like an application and make data entry even easier. We can accomplish this through a few short macros. The LibreOffice Basic language is very similar to other Basic languages, such as Visual Basic for Applications. To manipulate the underlying LibreOffice document, we access the Uno framework controlling the document. The Uno framework is quite complex, but I will explain, as best I can, the properties and objects we will use. The goal is not to teach you how to write LibreOffice macros, but how you can use them. Macro Security and Options
While macros allow us to do cool things in our documents, they can also cause problems. Some people use macros to compromise other people's systems, therefore, we need to take a few minutes to talk about macro security. Whether you are running LibreOffice on Linux, Mac, or Windows, malicious code in a macro can compromise your data and possibly your entire system.
Macro security in LibreOffice is simple. Tools > Options opens the Options dialog for LibreOffice. Under LibreOffice, select Security. Click on the Macro Security button to pop up the macro security options. You have four options. Never use the Low security option – it will run macros without asking you. I recommend the Medium security level. With this level, you are prompted whether to run the macros when you open a document containing macros. The High and Very High options require a certificate or folder you designate as trusted. While this is great, I believe nothing trumps the instincts of the user. You usually know whether you were expecting a document to contain macros. When in doubt, click No. Click OK to save your choice and OK to close the options dialog. Now, on to the fun stuff. The Macros
We will write four macros for our database document. Three will deal with opening forms, and the last will update the list boxes for authors and media types. The general idea behind macros is to accomplish tasks that are not built into the program, or to simplify complex tasks. Our macros really accomplish both, as we will simplify the tasks of adding authors and media types and provide functionality not built into the program. Before we can begin to write our macros, we need a container to hold them. Macros are contained in a module. Modules can live in the program itself or within a document. Since our macros are specific to our database file, we will embed them in the document. Macros embedded in a document are available only when the document is loaded. Macros contained in the program are available as long as the program is running. Tools > Macros > Organize Macros > LibreOffice Basic. The LibreOffice Basic Macros dialog pops up. Select book.odb from the Macro from-list. Click the New button. A dialog pops up asking you for a name for the module. Name it FormCalls. Click OK. This brings up the LibreOffice macro editor. The macro comes with a default main subroutine. We will not use this subroutine. Highlight Sub main and End Sub and press the backspace key to delete them. Our first macro is a generalized subroutine for opening a form. A generalized subroutine is written for reuse. We will call this routine twice from other routines we write. Type this subroutine into the editor:
Sub OpenAForm (FormName as String) Dim GetForm as Object GetForm = ThisDatabaseDocument.FormDocuments.GetByName(FormName) GetForm.Open End Sub
The first line of the subroutine is called the signature. The signature determines how the subroutine is called. A signature starts with the keyword Sub, which defines this call as a subroutine. Next, the name of the subroutine. In our case, OpenAForm is the name of the subroutine. Finally in the parenthesis, we have the arguments used when calling this subroutine. In our case, we have a variable named FormName which is a type String. In the second line of the subroutine, Dim is another keyword. Dim initializes a variable as a type, and, optionally, a value. We define a variable named GetForm as a type Object. The third line assigns a value to the variable GetForm through a chain of commands in the Uno framework. ThisDatabaseDocument refers to the currently open database document. In our case, book.odb. FormDocuments is a collection of all the forms in the document. Finally, GetByName retrieves a specific form object from the collection. Notice, we pass the variable FormName from the signature to this method. Once the call is complete, the variable GetForm is the object of the form name passed to the subroutine. The fourth line calls the Open method of the form. On the fifth line, we tell Basic this is the end of the subroutine with the command End Sub. We will call the OpenAform subroutine twice. Once to open the authors form, and once to open the media form. Add these two subroutines to your editor:
Sub OpenAuthorsForm(oEv As Object) OpenAForm("Authors") End Sub Sub OpenMediaForm(oEv As Object) OpenAForm("Media") End Sub
The signature on these two subroutines are a little different. Since we will call them from a control within a form, we need to pass the object making the call as an argument, even though we do not use it. The argument oEv is a reference to the object making the call. We will use this to our advantage later, in the last subroutine, but here we do it because it is required. These two subroutines are pretty simple. We just make a call to OpenAForm passing the name of the form we want to open, Authors or Media. The final subroutine deals with our problem of refreshing the data in the list boxes for authors and media when we add authors or media using the two subroutines above:
Sub ListRefresh(oEv as Object) oEv.source.model.Refresh End Sub
Once again, since we will call this subroutine from a control, we need a reference to the control making the call. However, this time we will actually use the object. This subroutine makes a method call to the underlying model of the list box and refreshes the data in the list, thus updating our list of authors or media types. Save your module and close the Basic editor.
Making Connections to Macros
At this point, our macros do nothing. We need to connect them to objects in our form to activate them when needed. First, we will connect the open form subroutines to buttons in our form, and then we will connect the ListRefresh to the list boxes. In the database pane, click on Forms. Right-click the Books form and select edit. Add two push buttons to the form, one under the Authors table and another under the Media table. Right-click the button under the Authors table and select Control to bring up the buttons properties dialog. On the General tab, change the name to AddAuthors and the Label to Add Authors. On the Events tab, click the ellipses (…) button next to Execute Action – which brings up the Assign Action dialog. Click the Macro button to bring up the Macro Selector dialog. In the tree list under Library, select book.odb > Standard > FormCalls. Select OpenAuthorsForm from the Macro Name list and click OK. Click OK to close the Assign Action dialog. Close the buttons properties dialog. Do the same with the button under the Media table, only name it AddMedia, make the label Add Media Type, and assign the macro OpenMediaForm to the Execute Action event. Finally, we need to add the refresh subroutine to our list boxes. Right-click the Authors column in the authors table and select Column. On the Events tab, click the ellipse (…) button beside “When receiving focus”. In the Assign Action button, use the Macro button to assign the ListRefresh macro to the action. This will cause the list to update data from the Authors table when you click on a list box in the column. Do the same for the Media column in the media table. Save your changes to the Books form and close it.
Testing Your Changes
Any time we make changes to our forms, we will want to test them and make sure we got everything right, especially in cases where we have used macros. One simple typo could cause things to not work. Double-click the Books form to open it. Add a new book with an author and media type you have not added already. Click the Add Authors button to make sure it opens the form. Add some authors. Close the Authors form. Click on the authors dropdown list box and verify that the authors you added are there. Do the same test with the Add Media Type button and listbox. Final Thoughts and References
Again, I would like to emphasize that writing macros in LibreOffice Basic is complex. Documentation is pretty sparse, but it is out there. If you are interested in taking up the challenge, here are some references to get you started: LibreOffice Basic Guide: http://wiki.documentfoundation.org/images/d/dd/BasicGuide_OOo3.2.0.odt Andrew Pitonyak's OpenOffice Macro Information: http://www.pitonyak.org/oo.php You can find the macros used in this How-To on pastebin.com at http://pastebin.com/MU2Ztizi Next time, we will move on to another part of the LibreOffice suite and explore the Math module.
Traduzione italiana
Note alla traduzione
Revisione
Note alla revisione