Creazione di un'app da SharePointCreating an app from SharePoint

Generare un'app a tre schermate da un elenco di SharePoint e quindi esplorare le schermate e i controlli dall'app.Generate a three screen app from a SharePoint list, then explore screens and controls from the app. Aggiornare le schermate, i controlli e i campi dell'app, nonché usare formule per personalizzare ulteriormente il comportamento delle app.Update app screens, controls, and fields; and use formulas to further customize app behavior.

Imparerai a...

Generare un'appGenerate an app

In questa sezione del corso si creerà un'app da un elenco "Flooring Estimates" di SharePoint contenente i dati relativi a vari tipi di pavimenti.In this section of the course, we'll create an app from a "Flooring Estimates" SharePoint list. L'app può essere usata da un tecnico edile, che deve effettuare stime di pavimentazione presso i clienti, per consultare l'elenco e mantenerlo aggiornato.The app could be used by someone, such as an estimator out at customer sites, to refer to the list and keep it up-to-date. Nella sezione introduttiva è stato illustrato come generare un'app in base allo stesso elenco. Perché dunque esaminarlo di nuovo?In the Getting Started section, we showed you how to generate an app from the same list - so why look at it again? In primo luogo, anziché iniziare in PowerApps Studio, si vedrà come PowerApps è integrato in SharePoint Online.First, instead of starting in PowerApps Studio, we now show you how PowerApps is integrated into SharePoint Online. In secondo luogo, si esaminerà più in dettaglio come è fatta l'app e si vedrà come personalizzarla.Second, we dig deeper into how the app is put together, and show you how to customize it. In questo argomento si potranno sicuramente ottenere nuove informazioni. È quindi arrivato il momento di passare all'azione.You'll definitely get some new information going through this section, so let's jump in!

Generare l'appGenerate the app

L'immagine seguente mostra l'elenco "Flooring Estimates" di SharePoint, che contiene informazioni di base, come il nome, il prezzo e un'immagine, per ogni tipo di pavimento.The following image shows the "Flooring Estimates" SharePoint list, which contains basic information like name and price, and an image for each flooring type. È possibile vedere come PowerApps e Microsoft Flow sono ora integrati in SharePoint Online per facilitare la creazione di app e flussi da elenchi personalizzati.You can see how PowerApps and Microsoft Flow are now integrated into SharePoint Online, so you can easily build apps and flows from your lists.

Elenco Flooring Estimates

Per creare un'app, fare clic su PowerApps e quindi su Create an app (Crea un'app).To build an app, click PowerApps, then Create an app. Nel riquadro a destra immettere un nome per l'app e quindi fare clic su Create (Crea).In the right hand pane, enter a name for the app, then click Create. Dopo che si è fatto clic su Create (Crea), PowerApps inizia a generare l'app.After you click Create, PowerApps starts to generate the app. PowerApps è in grado di formulare deduzioni sui dati in modo da generare un'app pratica e funzionale da usare come punto di partenza.PowerApps makes all sorts of inferences about your data so that it generates a useful app as a starting point.

Generare l'app dall'elenco

Visualizzare l'app in PowerApps StudioView the app in PowerApps Studio

La nuova app a tre schermate viene aperta in PowerApps Studio.Your new three-screen app opens in PowerApps Studio. Tutte le app generate in base a dati presentano lo stesso set di schermate:All apps generated from data have the same set of screens:

  • La schermata di esplorazione, in cui è possibile esplorare, ordinare, filtrare e aggiornare i dati estratti dall'elenco, oltre ad aggiungere elementi facendo clic sull'icona con il segno più (+).The browse screen: where you browse, sort, filter, and refresh the data pulled in from the list, as well as add items by clicking the (+) icon.
  • La schermata dei dettagli, in cui è possibile visualizzare altri dettagli su un elemento e scegliere di eliminarlo o modificarlo.The details screen: where you view more detail about an item, and can choose to delete or edit the item.
  • La schermata di creazione/modifica, in cui è possibile modificare un elemento esistente o crearne uno nuovo.The edit/create screen: where you edit an existing item or create a new one.

Nella barra di spostamento a sinistra fare clic o toccare un'icona nell'angolo in alto a destra per passare alla visualizzazione dell'anteprima.In the left navigation bar, click or tap an icon in the upper-right corner to switch to the thumbnail view.

Attivare o disattivare le visualizzazioni

Fare clic o toccare ogni anteprima per visualizzare i controlli su quella schermata.Click or tap each thumbnail to view the controls on that screen.

App generata

Eseguire l'app in modalità di anteprimaRun the app in preview mode

Fare clic o toccareClick or tap Freccia per avviare l'anteprima dell'app nell'angolo in alto a destra per eseguire l'app.in the top-right corner to run the app. Se si esamina l'app, si noterà che include tutti i dati dell'elenco e offre un'esperienza predefinita ottimale.If you navigate through the app, you see that it includes all the data from the list and provides a good default experience.

Eseguire l'app in modalità di anteprima

Negli argomenti successivi si esaminerà l'app più in dettaglio e si personalizzerà l'app per renderla più adatta a esigenze specifiche.Next we'll explore the app in more detail and later customize the app so it better suits our needs.

Esplorare un'app generataExplore a generated app

In questo argomento verrà esaminata più da vicino l'app generata, con particolare attenzione alle schermate e ai controlli che definiscono il comportamento dell'app.In this topic, we look more closely at the generated app - reviewing the screens and controls that define the app's behavior. Non tutti i dettagli verranno analizzati, ma le informazioni sul funzionamento di questa app saranno utili per creare app personalizzate.We won't go through all the details, but seeing more about how this app works will help you to build your own apps. In un argomento più avanti verranno esaminate le formule che interagiscono con schermate e controlli.In a later topic, we'll look at the formulas that work with screens and controls.

Informazioni sui controlli in PowerAppsUnderstanding controls in PowerApps

Un controllo è semplicemente un elemento dell'interfaccia utente a cui sono associati determinati comportamenti.A control is simply a UI element that has behaviors associated with it. In PowerApps molti controlli sono identici a quelli usati in altre app, ad esempio etichette, caselle di input di testo, elenchi a discesa, elementi di spostamento e così via.Many controls in PowerApps are the same as controls that you've used in other apps: labels, text-input boxes, drop-down lists, navigation elements, and so on. Tuttavia, PowerApps include anche controlli più specializzati come quelli appartenenti alle categorie Galleries (Raccolte), per la visualizzazione di dati di riepilogo, e Forms (Moduli), per la visualizzazione di dati dettagliati e per la creazione e la modifica di elementi.But PowerApps has more specialized controls like Galleries (which display summary data) and Forms (which display detail data and enable you to create and edit items). Sono disponibili anche altri controlli molto utili ed efficaci come Image, Camera e Barcode.And also some other really cool controls like Image, Camera, and Barcode. Per vedere i controlli disponibili, scegliere o toccare Inserisci sulla barra multifunzione e quindi scegliere o toccare le opzioni, una alla volta, da Testo a Icone.To see what's available, click or tap Insert on the ribbon, and then click or tap each of the options in turn, Text through Icons.

Scheda Controls (Controlli) sulla barra multifunzione di PowerApps Studio

Esplorare la schermata di esplorazioneExplore the browse screen

Ciascuna delle tre schermate dell'app include un controllo principale e alcuni controlli aggiuntivi.Each of the three app screens has a main control and some additional controls. La prima schermata è quella di esplorazione, denominata BrowseScreen1 per impostazione predefinita.The first screen in the app is the browse screen, named BrowseScreen1 by default. Il controllo principale di questa schermata è una raccolta denominata BrowseGallery1.The main control on this screen is a gallery named BrowseGallery1. BrowseGallery1 contiene altri controlli, ad esempio NextArrow1, un controllo di tipo icona che consente di passare alla schermata dei dettagli.BrowseGallery1 contains other controls, like NextArrow1 (an icon control - click or tap it to go to the details screen). Nella schermata sono inoltre presenti controlli separati, ad esempio IconNewItem1, un controllo di tipo icona che consente di creare un elemento nella schermata di creazione/modifica.There are also separate controls on the screen, like IconNewItem1 (an icon control - click or tap it to create an item in the edit/create screen).

Schermata di esplorazione con controlli

PowerApps offre un'ampia gamma di tipi di raccolte ed è quindi possibile usare quella più adatta ai requisiti di layout dell'app.PowerApps has a variety of gallery types so you can use the one that best suits your app's layout requirements. Più avanti in questa sezione si esamineranno altri modi per controllare il layout.You will see more ways to control layout later in this section.

Opzioni di raccolta di PowerApps

Esplorare la schermata dei dettagliExplore the details screen

La schermata successiva è quella dei dettagli, denominata DetailScreen1 per impostazione predefinita.Next is the details screen, named DetailScreen1 by default. Il controllo principale in questa schermata è un modulo di visualizzazione denominato DetailForm1.The main control on this screen is a display form named DetailForm1. DetailForm1 contiene altri controlli, ad esempio DataCard1, un controllo di tipo scheda, che in questo caso visualizza la categoria del pavimento.DetailForm1 contains other controls, like DataCard1 (a card control, which displays the flooring category in this case). Nella schermata sono inoltre presenti controlli separati, ad esempio IconEdit1, un controllo di tipo icona che consente di modificare l'elemento corrente nella schermata di creazione/modifica.There are also separate controls on the screen like IconEdit1 (an icon control - click or tap it to edit the current item on the edit/create screen).

Schermata dei dettagli con controlli

Sono disponibili molte opzioni di raccolta, ma i moduli offrono soluzioni più semplici e immediate, per la modifica o per la visualizzazione.There are lots of gallery options, but forms are more straightforward - it's either an edit form or a display form.

Opzioni di modulo di PowerApps

Esplorare la schermata di creazione/modificaExplore the edit/create screen

La terza schermata nell'app è quella di creazione/modifica, denominata EditScreen1 per impostazione predefinita.The third screen in the app is the edit/create screen, named EditScreen1 by default. Il controllo principale in questa schermata è un modulo di modifica denominato EditForm1.The main control on this screen is an edit form named EditForm1. EditForm1 contiene altri controlli, ad esempio DataCard8, un controllo di tipo scheda, che in questo caso consente di modificare la categoria del pavimento.EditForm1 contains other controls, like DataCard8 (a card control, which allows you to edit the flooring category in this case). Nella schermata sono inoltre presenti controlli separati, ad esempio IconAccept1, un controllo di tipo icona che consente di salvare le modifiche apportate nella schermata di creazione/modifica.There are also separate controls on the screen like IconAccept1 (an icon control - click or tap it to save the changes you made on the edit/create screen).

Schermata di modifica con controlli

Ora che si ha un'idea della composizione dell'app con schermate e controlli, nell'argomento successivo si vedrà come personalizzare l'app.Now that you have a sense of how the app is composed of screens and controls, we'll look at how you customize the app in the next topic.

Personalizzare l'appCustomize the app

Nei primi due argomenti di questa sezione è stata generata un'app da un elenco di SharePoint ed è stata esaminata l'app per comprendere meglio la composizione delle app a tre schermate.In the first two topics in this section, you generated an app from a SharePoint list and explored the app to get a better understanding of how three screen apps are composed. Le app generate da PowerApps sono utili, ma spesso richiedono operazioni di personalizzazione.The app that PowerApps generated is useful, but you will often customize an app after it's generated. In questo argomento si esamineranno alcune modifiche di base per ogni schermata dell'app,In this topic, we'll walk through some basic changes for each screen in the app. ma per personalizzare un'app è possibile eseguire molte altre modifiche che verranno illustrate negli argomenti successivi.There is a lot more you can do to customize an app - we'll get to that in later topics. Nel frattempo, è possibile basarsi sulle informazioni incluse in questo argomento per iniziare il lavoro di personalizzazione.In the meantime, you can take what you learn in this topic and build on it. Si prenda in considerazione un'app generata da un elenco, da un file di Excel o da un'altra origine per esaminare le possibilità di personalizzazione.Take any app you generate-from a list, an Excel file, or another source-and see how you can customize it. Questo è il modo migliore per comprendere come sono fatte le app.It really is the best way to learn how apps are put together.

Schermata di esplorazioneBrowse screen

Si inizierà con la schermata di esplorazione.We'll start with the browse screen. L'elenco di SharePoint contiene un'immagine per ogni prodotto, ma l'immagine non viene visualizzata per impostazione predefinita.The SharePoint list contains an image for each product but the image isn't displayed by default. Ecco come correggere questo comportamento.Let's fix that. Nel riquadro di destra, nella scheda Layout, selezionare un layout diverso per la schermata di esplorazione.In the right-hand pane, on the Layout tab, select a different layout for the browse screen. I risultati sono immediatamente visibili perché PowerApps aggiorna l'app mentre si apportano le modifiche.You see the results right away because PowerApps updates the app as you make changes.

Modificare il layout della schermata di esplorazione

Con il layout di base appropriato, modificare ora i campi visualizzati.With the right basic layout, now change the fields that are displayed. Fare clic o toccare un campo nel primo elemento e quindi, nel riquadro di destra, modificare i dati visualizzati per ogni elemento.Click or tap a field in the first item, then in the right-hand pane, change the data that is displayed for each item. In questo modo vengono visualizzate informazioni di riepilogo più chiare per ogni elemento incluso nell'elenco.This provides a better summary of each item in the list.

Modificare i campi della schermata di esplorazione

Schermata dei dettagliDetails screen

Nella schermata dei dettagli si vuole modificare l'ordine dei campi e visualizzare anche l'immagine.On the details screen, we want to change the order of the fields and display the image also. Sono presenti diversi controlli in questa schermata e quindi il processo è leggermente diverso da quello della schermata di esplorazione.There are different controls on this screen, so the process is a little different from the browse screen. Fare clic o toccare un campo e quindi, nel riquadro di destra, trascinare il campo Title (Titolo) nella parte superiore.Click or tap a field, then in the right-hand pane, drag the Title field to the top. Fare quindi clic o toccare il campo Image (Immagine) per visualizzarlo.Then click or tap the Image field to display it.

Modificare i campi della schermata dei dettagli

Schermata di creazione/modificaEdit/create screen

Infine, nella schermata per la creazione e la modifica degli elementi si decide di modificare un campo per facilitare l'immissione di testo.Finally, on the screen where you edit and create entries, we want to change a field so that it's easier to enter text. Scegliere o toccare l'elenco a discesa del campo Panoramica e quindi scegliere o toccare il controllo Modifica il testo multiriga.Click or tap the drop-down list for the Overview field, and then click or tap the Edit Multi-line Text control.

Modificare i campi della schermata di modifica

È possibile notare come pochi semplici passaggi possono essere efficaci per migliorare l'aspetto e l'esperienza d'uso di un'app generata.You can see how a few basic steps can do a lot to improve the appearance and experience of using a generated app. In questo argomento è stata prestata particolare attenzione all'interfaccia utente di PowerApps Studio, che offre molte opzioni per personalizzare le app.In this topic, we focused on the PowerApps Studio UI, which provides a lot of options for customizing your apps. Nell'argomento successivo si esamineranno le formule, che svolgono un ruolo importante nel determinare il comportamento dell'app.In the next topic, we'll get into formulas, which play an important role in driving app behavior.

Esplorare le formule di appExplore app formulas

Uno dei principali vantaggi offerti da PowerApps è quello di non dover scrivere il tradizionale codice dell'applicazione. Per creare app non è necessario essere sviluppatori.One of the major benefits of PowerApps is not having to write traditional application code - you don't have to be a developer to create apps! Tuttavia, bisogna trovare un modo per esprimere la logica e controllare le funzionalità di spostamento, filtro, ordinamento e altro ancora all'interno di un'app.But you still need a way to express logic in an app and to control an app's navigation, filtering, sorting, and other functionality. A questo punto entrano in gioco le formule.This is where formulas come in. Se si sono usate le formule di Excel, l'approccio di PowerApps dovrebbe risultare familiare.If you have used Excel formulas, the approach that PowerApps takes should feel familiar. In questo argomento verranno presentate alcune formule di base per la formattazione del testo e quindi verranno illustrate tre delle formule che PowerApps include nell'app generata.In this topic, we'll show a couple of basic formulas for text formatting and then walk through three of the formulas that PowerApps includes in the generated app. Si potrà così avere un'idea delle possibili finalità d'uso delle formuleYou will get a taste of what formulas can do. e quindi dedicare tempo a esaminare altre formule nell'app generata e a creare formule personalizzate.Then you can spend some time looking at other formulas in the generated app and writing your own.

Informazioni sulle formule e sulle proprietàUnderstanding formulas and properties

Nell'argomento precedente è stato incluso il campo Price relativo al prezzo degli articoli nella raccolta della schermata di esplorazione, ma in tale campo era visualizzato un semplice numero, senza il simbolo di valuta.In the previous topic, we included the Price field in the browse screen gallery, but it showed up as a plain number without a currency symbol. Si supponga di voler aggiungere un simbolo di dollaro e modificare il colore del testo in base al costo dell'articolo (ad esempio, rosso se è maggiore di $ 5, altrimenti verde).Suppose we want to add a dollar sign, and also change the text color depending on how much the item costs (for example red if it's more than $5, otherwise green). L'immagine seguente mostra la possibile realizzazione di questa idea.The following image shows the idea.

Formattazione del testo per colore e valuta

Si inizierà con la formattazione della valuta.Let's start with the currency formatting. Per impostazione predefinita, PowerApps inserisce semplicemente un valore di prezzo per ogni elemento, che è impostato come proprietà Text dell'etichetta in cui è visualizzato il prezzo.By default PowerApps just pulls in a Price value for each item, which is set as the Text property of the label that displays the price.

Formattazione predefinita del prezzo

Per aggiungere il simbolo di valuta degli Stati Uniti, scegliere o toccare il controllo dell'etichetta e nella barra della formula impostare la proprietà Text su questa formula.To add the US currency symbol, click or tap the label control, and in the formula bar set the Text property to this formula.

Formattazione della valuta del prezzo

La formula - Text(Price, "[$-en-US]$ ##.00" usa la funzione Text per specificare come deve essere formattato il numero.The formula - Text(Price, "[$-en-US]$ ##.00" uses the Text function to specify how the number should be formatted. È simile a una formula di Excel, anche se le formule di PowerApps fanno riferimento a controlli e ad altri elementi dell'app anziché a celle in un foglio di calcolo.The formula is like an Excel formula, but PowerApps formulas refer to controls and other app elements rather than cells in a spreadsheet. Se si fa clic o si tocca un controllo e quindi si fa clic o si tocca l'elenco a discesa delle proprietà, viene visualizzato un elenco di proprietà pertinenti per il controllo.If you click or tap a control and then click or tap the property drop down list, you see a list of properties that are relevant to the control. Ad esempio, ecco un elenco parziale delle proprietà di un'etichetta.For example, here is a partial list of the properties for a label. Alcune proprietà sono pertinenti per una vasta gamma di controlli, mentre altre solo per un controllo specifico.Some properties are relevant across a broad range of controls and others only for a specific control.

Impostazione delle proprietà

Per formattare il colore in modo condizionale in base al prezzo, usare una formula simile alla seguente per la proprietà Color dell'etichetta: If(Price > 5, Color.Red, Color.Green).To format the color conditionally based on the price, use a formula like the following for the Color property of the label: If(Price > 5, Color.Red, Color.Green).

Formattazione dei colori per i prezzi

Formule incluse nell'app generataFormulas included in the generated app

Ora che è stato spiegato come usare le formule in combinazione con le proprietà, si esamineranno tre esempi di formule che vengono usate da PowerApps nell'app generata.Now that you understand how to use formulas in conjunction with properties, we'll look at three examples of formulas that PowerApps uses in the generated app. Gli esempi riguardano tutti la schermata di esplorazione e sono basati sulla proprietà OnSelect, che definisce ciò che accade quando un utente fa clic o tocca un controllo dell'app.The examples are all from the browse screen and work with the OnSelect property, which defines what happens when a user clicks or taps an app control.

  • La prima formula è associata al controllo IconNewItem1: icona per aggiungere un nuovo elemento.The first formula is associated with the IconNewItem1 control: New item icon. Si fa clic o si tocca questo controllo per passare dalla schermata di esplorazione a quella di creazione/modifica e creare un elemento.You click or tap this control to go from the browse screen to the edit/create screen and create an item.

    • La formula è NewForm(EditForm1);Navigate(EditScreen1, ScreenTransition.None)The formula is NewForm(EditForm1);Navigate(EditScreen1, ScreenTransition.None)
    • La formula crea un'istanza di un nuovo modulo di modifica e quindi passa alla schermata di creazione/modifica per consentire di creare un nuovo elemento.The formula instantiates a new edit form and then navigates to the edit/create screen so that you can create a new item. Il valore ScreenTransition.None indica che non è definita alcuna transizione tra le schermate, ad esempio un effetto di dissolvenza.A value of ScreenTransition.None means there is no transition between screens (such as a fade).
  • La seconda formula è associata al controllo IconSortUpDown1: icona per ordinare la raccolta.The second formula is associated with the IconSortUpDown1 control: Sort gallery icon. Si fa clic o si tocca questo controllo per ordinare l'elenco di elementi nella raccolta della schermata di esplorazione.You click or tap this control to sort the list of items in the browse screen gallery.

    • La formula è UpdateContext({SortDescending1: !SortDescending1})The formula is UpdateContext({SortDescending1: !SortDescending1})
    • La formula usa UpdateContext per aggiornare una variabile chiamata SortDescending1.The formula uses UpdateContext to update a variable called SortDescending1. Quando si fa clic sul controllo, il valore precedente della variabile e quello successivo vengono attivati alternativamente.The value of the variable switches back and forth as you click the control. In questo modo la raccolta visualizzata in questa schermata riceve istruzioni su come ordinare gli elementi. Per altri dettagli, guardare il video.This tells the gallery on this screen how to sort the items (watch the video for more details).
  • La terza formula è associata al controllo NextArrow1: icona con freccia per visualizzare i dettagli.The third formula is associated with the NextArrow1 control: Go to details arrow icon. Si fa clic o si tocca questo controllo per passare dalla schermata di esplorazione a quella dei dettagli.You click or tap this control to go from the browse screen to the details screen.

    • La formula è Navigate(DetailScreen1, ScreenTransition.None)The formula is Navigate(DetailScreen1, ScreenTransition.None)
    • La formula consente di passare alla schermata dei dettagli, anche in questo caso senza alcuna transizione.The formula navigates to the details screen, again with no transition.

Sono disponibili molte altre formule nell'app. È quindi consigliabile fare clic sui controlli e verificare quali formule sono impostate per le varie proprietà.There are many other formulas in the app, so take some time to click on controls and see what formulas are set for various properties.

ConclusioniWrapping it all up

A questo punto si conclude il percorso di esplorazione dell'app generata e di analisi dietro le quinte di schermate, controlli, proprietà e formule su cui sono basate le funzionalità dell'app.This brings us to the end of exploring the generated app, and taking a look behind the scenes at the screens, controls, properties, and formulas that give the app its capabilities. Se si è seguito questo percorso, si avrà un'idea più chiara del funzionamento di un'app generata.If you've followed along, you should have a better understanding of how a generated app works. Le conoscenze apprese saranno utili per iniziare a creare app personalizzate.Now you can take this understanding into creating your own apps.

Prima di passare alla sezione successiva, è opportuno tornare all'interfaccia di SharePoint e vedere come l'app è ora integrata con l'esperienza di visualizzazione dell'elenco.Before moving on to the next section, we want to loop back to SharePoint and show you how the app is now integrated with the list experience. Come si può notare, FlooringApp ora funziona come una visualizzazione dell'elenco e viene avviata facendo clic su Open (Apri).As you can see FlooringApp now functions as a view of the list, and you launch the app by clicking Open. Questa soluzione consente di gestire facilmente gli elenchi con un'esperienza personalizzata intuitiva.This provides a simple way to manage your lists with a friendly customized experience.

App come visualizzazione dell'elenco di SharePoint

Dopo aver esaminato l'intera sezione relativa alle app di SharePoint, è possibile scegliere in che modo proseguire:Now that you've gone through the SharePoint app section, you have a choice about where to go next:

La sezione relativa alla gestione mostra come condividere le app e controllarne le versioni e presenta gli ambienti, che sono contenitori per app, dati e altre risorse.The management section shows you how to share and version apps, and introduces environments, which are containers for apps, data, and other resources. Tutti dovranno prima o poi prendere in esame la sezione relativa alla gestione, ma anche quella relativa a Common Data Service contiene informazioni interessanti, incluse altre personalizzazioni per le app.We recommend that everyone go through the management section at some point, but the Common Data Service section has some great information too, including more app customizations.

Congratulazioni!

La sezione Creazione di un'app da SharePoint della formazione guidata di Microsoft PowerApps è stata completata.You've completed the Creating an app from SharePoint section of Microsoft PowerApps Guided Learning.

Hai imparato a...

Esercitazione successiva

Creazione di un'app da Common Data ServiceCreating an app from the Common Data Service

Autori di contributi

  • Michael Blythe
  • olprod