21/12/2015 Visio 2003 Programming Rel. Stefano Castiglioni 21/12/2015 Sommario • • • • • • • • • • Scenari di soluzione con Visio 2003 Automazione e oggetti Il modello ad oggetti di Visio Visio 2003 e il VBA Disegno con l’Automazione Integrazione di dati in una soluzione Visio Interoperabilità di Visio attraverso l’ XML Installazione di una soluzione Visio Visio 2003 e l’ambiente .NET Creazione di un componente COM 21/12/2015 Scenari di soluzione con Visio 2003 EXCEL VISIO “Build and update organization chart” Human rersource VISIO “Product configuration and order creation..” VBA, VB6 C++ Add-on DATABASE ORDER Sales VISIO “Monitoring manifacturing or business process” VBA, VB6 C++ Add-on Business Process Designer Application “Diagram as a part of enterprise application (ActiveX Visio Drawing Control)” New Business Process Edit Users DATABASE 21/12/2015 Soluzioni Visio • Una soluzione Visio è una combinazione di forme, di solito sviluppate ad hoc, e modelli di disegno in cui disporre e usare le forme. • Una soluzione di solito include stencil di forme chiamate master. • La programmazione (VBA, VB6 , C++ ..) permette di creare e analizzare il disegno o recuperare informazioni dallo stesso per poi trasferirle esternamente a fonti di dati esterne (database) 21/12/2015 La forma e il suo shapesheet • Shapesheet = Spreadsheet • Automazione della forma attraverso le formule = GETVAL(PinX) + GETVAL(PinY) + Width ="DATA:"&FORMAT(NOW(),"dd-MM-yy") =“AREA:”&Width*Height =GUARD(Pinx) 21/12/2015 Demo1 21/12/2015 Demo2 21/12/2015 Sezione Events • La sezione Events dello shapesheet Cella Evento chiamato dalla formula TheText Modifica o formattazione del testo EventXFMod Posizione,dimensioni o orientamento della pagina modificati EventDblClick Doppio click sulla forma EventDrop Copia di una forma o trascinamento di un master 21/12/2015 Demo3 21/12/2015 Simulazione degli eventi • Per attivare eventi in altre sezioni dello shapesheet • ES: cella A,B,C,D della sezione Scratch – OPENTEXTWIN() + DEPENDSON(PinX, PinY) – La formula evidenzierà il testo della forma per la modifica ogni qualvolta che la forma viene spostata 21/12/2015 Shortcut menù • È possibile aggiungere attraverso la sezione Actionsdelle azioni al menù di scelta rapida 21/12/2015 Demo4 21/12/2015 Visio Object Model ThisDocum 1 ent ActiveDocu ment ActivePage ActiveWind ow Key Windows Document Page Window Master Selection Documents MasterSho MasterSho rtcuts rcut Masters Master Pages Collection Object 1 The ThisDocument object is an instance of a Document object and is available only when using Microsoft Visual Basic® for Applications (VBA). Connects Connect OLEObject s OLEObject Layers Layer Shapes Shape Connects Connect OLEObject s OLEObject Document Layers Layer Shapes Page Global Application Styles Style Fonts Font Colors Color VBProject Shape 2 If the Shape object represents a group, it also has a Shapes collection. 3 Shapes Shape 2 If the MenuItem or ToolBarItem object represents a hierarchical menu, it also has a corresponding MenuItems or ToolBarItems collection. 4 A UIObject object can represent menus and accelerators or toolbars. 5 Many Visio objects have an EventList collection. 6 The Visio global object is available only when using VBA. Shapes Shape 2 Connects Connect Hyperlinks Hyperlink Characters Section Represents a more direct method of accessing an object by referencing it as a property of the Visio global object. Row Paths Path Curve MenuItems MenuItem MenuItems MenuItem 3 ToolbarIte ToolbarIte ms m ToolbarIte ToolbarIte ms 3 m AddOns AddOn EventList Event 5 UI Object 4 UI Object 4 6 VBE Command Bars COMAddIn s MenuSets MenuSet AccelTable s AccelTable ToolbarSet s ToolbarSet Menus Menu AccelItems AccelItems Toolbars Toolbar The Microsoft® Visio® object model 21/12/2015 Cell Visio 2003 e il VBA Shortcut: ALT+F11 21/12/2015 La classe Document • Aggiungere un nuovo documento – Dim docObj As Visio.Document Set docObj = Documents.Add("") • Creare un nuovo documento da un modello – Set docObj = Documents.OpenEx(Path &"sample template.vst", visOpenCopy) • Aprire un documento esistente – Set docObj = Documents.Open(Path & "sample.vsd") • Aprire uno stencil esistente – Set docObj = Documents.OpenEx(Path & "sample stencil.vss", visOpenDocked) 21/12/2015 Demo 5 21/12/2015 La classe Page • Sfogliare le pagine di documento – For Each pg In ActiveDocument.Pages Debug.Print pg.Name Next • Aggiungere una pagina – ThisDocument.Pages.Add • Attivare una pagina – Get the last page of the document – Set pg = ActiveDocument.Pages(“MiaPagina”) – ActiveWindow.Page = PageName 21/12/2015 Demo 6 21/12/2015 La classe Shape • Disegnare una forma – Dim pg As Visio.Page Set pg = ActiveDocument.Pages.Add pg.DrawLine 1, 1, 3, 4 pg.DrawRectangle 2, 2, 3, 5 • Aggiungere del testo alla forma – Dim shp As Visio.Shape Set shp = pg.DrawRectangle(1, 1, 4, 2) shp.Text = “Testo nella forma" • Raggruppare le forme selezionate – Dim sel As Visio.Selection ActiveWindow.SelectAll Set sel = ActiveWindow.Selection sel.Group 21/12/2015 Demo 7 21/12/2015 La classe Cell • Creare una User-defined Cell – Set shp = ActivePage.DrawRectangle(2, 2, 4, 4) iRowIndex = shp.AddNamedRow(visSectionUser, "MyUserCell", visRowUser) Set cel = shp.Cells("User.MyUserCell") cel.Formula = """Dati personali""" • Creare una Custom-property – Set shp = ActivePage.DrawRectangle(2, 2, 4, 4) iRowIndex = shp.AddNamedRow(visSectionProp, "MyCustomProperty", VisRowIndices.visRowProp) Set cel = shp.Cells("Prop.MyCustomProperty") cel.Formula = """Questa è una prova""" MsgBox "cel.Formula = " & cel.Formula • Creare un Unique-ID per la forma – Dim shp As Visio.Shape Set shp = ActivePage.DrawRectangle(2, 2, 4, 4) shp = shp.UniqueID(visGetOrMakeGUID) Debug.Print shp.UniqueID(visGetOrMakeGUID) 21/12/2015 Demo 8 21/12/2015 Disegno con l’Automazione • Attraverso l’utilizzo di VBA o di qualsiasi linguaggio che supporta l’automazione (VB6, C, C++, .NET…) è possibile creare quindi soluzioni che incorporano le funzionalità del motore di Visio e dei suoi oggetti. • Esempi di automazione con VBA 21/12/2015 Demo 9 • Soluzione che controlla la spesa legata all’acquisto di un impianto stereo. • Monitoraggio degli eventi legati all’aggiunta o all’eliminazione di forme. 21/12/2015 Demo 9 21/12/2015 Demo 10 • Soluzione che configura una topologia di rete in base agli apparati selezionati. • La soluzione mette in evidenza la capacità di Visio di semplificare e organizzare rappresentazioni complesse quali le infrastrutture di rete. 21/12/2015 Demo 10 21/12/2015 Integrazione di dati in una soluzione Visio • Visio permette di combinare disegni con altre fonti di dati, tipicamente Database. • È possibile creare disegni partendo da una o più tabelle di un database o viceversa salvare le informazioni associate alle forme (celle definite dall’utente, proprietà personalizzate) nel database. • Esempi 21/12/2015 Demo 11 21/12/2015 Visio e l’ XML • Con la versione 2002 è possibile salvare i documenti in formato XML – Disegno.vdx – Stencil.vsx – Modello.vtx • Questa caratteristica permette un alto grado di interoperabilità con altre applicazioni e altre piattaforme 21/12/2015 Demo 13 • La soluzione carica un documento di Visio salvato in formato XML e visualizza in una pagina HTML l’elenco delle forme con relative caratteristiche in una tabella. • La soluzione sfrutta la possibilità di trasformare file XML in altri formati usando fogli di stile XSL. 21/12/2015 Demo 13 21/12/2015 Visio 2003 e .NET • L’ambiente .NET è in grado interfacciarsi con tutte le applicazioni COM, quindi anche Visio. • Installando la versione 2003 di Visio, si dispone automaticamente dell’assembly di interoperabilità e di un componente ActiveX che può essere utilizzato in qualsiasi applicazione. 21/12/2015 Visio Drawing Control 21/12/2015 Demo 14 • La soluzione, prevede l’utilizzo del controllo ActiveX all’interno di un form di una applicazione Windows. • Il controllo dispone di tutte le caratteristiche di un documento creato con Visio 2003. 21/12/2015 Demo 14 21/12/2015 Demo 15 • La soluzione utilizza Visio attraverso l’automazione per creare un diagramma di flusso. • Per rendere il documento disponibile ad utenti che non dispongono di una licenza Visio, viene generata una pagina web con il diagramma. 21/12/2015 Demo 15 21/12/2015 Creazione di un componente COM • A partire dalla versione 2002 è possibile creare soluzioni basate su add-in COM – ActiveX DLL – ActiveX EXE • Si può utilizzare Microsoft Office Developer o Microsoft Visual Studio 5 o successivi usando gli add-in designer per Visio. • Download: http://office.microsoft.com/enus/officeupdate/CD010225661033.aspx 21/12/2015 Add-in designer 21/12/2015 Demo 12 • • • • • • • • • • • • • • • Private Sub AddinInstance_OnConnection(ByVal Application As Object, ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst As Object, custom() As Variant) Dim cbar As CommandBar On Error GoTo error_handler 'Save the Visio instance Set g_VisioApp = Application Exit Sub error_handler: MsgBox Err.Description End Sub 21/12/2015 Demo 12 Sub CreaBarraStrumentiOffice() Dim mybar As Office.CommandBar Dim mybars As Office.CommandBars Set mybar = Application.CommandBars("Personalizzata") Set myControl = mybar.Controls _ .Add(Type:=msoControlButton) With myControl .FaceID = 2 .OnAction = "!<StencilWindowCOMAddin.VisioCOMAddin>" '.VisioCOMAddin End With mybar.Visible = True End Sub 21/12/2015 Installazione • Una volta creati i componenti COM, DLL, EXE devono essere installati in deteminate directory perché siano disponibili all’utente. • L’operazione può essere eseguita per esempio utilizzando il Package and Deployment wizard presente in Visual Studio o Office Developer 21/12/2015 Installazione 21/12/2015 Reference • “Programmare Microsoft VISIO” – Ed:Mondadori • “Microsoft Visio 2003 Developer’s Survival Pack” – Ed:Trafford – Autore: Graham Wideman • http://msdn.microsoft.com/library 21/12/2015