Presentation is loading. Please wait.

Presentation is loading. Please wait.

David J Parker MVP (Visio) bVisual ltd  Microsoft MVP (Visio)  Microsoft MCP (Visio, SQL)  Pre-Microsoft acquisition  Visio Business Partner, 1996-8.

Similar presentations


Presentation on theme: "David J Parker MVP (Visio) bVisual ltd  Microsoft MVP (Visio)  Microsoft MCP (Visio, SQL)  Pre-Microsoft acquisition  Visio Business Partner, 1996-8."— Presentation transcript:

1

2 David J Parker MVP (Visio) bVisual ltd

3  Microsoft MVP (Visio)  Microsoft MCP (Visio, SQL)  Pre-Microsoft acquisition  Visio Business Partner,  Speaker at Visio Conferences 1997 &1998  Started bVisual in 1998  Post-Microsoft acquisition  Microsoft Visio Solution Provider since 1999  Speaker at Microsoft Office Visio Conferences 2006 & 2008  Visio Solution Provider Training for Microsoft EMEA  Visualizing Information with Microsoft Office Visio 2007  McGraw-Hill,  DataLegends – Visio add-in to add Data Graphic legends  WBS Modeler for Visio and Project   Visio Blog

4

5 Visio Drawing Shape Data Source On-line Prints Reports odc ImportLinkDisplay>>>Communicate Data Graphics

6  Visualise complex information to better understand it  Analyse information to identify trends and issues and act on them  Communicate using diagrams that can be shared with a broad audience  Customise and extend Office Visio 2007 programmatically to fit customised needs

7  Microsoft Office Visio 2007 Standard  Database Wizard  Microsoft Office Visio 2007 Professional  Database Wizard  Database reverse engineering  UML models  Link Data To Shapes *  PivotDiagrams *  Data Graphics *

8  Drawing, Template and Stencil files  Binary (*.vsd, *.vst, *.vss)  XML (*.vdx, *.vtx, *.vsx)  XML files  7-10 larger than binary  Not yet a zip file (like the big three Office 2007 applications) with sub-folders and files  Files compatible with Visio 2003  Unless using new ShapeSheet formulae

9  Shape Data  Renamed from Custom Properties  Link Data to Shapes  Multiple data sources per shape  Read only  Uses Office Data Connections (*.odc files)  PivotDiagrams  Diagrammatic version of PivotTables  Uses Office Data Connections (*.odc files)  Data Graphics  Data sensitive text and graphics on shapes

10 Visio Viewer Visio Drawings Data Diagramming ML Save As Web Visio Engine Visio SDK ShapeStudio Tools & Wizards Sample code ShapeSheet, Smart Shapes.NET Primary Interoperability Assemblies (PIAs) Visio Object Model (COM) Visio Drawing Control (ActiveX) Full Visio Client App Extensibility Support VSTO Add-in COM Add-in Add-ons VBA

11  Added table EmployeeManager  For non-direct reports  Added view vDirectReports  Adds LEVEL column to Employees  Added stored procedure uspGetEmployees  Can pass LEVEL as a parameter  Filters down to passed LEVEL  Added function ufnGetDottedLineManagers  Returns comma seperated list of manager ids

12  Any shape can have Shape Data

13  Data / Link Data to Shapes…

14

15  DataConnection and DataRecordsets  Visio 12.0 Type Lib  Add, AddFromConnectionFile, AddFromXML  UI and code links to:  Microsoft Office Excel & Access  SharePoint Services Lists  SQL Server Tables and Views  OLEDB & ODBC  Can also create link in code to :  SQL Server stored procedures  XML files

16 Dim dds As Visio.DataRecordset 'The data recordset Dim ary() As String ‘Array to hold the p key columns Dim SQLConnStr As String 'The connection string Dim SQLCommStr As String 'The Command string Dim datasetName As String 'The dataset name SQLConnStr = "Provider=SQLOLEDB.1;" & _ "Integrated Security=SSPI;" & _ "Persist Security Info=True;" & _ "Data Source=.;" & _ "Initial Catalog=AdventureWorks;" & _ "Use Procedure for Prepare=1“

17 SQLCommStr = "EXEC uspGetEmployees 1" ary() = Split("EmployeeID", ";") datasetName = "Employees“ Set dds = Visio.ActiveDocument.DataRecordsets.Add( _ SQLConnStr, SQLCommStr, _ VisDataRecordsetAddOptions.visDataRecordsetDelayQuery, _ datasetName) dds.SetPrimaryKey VisPrimaryKeySettings.visKeySingle, ary() dds.Refresh Visio.ActiveWindow.Windows.ItemFromID( _ visWinIDExternalData).Visible = True

18 Dim doc As Visio.Document Dim dst As Visio.DataRecordset Dim xmlFile As String Dim dom As New MSXML2.DOMDocument Dim OK As Boolean Set doc = Visio.ActiveDocument xmlFile = “MyXMLFile.xml" OK = dom.Load(xmlFile) Set dst = doc.DataRecordsets.AddFromXML( _ dom.XML, 0, “Any Name")

19  UI and code refreshing of DataRecordset .Refresh .GetAllRefreshConflicts .GetMatchingRowsForRefreshConflict .RemoveRefreshConflict  XML files can only be refreshed in code .RefreshUsingXML  Automation requires assigned name and file

20 Dim doc As Visio.Document Dim dst As Visio.DataRecordset Dim xmlFile As String Dim dom As New MSXML2.DOMDocument Dim OK As Boolean Set doc = Visio.ActiveDocument xmlFile = “MyXMLFile.xml" OK = dom.Load(xmlFile) For Each dst In Visio.ActiveDocument.DataRecordsets If dst.Name = “Any Name" Then dst.RefreshUsingXML dom.XML Exit For End If Next

21  Select a Master – Drag data row(s)  Drag a data row onto any shape  Shape Data key field(s) contain values - AutoLink

22  Basic Data Graphics usually added by default

23  Right mouse menu

24  Shape Data automatically added to shapes  Basic Data Graphics usually added by default

25  User-defined Cells  Shape Data  _VisDM_ prefixes column names  Unless already exist!

26

27  DropManyLinkedU  ObjectsToInstance()array of variants  XYs()array of doubles  DataRecordsetIDlong  DataRowIDs()array of longs  ApplyDataGraphicAfterLinkboolean  ShapeIDs()out array of longs

28 'Retrieve the row ids from the datarecordset Dim aryRowIDs() As Long aryRowIDs = drs.GetDataRowIDs("") 'Drop the master in random co-ords, and linked to the datarecordset, applying a DataGraphic Dim aryShapeIDs() As Long Dim applyDataGraphics As Boolean Visio.ActiveDocument.DocumentSheet.Cells( _ "User.msvLastAppliedDataGraphic").FormulaU = _ "=""Data - Employees""" applyDataGraphics = True Visio.ActivePage.DropManyLinkedU _ aryMsts, aryXYs, drs.ID, aryRowIDs, _ applyDataGraphics, aryShapeIDs

29 Drop Many...

30  Many types of diagrams require shapes to be connected  Organization Charts, Network diagrams, Process  Connecting shapes example code  ConnectSubordinates  ConnectDottedLineManagers  Can then use different layouts for display  LayoutPage... example code  LayoutSelection... example code

31 For iEmp = 0 To UBound(aryShapeIDs) 'Get the potential manager row Set shpEmp = Visio.ActivePage.Shapes.ItemFromID(aryShapeIDs(iEmp)) rowID = shpEmp.GetLinkedDataRow(drs.ID) varRowData = drs.GetRowData(rowID) 'Arrays are zero based empID = CLng(varRowData(empColumn - 1)) 'Filter the rows to get sub-ordinates of the current employee aryRowIDs = drs.GetDataRowIDs("ManagerID = " & CStr(empID)) 'Iterate thru the subordinate datarecordset rows For iSub = 0 To UBound(aryRowIDs) v = drs.GetRowData(aryRowIDs(iSub)) 'Get the subordinate shapes Visio.ActivePage.GetShapesLinkedToDataRow drs.ID, aryRowIDs(iSub), arySubShapeIDs 'Check that there is actually something in the array If IsArrayAllocated(arySubShapeIDs) = True Then 'Iterate thru the subordinate shapes For iSubShape = 0 To UBound(arySubShapeIDs) Set shpSub = Visio.ActivePage.Shapes.ItemFromID(arySubShapeIDs(iSubShape)) 'Create a dynamic connection from manager to subordinate shpEmp.AutoConnect shpSub, visAutoConnectDirUp Next iSubShape End If Next iSub Next iEmp

32 Private Sub LayoutPage( ByVal placeStyle As Visio.VisCellVals, _ ByVal routeStyle As Visio.VisCellVals, _ ByVal lineRouteExt As Visio.VisCellVals) 'Create the Section, Row, Cell stream array Dim arySRC(1 To 12) As Integer arySRC(1) = Visio.VisSectionIndices.visSectionObject arySRC(2) = Visio.VisRowIndices.visRowPageLayout arySRC(3) = Visio.VisCellIndices.visPLOPlaceStyle arySRC(4) = Visio.VisSectionIndices.visSectionObject arySRC(5) = Visio.VisRowIndices.visRowPageLayout arySRC(6) = Visio.VisCellIndices.visPLORouteStyle arySRC(7) = Visio.VisSectionIndices.visSectionObject arySRC(8) = Visio.VisRowIndices.visRowPageLayout arySRC(9) = Visio.VisCellIndices.visPLOLineRouteExt 'Required to force update of connectors arySRC(10) = Visio.VisSectionIndices.visSectionObject arySRC(11) = Visio.VisRowIndices.visRowPageLayout arySRC(12) = Visio.VisCellIndices.visPLOAvenueSizeX

33 'Create the Formula array Dim aryFormula(0 To 3) As Variant aryFormula(0) = placeStyle aryFormula(1) = routeStyle aryFormula(2) = lineRouteExt 'Required to force update of connectors aryFormula(3) = Visio.ActivePage.PageSheet.CellsSRC( _ arySRC(10), arySRC(11), arySRC(12)) ‘Set the page cell formulae Visio.ActivePage.PageSheet.SetFormulas _ arySRC(), aryFormula(), Visio.visSetBlastGuards Visio.ActivePage.Layout Visio.ActivePage.ResizeToFitContents Visio.ActiveWindow.ViewFit = visFitPage End Sub

34 Public Sub LayoutPageHierarchy() LayoutPage _ VisCellVals.visPLOPlaceHierarchyTopToBottomCenter, _ VisCellVals.visLORouteOrgChartNS, _ VisCellVals.visLORouteExtStraight End Sub Public Sub LayoutPageRadial() LayoutPage _ VisCellVals.visPLOPlaceRadial, _ VisCellVals.visLORouteCenterToCenter, _ VisCellVals.visLORouteExtDefault End Sub

35  Standard Hierachy Org Chart Page Layout  Modified with Selection Layout  cf Org Chart Wizard

36  Other Page Layouts may also be suitable  Compact Tree  Radial  Circular

37 Reading Data and Layouts

38  Added EmployeeManager table  Allows secondary managers

39 'Get the DataRecordset Dim drs As DataRecordset Set drs = Visio.ActiveWindow.Windows.ItemFromID( _ Visio.visWinIDExternalData).SelectedDataRecordset... ‘Get the connection string Dim conStr As String conStr = drs.DataConnection.ConnectionString ‘Use the connection string to create a connection Dim dbCnxn As New ADODB.Connection dbCnxn.ConnectionString = conStr dbCnxn.Open dbCnxn.BeginTrans...

40

41  Color By Value  Text  Data Bar  Icon Set

42  Colors can be customised

43  Text values, with optional label

44  Variable size depending on data value

45  Maximum of 5 icons per set  specify values for icon display

46  Document stencil only shows visible masters  Drawing Explorer displays all (but not type)

47 Public Sub EnumMasters() Dim mst As Visio.Master Debug.Print "ID", "Hidden", "Type", "IsDGCallout", "Name" For Each mst In Visio.ActiveDocument.Masters Debug.Print mst.ID, mst.Hidden, mst.Type, _ mst.Shapes(1).IsDataGraphicCallout, mst.name Next mst End Sub

48 Document Stencil Document Page Normal Master GraphicItem Master DataGraphic Master Master instance with DataGraphic

49  Create a new DataGraphic master  Document.Masters.AddEx(visTypeDataGraphic)  Open the new Master  Master.Open  Copy an existing GraphicItem to it .GraphicItems.AddCopy(existingGI)  Amend GraphicItems .HorizontalPosition &.VerticalPosition .SetExpression VisGraphicField, string  Close Master

50  Group shape contains special cells

51  Some User-defined cells required  One Shape Data row required

52  Fills, visibility, etc linked to parent User cell

53  User.msvCalloutIconNumber  = 0 ( unknown )  = 1 Male  = 2 Male + Married  = 3 Female  = 4 Female + Married

54  Select “More Fields...” in Data field box  Can use cell names  Can use Shape Data labels in braces {...}

55  Set criteria in Edit Icon Set

56  A Data Bar graphic item can be  Multiple times in same Data Graphic  In multiple Data Graphics  Each instance has different value ranges  Min and max values read from shape instances  Prop. msvCalloutField  Data Bar can have multiple fields  E.g. Multi-bar graph  Prop. msvCalloutPropFieldn where n=2 to 5  Update master using.Open

57 Document Stencil Document Page 5. Update DataGraphic Master Data Bar GraphicItem Min/Max Values 2. Collect Data Bar GraphicItems 1. Get Active DataGraphic Master 4. Read Min/Max of Data Bar Graphic Items 3. Create Selection

58 Const UserType As String = "User.msvCalloutType“ Const UserDGID As String = "User.visDGItemID " Const PropMax As String = "Prop.msvCalloutPropMax" Const PropMin As String = "Prop.msvCalloutPropMin“ 'Get the active Data Graphic Dim mstDG As Master Set mstDG = GetActiveDataGraphic im dicDataBarShapes As New Dictionary Dim gi As Visio.GraphicItem 'Create a dictionary of data bars For Each gi In mstDG.GraphicItems If gi.Type = visTypeDataBar Then dicDataBarShapes.Add CStr(gi.ID), 0 End If Next gi

59 Dim colDataBarShapes As New Collection Dim itmGraphic As Visio.shape Dim gID As String 'Update the data bars dictionary with shape pseudo-index For Each itmGraphic In mstDG.Shapes(1).Shapes If itmGraphic.IsDataGraphicCallout = True Then If itmGraphic.Cells(UserType).ResultStr("") = "Data Bar" Then gID = CStr(itmGraphic.Cells(UserDGID).ResultInt("", 0)) dicDataBarShapes.Item(gID) = itmGraphic.NameU colDataBarShapes.Add gID End If Next itmGraphic 'Iterate thru each page to collect min/max values For Each pag In Visio.ActiveDocument.Pages 'Get all shapes that use this data graphic master Set sel = pag.CreateSelection(visSelTypeByDataGraphic, 0, mstDG)... Next shp Next pag

60 ... 'Finally - update the ItemGraphic in the DataGraphic Master Dim mstCopy As Visio.Master Set mstCopy = mstDG.Open For Each itmGraphic In mstCopy.Shapes(1).Shapes If itmGraphic.IsDataGraphicCallout = True Then If itmGraphic.Cells(UserType).ResultStr("") = "Data Bar" Then gID = CStr(itmGraphic.Cells(UserDGID).ResultInt("", 0)) itmGraphic.Cells(PropMax).FormulaU = "=" & dicMaxVal.Item(gID) itmGraphic.Cells(PropMin).FormulaU = "=" & dicMinVal.Item(gID) End If Next itmGraphic 'Close the copy to update all instances mstCopy.Close

61 Updating DataBar Minimum and Maximum Values automatically

62  Either File / New /Business / PivotDiagram  Or Data / Insert PivotDiagram…  Create a new connection or use an existing one

63

64  Total Pivot Node automatically added at the top left of page

65  Breakdown data into Categories  Sort  Merge  Promote  Collapse

66  Uses Master from any stencil to reinforce node type

67  Import Cubes or Perspectives

68 'Filter the rows to get all rows with requested level aryRowIDs = drs.GetDataRowIDs("LEVEL = " & CStr(lvl)) 'Iterate thru the returned datarecordset rows For iRow = 0 To UBound(aryRowIDs) 'Get the shapes linked to the data row Visio.ActivePage.GetShapesLinkedToDataRow _ drs.ID, _ aryRowIDs(iRow), _ aryShapeIDs For iShp = 0 To UBound(aryShapeIDs) Visio.ActiveWindow.Select _ Visio.ActivePage.Shapes.ItemFromID(aryShapeIDs(iShp)), _ Visio.visSelect Next iShp Next iRow

69  Breakdown data into Categories  Sort  Merge  Promote  Collapse

70  PivotDiagram is an add-on  Not an API extension  Only launched in code from SharePoint Services List (soon to be published MSDN article)  Use code to select in various ways  Aids in applying DataGraphics and extra DataRecordsets  E.g. SelectSameBreakdownName sample

71 Public Const PropMember As String = "Prop._VisDM_Member" Public Const UserSelfShape As String = "User.visDDSelfShapeID" Public Const UserParentBDShape As String = "User.visDDParentBDShape" Public Const UserParentDDShape As String = "User.visDDParentDDShape" Public Const UserDDColumn As String = "User.visDDColumnIndex" Public Const UserRecordsetID As String = "User.visDDRecordsetID" Public Const UserDDShapeType As String = "User.visDDShapeType" Public Enum ePivotShapeType Node = 1 Breakdown = 2 info = 3 Title = 4 Connector = 5 End Enum

72 ... Set vsoWindow = Visio.Application.ActiveWindow If vsoWindow.Selection.Count > 0 Then Set shp = vsoWindow.Selection.PrimaryItem If IsPivotNode(shp) = True Then breakdownName = _ GetGroupNameByID(GetBreakdownID(shp)) SelectByBreakdownName breakdownName End If

73 ... Set vsoPage = Visio.Application.ActivePage For Each shp In vsoPage.Shapes If shp.ID = parentBDShapeID Then Set groupShape = shp parentText = groupShape.Characters.Text Exit For End If Next GetGroupNameByID = parentText

74 Public Function GetBreakdownID( _ ByVal shape As Visio.shape) As Integer If shape.CellExists(UserParentBDShape, _ Visio.VisExistsFlags.visExistsAnywhere) = 0 Then GetBreakdownID = 0 Else GetBreakdownID = _ CInt(shape.Cells(UserParentBDShape).ResultIU) End If End Function

75 IsPivotNode = isPivotShapeType(shape, ePivotShapeType.Node) Private Function isPivotShapeType(ByVal shape As Visio.shape, _ ByVal pivotShapeType As ePivotShapeType) As Boolean If Not shape.CellExists(UserDDShapeType, _ Visio.VisExistsFlags.visExistsAnywhere) = 0 Then If shape.Cells(UserDDShapeType).ResultIU = pivotShapeType Then isPivotShapeType = True Else isPivotShapeType = False End If Else isPivotShapeType = False End If End Function

76 Custom Selections

77  Can File / Remove Hidden Information  Visio.Document.RemoveHiddenInformation = True

78  Legends for Icon Sets & Color By Value

79

80  TS Exam  Microsoft Office Visio 2007, Application Development  545.mspx 545.mspx  Deploying Visio Solutions  Working with External Data  Developing Visio Libraries  Automating Visio Diagrams  Publishing and Viewing Visio Diagrams

81  New Microsoft Certified Partner Specialization  Information Worker Competency  Data Visualization Specialization  https://partner.microsoft.com/ https://partner.microsoft.com/  Need 2 individuals that have passed Visio TS exam

82  Visio 2007 SDK   Visio 2007 Solution Development Workshop  1e-581e f45de10b4c2&DisplayLang=en 1e-581e f45de10b4c2&DisplayLang=en  Visio Developer Portal   Visio Insight blog   Visio MVP web site   My Visio Blog 

83 David J Parker Microsoft MVP (Visio) Book


Download ppt "David J Parker MVP (Visio) bVisual ltd  Microsoft MVP (Visio)  Microsoft MCP (Visio, SQL)  Pre-Microsoft acquisition  Visio Business Partner, 1996-8."

Similar presentations


Ads by Google