Setting Options Programmatically in Visio 2010 for Publishing to SharePoint Server 2010

Summary:  Learn how to programmatically save Microsoft Visio 2010 diagrams as web drawings (.vdw files) for use with Visio Services in Microsoft SharePoint Server 2010 with Enterprise Client Access License. This enables users to view and interact with Visio diagrams in SharePoint without installing Visio 2010 on their computers.

Applies to: Office 2010 | SharePoint Server 2010 | Visio 2010 | Visio Premium 2010

In this article
Introduction
Creating a Visio File to Use with the Code Examples
Saving a Visio 2010 Diagram as a Web Drawing (.vdw File) Programmatically
Setting Page-Publishing Options
Setting Data Recordset-Publishing Options
Conclusion
Additional Resources

Published:  September 2010

Provided by:  Saul Candib, Microsoft Corporation

Contents

  • Introduction

  • Creating a Visio File to Use with the Code Examples

  • Saving a Visio 2010 Diagram as a Web Drawing (.vdw File) Programmatically

  • Setting Page-Publishing Options

  • Setting Data Recordset-Publishing Options

  • Conclusion

  • Additional Resources

Introduction

You can use the Visual Basic for Applications (VBA) object model exposed by Microsoft Visio 2010 to save Visio 2010 diagrams as web drawings (.vdw files). To do so, use the SaveAs method of the Document object, assigning the file the .vdw extension.

Note

This capability is available only in Microsoft Visio Professional 2010 and Microsoft Visio Premium 2010.

In addition, you can set options for programmatically publishing these files to Visio Services in Microsoft SharePoint Server 2010 with Enterprise Client Access License. This article explains how to use the methods and properties of the new ServerPublishOptions object to set publishing options for the active Visio document. To get a ServerPublishOptions object for any document, including documents other than the active document, you can use the ServerPublishOptions property of the Document object.

Note

You can also set options for publishing to Visio Services in the Visio 2010 user interface by clicking the File tab, clicking Save As, clicking Web Drawing (*.vdw) in the Save as type list, and then clicking Options.

Creating a Visio File to Use with the Code Examples

For the sake of simplicity, the code examples in this article are designed to be used with a Visio 2010 file that contains four pages, each containing a single geometric shape, each of which is linked to data in a row in a Microsoft Excel spreadsheet. You can, of course, modify the examples, as necessary, to work with your own files and data sources.

To create a Visio 2010 file that works with these examples without further modification, and to create an Excel workbook to use as the data source for the file, use the general procedures that follow. (Details about how to perform each step are beyond the scope of this article—see end-user Help and the links at the end of this article for specifics about any particular step.)

To create a Visio file to use with the code examples

  1. Create a new Visio 2010 file from the Basic Diagram template

  2. Add three pages to the file.

  3. Add a single shape to each page: an octagon to one, a circle to another, a star to a third, and a pentagon to a fourth. The page order is unimportant, as is the location of each shape on the page.

  4. Name each page to correspond to the shape it contains.

  5. Use the Data Selector wizard to link the drawing to data in an Excel spreadsheet. The next procedure explains how to create this spreadsheet.

    Note

    To start the Data Selector wizard, on the Data tab, click Link Data to Shapes.

  6. Link each shape to the corresponding data row in the External Data window.

  7. Add the code examples in this article to the ThisDocument project in the Visual Basic Editor window in the file.

  8. Optionally, edit the data graphic applied to the shapes to add a new Color by Value data field, associating the appropriate fill color with each Color value.

  9. Save the file to the location of your choice, naming it however you like.

To create an Excel workbook as a data source for the Visio 2010 file

  1. Create a new Excel file.

  2. Add the following text to the first five rows of the first two columns of Sheet1.

    Shape

    Color

    Circle

    Red

    Star

    Blue

    Octagon

    Green

    Pentagon

    Yellow

  3. Save the file, naming it however you like, to a document library on the SharePoint Server 2010 site where you want to display your Visio drawing.

Note

You can connect your Visio drawing to an Excel workbook saved in any location. However, if you want the Visio 2010 diagram in Visio Services to reflect any changes to the data in the Excel workbook when the diagram is refreshed, save the Excel workbook to a SharePoint document library, link your diagram to the Excel workbook in the SharePoint library, and then save your diagram to the same SharePoint library.

Saving a Visio 2010 Diagram as a Web Drawing (.vdw File) Programmatically

The following code shows how to save the active Visio 2010 diagram as a web drawing (.vdw file) for use with Visio Services. Modify the name of the file and the location at which you want to save the file.

Public Sub SaveAsVDW()

    Visio.ActiveDocument.SaveAs ("C:\WebDrawingName.vdw")
    
End Sub

Setting Page-Publishing Options

If the document that you want to save as a web drawing (.vdw file) has more than a single page, you can specify exactly which pages you want to include in the publication. The SetPagesToPublish method allows you to publish either all pages in the document or selected pages that you specify by page name. The GetPagesToPublish method lets you determine which pages are currently set to be published. The IncludePage method includes a specific page in the set of pages to be published, and the ExcludePage method excludes a specific page. The IsPublishedPage property tells you if a specific page is already set to be published.

Specifying the Pages to Publish

You can specify a set of pages to be published. The following code example shows how to use the SetPagesToPublish method to specify exactly which pages to publish. The code creates an array of strings, each of which corresponds to the name of a page to publish, and then passes that array to the method. Other parameters passed to the method specify that only selected pages are to be published, and that the page names in the array are universal names.

Public Sub SetPagesToPublish_Example()

    Dim aryNamesArray() As String
    ReDim aryNamesArray(1 To 2)
    aryNamesArray(1) = "Octagon"
    aryNamesArray(2) = "Circle"

    Visio.ActiveDocument.ServerPublishOptions.SetPagesToPublish visPublishPageSelect, aryNamesArray, visLangUniversal
    
End Sub

Determining Which Pages Are Going to Be Published

You can use the GetPagesToPublish method to determine which pages are set to be published. The following code shows how to use this method to get these pages. The method takes a constant value from the VisLangFlags enumeration that specifies whether the names of the pages in the array returned are local or universal. It returns two values in the form of the two out parameters that are passed to it:

  • A constant value from the VisPublishPages enumeration that indicates whether all pages or only selected pages are to be published.

  • An array of strings that is populated with the names of pages to be published.

Public Sub GetPagesToPublish_Example()

    Dim aryNamesArray() As String
    Dim cnstLangFlag As VisLangFlags
    Dim cnstPagesToPublish As VisPublishPages

    cnstLangFlag = visLangUniversal
    Visio.ActiveDocument.ServerPublishOptions.GetPagesToPublish cnstLangFlag, cnstPagesToPublish, aryNamesArray
    
    Dim intCounter As Integer    
    For intCounter = LBound(aryNamesArray) To UBound(aryNamesArray)
        Debug.Print aryNamesArray(intCounter)
    Next intCounter    
    
    If cnstPagesToPublish = visPublishPageAll Then
        Debug.Print "Print all pages"
    Else: Debug.Print "Print selected pages"
    End If
            
End Sub

Including and Excluding Specific Pages

The following code shows how to use the IncludePage method to include a specific page in the set of pages to be published. It also shows how to use the IsPublishedPage property to determine whether the page you want to include is already included.

Public Sub IncludePage_Example()

    If Not Visio.ActiveDocument.ServerPublishOptions.IsPublishedPage("Star", visLangUniversal) Then
        Visio.ActiveDocument.ServerPublishOptions.IncludePage "Star", visLangUniversal
    Else
        Debug.Print "Star is already set to be published."
    End If
    
End Sub

The following code shows how to use the ExcludePage method to exclude a specific page from the set of pages to be published.

Public Sub ExcludePage_Example()

    Visio.ActiveDocument.ServerPublishOptions.ExcludePage "Circle", visLangUniversal

End Sub

Setting Data Recordset-Publishing Options

If the document that you want to save as a web drawing (.vdw file) to be used with Visio Services contains data in the form of data recordsets, you can specify exactly which data recordsets you want to be connected to the web drawing file, so that the drawing is refreshed in the browser as data changes. The SetRecordSetsToPublish method allows you to publish either all recordsets in the document, or selected data recordsets that you specify by ID. The GetRecordSetsToPublish method lets you determine which data recordsets are currently set to be published.

Specifying the Data Recordsets to Publish

The following code shows how to use the SetRecordSetsToPublish method to specify which data recordsets in the active document are published when the document is saved as a web drawing. The code passes an array of Long values that represent the IDs of the data recordsets to be included.

Public Sub SetRecordsetsToPublish_Example()

    Dim aryDataRecordsetIDs() As Long
    ReDim aryDataRecordsetIDs(1 To ActiveDocument.DataRecordsets.Count)
    aryDataRecordsetIDs(1) = 1
        
    Visio.ActiveDocument.ServerPublishOptions.SetRecordsetsToPublish visPublishDataRecordsetSelect, aryDataRecordsetIDs
    
End Sub

Determining Which Data Recordsets Are Going to Be Published

The following code shows how to use the GetRecordSetsToPublish method to determine which data recordsets in the active document are currently set to publish. The method returns two out parameters that indicate whether no data recordsets, all data recordsets, or selected data recordsets are to be published; and in any but the first case, which data recordsets are the ones to be published.

Public Sub GetRecordSetsToPublish_Example()

    Dim aryDataRecordsetIDs() As Long
    Dim cnstPublishFlag As VisPublishDataRecordsets
    Dim vsoDataRecordsets As DataRecordsets
    
    Visio.ActiveDocument.ServerPublishOptions.GetRecordsetsToPublish cnstPublishFlag, aryDataRecordsetIDs
    
    If Not cnstPublishFlag = visPublishDataRecordsetNone Then
    
        Dim intCounter As Integer
        
        For intCounter = LBound(aryDataRecordsetIDs) To UBound(aryDataRecordsetIDs)
            Debug.Print ActiveDocument.DataRecordsets.ItemFromID(aryDataRecordsetIDs(intCounter)).Name
        Next intCounter
    
    Else
        Debug.Print "No data recordsets are set to be published."
    End If
    
End Sub

Conclusion

This article shows how to use VBA code to set options programmatically for saving Visio 2010 drawings as web drawings (.vdw files) for use with Visio Services in Microsoft SharePoint Server 2010. By using VBA code, you can specify the pages you want to publish and the data recordsets you want to include.

Additional Resources

Visio Developer Center

Visio Insights Blog

About Connecting to Data in Visio

About Linking Shapes to Data

About Displaying Data Graphically