SlideShare uma empresa Scribd logo
1 de 28
Visit bVisual.net
Embedding Visio diagrams in
SharePoint and Teams using SPFx
David J Parker, Microsoft MVP (Visio)
March 2020
Microsoft MVP (Visio)
Independent Visio Consultant
bVisual.net
@VisioRules
visiorules.com
blog.bvisual.net
visualizinginformation.com
• Started as building architect (RIBA)
• Linked CAD to databases for merchant
banks in London & New York
• Switched to Visio in mid ‘90’s
• Founded bVisual in 1998
• Visio consultant, developer, trainer,
blogger, author
• 15 years MVP
• UK based, global reach
bit.ly/Visio2016Data
About David J Parker
Understanding the possibilities with Visio diagrams
Reviewing the Visio JavaScript API
Introducing the SharePoint Framework (SPFx)
Creating a SPFx WebPart
Supporting Microsoft Teams
Adding the Visio package
Agenda
Understanding the
possibilities with Visio
diagrams
SharePoint Web page
(View)
Web
Windows Desktop
(Create/Edit)
Windows Desktop
SharePoint / OneDrive for
Business
Cloud Store
Positioning Visio in the Web
Data source
Visio
document
JavaScript
C++
.Net
VB
VBA
VBA
Visio
document
Visio
document
Power BI
Visio
document
Visio
document
Power BI
Desktop
Interacting with Visio in the Cloud – March 2020
Visio documents in OneDrive or SharePoint
Edit in Visio Plan 2*
Create/
update
diagrams
View/Edit
data
View/
edit/
follow
hyperlinks
View/ edit
layers
Search
text and
data
Print /
Export
Edit in Visio
Plan 1
Simple
diagrams
Print /
Export to
pdf &
image
View in Visio File
Viewer
View data
Follow
hyperlinks
Search
text
View in
Visio Viewer
for iOS
View
layers
Search
text
* Windows only
A Solution with Visio embedded in a SharePoint page
Visio diagrams in file viewer or custom web pages
Visio Desktop Custom Template
Custom shapes
• Automate appearance, colours, icons, hyperlink
• Automatic high contrast text
Linked SharePoint Lists
• Centralise data for consistency
• Automatically update shape data and colours
Accessibility
• Automate Alt Text
• Automate text high contrast
• Expose navigation order to interface
Hyperlinks
• Visio page to Visio page
• Visio document to Visio document
• Visio shape to documentation
Validation rules
• Ensure correct structure
JavaScript API aided by Visio ShapeSheet
Page loaded
• Web part height adjusted suit the aspect ratio of the page
• Significant shapes listed in navigation order
• Legend is automatically displayed
List item selected
• Shape selected
• Shape text, alt title and description displayed
• Previous and Next buttons displayed
• Hyperlinks are grouped by type
Shape selected
• Arrows go to other pages
Mouse enters shape
• Custom tooltip appears
Shape data
• Values provides data for list and groupings
• Alt title and description automatically updated from
shape data
• Navigation order exposed in data
Shape hyperlinks
• Arrows can be clicked to go to other pages
• Some hyperlinks open a target Visio document within
the same web part
• Some hyperlinks open external links in a controlled
manner
Shape graphics
• Graphics change by data value or containment
• Icons displayed if specific data or hyperlinks present
Reviewing the Visio
JavaScript API
Hierarchy of Objects in the JavaScript API
Application Document
DocumentView
Page(s)
PageView
Selection/
Shape(s)
ShapeView
ShapDataItem(s)
Hyperlink(s)
Comment(s)
Comment(s)
Overview
Application Document
DocumentView
Page
PageView
PageCollection ShapeCollection Shape
ShapeView
ShapeDataItemCollection
HyperlinkCollection Hyperlink
ShapeDataItem
CommentCollection Comment
<<Interface>>
BoundingBox
<<Interface>>
Highlight
<<Interface>>
Position
RequestContext
Selection
<<Interface>>
DataRefreshCompleteEventArgs
<<Interface>>
DocumentLoadCompleteEventArgs
<<Interface>>
PageLoadCompleteEventArgs
<<Interface>>
PageRenderCompleteEventArgs
<<Interface>>
SelectionChangedEventArgs
<<Interface>>
ShapeMouseEnterEventArgs
<<Interface>>
ShapeMouseLeaveEventArgs
<<Enumeration>>
ErrorCodes
<<Enumeration>>
OverlayHorizontalAlignment
<<Enumeration>>
OverlayType
<<Enumeration>>
OverlayVerticalAlignment
<<Enumeration>>
ToolBarType
Visio JavaScript API
-context
-load(...)
-showBorders
-showToolbars
-set(...)
-showToolbar(...)
-toJSON()
-application
-getActivePage()
-context
-pages
-view
-load(...)
-set(...)
-setActivePage(...)
-startDataRefresh()
-toJSON()
-context
-disableHyperlinks
-load(...)
-set(...)
-disablePan
-disablePanZoomWindow
-disableZoom
-hideDiagramBoundary
-toJSON()
-allShapes
-activate()
-context
-height
-index
-load(...)
-set(...)
-toJSON()
-comments
-isBackground
-name
-shapes
-view
-width
-context
-load(...)
-set(...)
-zoom
-toJSON()
-context
-getCount()
-items
-toJSON()
-getItem(...)
-load(...)
-context
-getCount()
-items
-toJSON()
-getItem(...)
-load(...)
-getBounds()
-context
-hyperlinks
-id
-load(...)
-set(...)
-toJSON()
-comments
-name
-subShapes
-view
-select
-shapeDataItems
-text
-context
-addOverlay(...)
-set(...)
-highlight
-toJSON()
-load(...)
-removeOverlay(...)
-showOverlay(...)
-getCount()
-toJSON()
-getItem(...)
-load(...)
-context
-getCount()
-items
-toJSON()
-getItem(...)
-load(...)
-context
-description
-extraInfo
-load(...)
-toJSON()
-address
-subAddress
-context
-format
-formattedValue
-load(...)
-toJSON()
-label
-value
-context
-getCount()
-items
-toJSON()
-getItem(...)
-load(...)
-context
-date
-text
-load(...)
-toJSON()
-author
-set(...)
-height
-width
-x
-y
-color
-width
-x
-y
-(constructor)(url)
-document
-context
-shapes
-toJSON()
-load(...)
-document
-success
-success
-pageName
-success
-pageName
-success
-pageName
-shapeNames
-pageName
-shapeName
-pageName
-shapeName
-accessDenied
-unsupportedOperation
-generalException
-itemNotFound
-notImplemented
-center
-left
-right
-html
-image
-text
-bottom
-middle
-top
-commandBar
-pageNavigationBar
-statusBar
-context
-items
Classes
Interfaces
Enums
Application to Page
Classes
Application Document
DocumentView
Page
PageView
PageCollection ShapeCollection Shape
ShapeView
<<Interface>>
BoundingBox
<<Interface>>
Highlight
<<Interface>>
Position
RequestContext
Selection
<<Interface>>
DataRefreshCompleteEventArgs
<<Interface>>
DocumentLoadCompleteEven
<<Interface>>
PageLoadCompleteEventArgs
<<Interface>>
PageRenderCompleteEventArg<<Enumeration>>
ErrorCodes
<<Enumeration>>
ToolBarType
-context
-load(...)
-showBorders
-showToolbars
-set(...)
-showToolbar(...)
-toJSON()
-application
-getActivePage()
-context
-pages
-view
-load(...)
-set(...)
-setActivePage(...)
-startDataRefresh()
-toJSON()
-context
-disableHyperlinks
-load(...)
-set(...)
-disablePan
-disablePanZoomWindow
-disableZoom
-hideDiagramBoundary
-toJSON()
-allShapes
-activate()
-context
-height
-index
-load(...)
-set(...)
-toJSON()
-comments
-isBackground
-name
-shapes
-view
-width
-context
-load(...)
-set(...)
-zoom
-toJSON()
-context
-getCount()
-items
-toJSON()
-getItem(...)
-load(...)
-context
-getCount()
-items
-toJSON()
-getItem(...)
-load(...)
-getBounds()
-context
-hyperlinks
-id
-load(...)
-set(...)
-toJSON()
-comments
-name
-subShapes
-view
-select
-shapeDataItems
-text
-context
-addOverlay(...)
-set(...)
-highlight
-toJSON()
-load(...)
-removeOverlay(...)
-showOverlay(...)
-height
-width
-x
-y
-color
-width
-x
-y
-(constructor)(url)
-document
-context
-shapes
-toJSON()
-load(...)
-document
-success
-success
-pageName
-success
-pageName
-success-accessDenied -commandBar
Classes
• Application
• RequestContext
• Document
• DocumentView
• PageCollection
• Page
• PageView
Selection and Shape
Classes
Application Document
DocumentView
Page
PageView
PageCollection ShapeCollection Shape
ShapeView
ShapeDataItemCollection
HyperlinkCollection Hyperlink
ShapeDataItem
CommentCollection Comment
<<Interface>>
BoundingBox
<<Interface>>
Highlight
<<Interface>>
Position
RequestContext
Selection
<<Interface>>
DataRefreshCompleteEventArgs
<<Interface>>
DocumentLoadCompleteEventArgs
<<Interface>>
PageLoadCompleteEventArgs
<<Interface>>
PageRenderCompleteEventArgs<<Enumeration>>
ErrorCodes
<<Enumeration>>
ToolBarType
-context
-load(...)
-showBorders
-showToolbars
-set(...)
-showToolbar(...)
-toJSON()
-application
-getActivePage()
-context
-pages
-view
-load(...)
-set(...)
-setActivePage(...)
-startDataRefresh()
-toJSON()
-context
-disableHyperlinks
-load(...)
-set(...)
-disablePan
-disablePanZoomWindow
-disableZoom
-hideDiagramBoundary
-toJSON()
-allShapes
-activate()
-context
-height
-index
-load(...)
-set(...)
-toJSON()
-comments
-isBackground
-name
-shapes
-view
-width
-context
-load(...)
-set(...)
-zoom
-toJSON()
-context
-getCount()
-items
-toJSON()
-getItem(...)
-load(...)
-context
-getCount()
-items
-toJSON()
-getItem(...)
-load(...)
-getBounds()
-context
-hyperlinks
-id
-load(...)
-set(...)
-toJSON()
-comments
-name
-subShapes
-view
-select
-shapeDataItems
-text
-context
-addOverlay(...)
-set(...)
-highlight
-toJSON()
-load(...)
-removeOverlay(...)
-showOverlay(...)
-getCount()
-toJSON()
-getItem(...)
-load(...)
-context
-getCount()
-items
-toJSON()
-getItem(...)
-load(...)
-context
-description
-extraInfo
-load(...)
-toJSON()
-address
-subAddress
-context
-format
-formattedValue
-load(...)
-toJSON()
-label
-value
-context
-getCount()
-items
-toJSON()
-getItem(...)
-load(...)
-context
-date
-text
-load(...)
-toJSON()
-author
-set(...)
-height
-width
-x
-y
-color
-width
-x
-y
-(constructor)(url)
-document
-context
-shapes
-toJSON()
-load(...)
-document
-success
-success
-pageName
-success
-pageName
-success-accessDenied -commandBar
-context
-items
Classes
• ShapeCollection
• Selection
• Shape
• ShapeView
• ShapeDateItemCollection
• HyperlinkCollection
• CommentCollection
• ShapeDataItem
• Hyperlink
• Comment
Misc Interfaces and
Enums
DocumentView
PageView
ShapeView
<<Interface>>
BoundingBox
<<Interface>>
Highlight
<<Interface>>
Position
RequestContext
Selection
<<Interface>>
DataRefreshCompleteEventArgs
<<Interface>>
DocumentLoadCompleteEventA
<<Interface>>
PageLoadCompleteEventArgs
<<Interface>>
PageRenderCompleteEventArgs
<<Interface>>
SelectionChangedEventArgs
<<Interface>>
ShapeMouseEnterEventArgs
<<Interface>>
ShapeMouseLeaveEventArgs
<<Enumeration>>
ErrorCodes
<<Enumeration>>
OverlayHorizontalAlignment
<<Enumeration>>
OverlayType
<<Enumeration>>
OverlayVerticalAlignment
<<Enumeration>>
ToolBarType
-toJSON() -view
-load(...)
-setActivePage(...)
-startDataRefresh()
-context
-disableHyperlinks
-load(...)
-set(...)
-disablePan
-disablePanZoomWindow
-disableZoom
-hideDiagramBoundary
-toJSON()
-activate()
-load(...)
-set(...)
-toJSON()
-name
-shapes
-view
-width
-context
-load(...)
-set(...)
-zoom
-toJSON()
-getBounds()
-load(...)
-set(...)
-toJSON()
-subShapes
-view
-shapeDataItems
-text
-context
-addOverlay(...)
-set(...)
-highlight
-toJSON()
-load(...)
-removeOverlay(...)
-showOverlay(...)
-height
-width
-x
-y
-color
-width
-x
-y
-(constructor)(url)
-document
-context
-shapes
-toJSON()
-load(...)
-document
-success
-success
-pageName
-success
-pageName
-success
-pageName
-shapeNames
-pageName
-shapeName
-pageName
-shapeName
-accessDenied
-unsupportedOperation
-generalException
-itemNotFound
-notImplemented
-center
-left
-right
-html
-image
-text
-bottom
-middle
-top
-commandBar
-pageNavigationBar
-statusBar
Miscellaneous Interfaces
• BoundingBox
• Highlight
• Position
Enums
• ErrorCodes
• ToolBarType
• OverlayType
• OverlayHorizontalAlignment
• OverlayVerticalAlignment
EventArg Interfaces
DocumentView
PageView
ShapeView
CommentCollection Comment
<<Interface>>
BoundingBox
<<Interface>>
Highlight
<<Interface>>
Position
RequestContext
<<Interface>>
DataRefreshCompleteEventArgs
<<Interface>>
DocumentLoadCompleteEventArgs
<<Interface>>
PageLoadCompleteEventArgs
<<Interface>>
PageRenderCompleteEventArgs
<<Interface>>
SelectionChangedEventArgs
<<Interface>>
ShapeMouseEnterEventArgs
<<Interface>>
ShapeMouseLeaveEventArgs
<<Enumeration>>
ErrorCodes
<<Enumeration>>
OverlayHorizontalAlignment
<<Enumeration>>
OverlayType
<<Enumeration>>
OverlayVerticalAlignment
<<Enumeration>>
ToolBarType
Visio JavaScript API
-context
-disableHyperlinks
-load(...)
-set(...)
-disablePan
-disablePanZoomWindow
-disableZoom
-hideDiagramBoundary
-toJSON()
-activate()
-load(...)
-set(...)
-toJSON()
-context
-load(...)
-set(...)
-zoom
-toJSON()
-getBounds()
-load(...)
-set(...)
-toJSON()
-context
-addOverlay(...)
-set(...)
-highlight
-toJSON()
-load(...)
-removeOverlay(...)
-showOverlay(...)
-getCount()
-toJSON()
-getItem(...)
-load(...)
-context
-description
-extraInfo
-load(...)
-toJSON()
-address
-subAddress
-context
-getCount()
-items
-toJSON()
-getItem(...)
-load(...)
-context
-date
-text
-load(...)
-toJSON()
-author
-set(...)
-height
-width
-x
-y
-color
-width
-x
-y
-(constructor)(url)
-document
-shapes
-toJSON()
-load(...)
-document
-success
-success
-pageName
-success
-pageName
-success
-pageName
-shapeNames
-pageName
-shapeName
-pageName
-shapeName
-accessDenied
-unsupportedOperation
-generalException
-itemNotFound
-notImplemented
-center
-left
-right
-html
-image
-text
-bottom
-middle
-top
-commandBar
-pageNavigationBar
-statusBar
-context
-items
EventArgs Interfaces
• DataRefreshCompleteEventsArgs
• DocumentLoadCompleteEventArgs
• PageLoadEventArgs
• PageRefreshEventArgs
• SelectionChangedEventArgs
• ShapeMouseEnterEventArgs
• ShapeMouseLeaveEventArgs
Introducing the
SharePoint Framework
(SPFx)
SPFx is a page and web part model
• provides full support for client-side SharePoint development
It is framework-agnostic.
• use any JavaScript framework like React, Handlebars, Knockout, Angular, and more
End users can use SPFx client-side solutions
• if approved by the tenant administrators (or their delegates) on all sites
• including self-service team, group, or personal sites.
SPFx web parts are multi-functional
• can be added to both classic and modern pages
• can be made into Microsoft Teams Tabs or Personal Apps
What is the SharePoint Framework (SPFx )?
Toolset Comparison
nodeJs
• Asynchronous event-driven JS runtime
npm
• Node Package Manager
Visual Studio Code
• Code editor for modern web development
Yeoman
• Generic scaffolding system
TypeScript
• Syntactical superset of JavaScript, with static typing
Gulp
• Build tool
Creating a SharePoint
React Web Part
Creating a SharePoint and/or Teams web part
•docs.microsoft.com/sharepoint/dev/spfx/set-up-your-developer-tenant
Set up the Office 365 tenant
•docs.microsoft.com/sharepoint/dev/spfx/set-up-your-development-environment
•MUST be NodeLJ LTS version 10
Set up the development environment
•docs.microsoft.com/sharepoint/dev/spfx/web-parts/get-started/build-a-hello-world-web-part
•Select React framework rather than No JavaScript framework
•Add url and zoomLevel extra properties, rather than the test* rows
Build a web part
•docs.microsoft.com/sharepoint/dev/spfx/web-parts/get-started/using-web-part-as-ms-teams-tab
Add support for Teams
•docs.microsoft.com/sharepoint/dev/spfx/web-parts/get-started/serve-your-web-part-in-a-sharepoint-page
Deploy to SharePoint
•Available as SharePoint web part, a Teams Tab or a Teams Personal App
Sync to Teams
Add Visio service to the web part
•npm install @types/office-js save
• Add type “office-js” to the tsconfig.json
Install OfficeJS
• Add external reference to visio-web-embedded.js in config/config.json
• Create src/shared/services folder
• Add index.ts file
• Add sample VisioService.ts file from bit.ly/2uQ5dn8
Add Visio Service
• Add import { VisioService } from "../../../shared/services";
• Update export visioService: VisioService;
Update Props interface
•Add .iframeHost{height: 600px;width:100%;}
Update styles
• Update render() by replacing most <div>s with iframeHost div
• Add componentDidMount() and componentDidUpdate()
Update tsx file
• Add import 'officejs';
• Add import { VisioService } from '../../shared/services';
• Update the interface with visioService: VisioService;
• Declare private _visioService: VisioService;
• Add onInit() function
• Add visioService: this._visioService, to the ReactElement
Update WebPart
Add Teams support for the Visio service
• docs.microsoft.com/javascript/api/overview/msteams-
client?view=msteams-client-js-latest
• npm install --save @microsoft/teams-js
Install Teams client SDK
• Add import * as microsoftTeams from "@microsoft/teams-js";
• Update export teamsContext: microsoftTeams.Context;
Update Props interface
• Add import * as microsoftTeams from "@microsoft/teams-js";
• Declare private _teamsContext: microsoftTeams.Context;
• Update onInit() function to add alternate retVal
• Update ReactElement teamsContext: this._teamsContext,Update WebPart
Deploy to SharePoint and Teams
•docs.microsoft.com/sharepoint/dev/spfx/web-parts/get-started/serve-your-web-part-in-a-sharepoint-page
•>gulp bundle --ship
•>gulp package-solution --shipDeploy to SharePoint
•Available as SharePoint web part, a Teams Tab or a Teams Personal App
•Drag and drop the package in sites/AppCatlog/AppCatalog
•Tick make available to all sites
•Click Sync to Teams
Sync to Teams
Add the web part in SharePoint
Add the Tab in Teams
Add the Personal App in Teams
Learn how to integrate data with SmartShapes
Mastering Data Visualization with Microsoft
Visio…
Publisher’s website : bit.ly/Visio2016Data
Power Up Visio … a White Paper on Visio with
Power BI
Available from : bit.ly/PowerUpVisio
Š Copyright Microsoft Corporation. All rights reserved.
Creating Visio Tabs and Apps for Teams with SharePoint Framework (SPFx)
/bvisual.net/creating-visio-tabs-and-apps-for-teams-with-sharepoint-framework-spfx/
Visit bVisual.net
Thank you.
David J Parker, Microsoft MVP (Visio)
davidp@bvisual.net
blog.bvisual.net
@VisioRules

Mais conteĂşdo relacionado

Mais procurados

Security and Your Salesforce Org
Security and Your Salesforce OrgSecurity and Your Salesforce Org
Security and Your Salesforce OrgSalesforce Admins
 
SharePoint Benefits
SharePoint BenefitsSharePoint Benefits
SharePoint BenefitsSameh Senosi
 
SAP Fiori Mobility Applications
SAP  Fiori Mobility ApplicationsSAP  Fiori Mobility Applications
SAP Fiori Mobility ApplicationsWise Men
 
All Plans Comparison - Office 365 and Microsoft 365 Plans
All Plans Comparison - Office 365 and Microsoft 365 PlansAll Plans Comparison - Office 365 and Microsoft 365 Plans
All Plans Comparison - Office 365 and Microsoft 365 PlansGetMax DMCC
 
How to Migrate G Suite to Office 365 Readily!
 How to Migrate G Suite to Office 365 Readily! How to Migrate G Suite to Office 365 Readily!
How to Migrate G Suite to Office 365 Readily!Dee Negi
 
Project and Portfolio Management with Project Online
Project and Portfolio Management with Project OnlineProject and Portfolio Management with Project Online
Project and Portfolio Management with Project OnlineGregory Zelfond
 
Intro to Salesforce Lightning Web Components (LWC)
Intro to Salesforce Lightning Web Components (LWC)Intro to Salesforce Lightning Web Components (LWC)
Intro to Salesforce Lightning Web Components (LWC)Roy Gilad
 
Supercharge your Salesforce Reports and Dashboards
Supercharge your Salesforce Reports and DashboardsSupercharge your Salesforce Reports and Dashboards
Supercharge your Salesforce Reports and DashboardsNetStronghold
 
SharePoint Beginner Training for End Users
SharePoint Beginner Training for End UsersSharePoint Beginner Training for End Users
SharePoint Beginner Training for End UsersGregory Zelfond
 
Sharepoint Basics
Sharepoint BasicsSharepoint Basics
Sharepoint BasicsShervin Thomas
 
L1 Overview SAP Cloud Platform API Management
L1 Overview SAP Cloud Platform API ManagementL1 Overview SAP Cloud Platform API Management
L1 Overview SAP Cloud Platform API ManagementSAP Cloud Platform
 
Enter the World of PowerApps - Canvas vs. Model-Driven Apps
Enter the World of PowerApps - Canvas vs. Model-Driven AppsEnter the World of PowerApps - Canvas vs. Model-Driven Apps
Enter the World of PowerApps - Canvas vs. Model-Driven AppsDaniel Laskewitz
 
Managing the Role Hierarchy at Enterprise Scale
Managing the Role Hierarchy at Enterprise ScaleManaging the Role Hierarchy at Enterprise Scale
Managing the Role Hierarchy at Enterprise ScaleSalesforce Developers
 
Lightning web components - Introduction, component Lifecycle, Events, decorat...
Lightning web components - Introduction, component Lifecycle, Events, decorat...Lightning web components - Introduction, component Lifecycle, Events, decorat...
Lightning web components - Introduction, component Lifecycle, Events, decorat...Nidhi Sharma
 
Intro to the Office 365 Admin Center
Intro to the Office 365 Admin CenterIntro to the Office 365 Admin Center
Intro to the Office 365 Admin CenterNikkia Carter
 
Orion Context Broker 20220301
Orion Context Broker 20220301Orion Context Broker 20220301
Orion Context Broker 20220301Fermin Galan
 

Mais procurados (20)

Security and Your Salesforce Org
Security and Your Salesforce OrgSecurity and Your Salesforce Org
Security and Your Salesforce Org
 
SharePoint Benefits
SharePoint BenefitsSharePoint Benefits
SharePoint Benefits
 
SAP Fiori Mobility Applications
SAP  Fiori Mobility ApplicationsSAP  Fiori Mobility Applications
SAP Fiori Mobility Applications
 
All Plans Comparison - Office 365 and Microsoft 365 Plans
All Plans Comparison - Office 365 and Microsoft 365 PlansAll Plans Comparison - Office 365 and Microsoft 365 Plans
All Plans Comparison - Office 365 and Microsoft 365 Plans
 
Dell boomi
Dell boomiDell boomi
Dell boomi
 
How to Migrate G Suite to Office 365 Readily!
 How to Migrate G Suite to Office 365 Readily! How to Migrate G Suite to Office 365 Readily!
How to Migrate G Suite to Office 365 Readily!
 
Project and Portfolio Management with Project Online
Project and Portfolio Management with Project OnlineProject and Portfolio Management with Project Online
Project and Portfolio Management with Project Online
 
Intro to Salesforce Lightning Web Components (LWC)
Intro to Salesforce Lightning Web Components (LWC)Intro to Salesforce Lightning Web Components (LWC)
Intro to Salesforce Lightning Web Components (LWC)
 
Supercharge your Salesforce Reports and Dashboards
Supercharge your Salesforce Reports and DashboardsSupercharge your Salesforce Reports and Dashboards
Supercharge your Salesforce Reports and Dashboards
 
SharePoint Beginner Training for End Users
SharePoint Beginner Training for End UsersSharePoint Beginner Training for End Users
SharePoint Beginner Training for End Users
 
Sharepoint Basics
Sharepoint BasicsSharepoint Basics
Sharepoint Basics
 
Salesforce Lightning workshop
Salesforce Lightning workshopSalesforce Lightning workshop
Salesforce Lightning workshop
 
L1 Overview SAP Cloud Platform API Management
L1 Overview SAP Cloud Platform API ManagementL1 Overview SAP Cloud Platform API Management
L1 Overview SAP Cloud Platform API Management
 
Enter the World of PowerApps - Canvas vs. Model-Driven Apps
Enter the World of PowerApps - Canvas vs. Model-Driven AppsEnter the World of PowerApps - Canvas vs. Model-Driven Apps
Enter the World of PowerApps - Canvas vs. Model-Driven Apps
 
Managing the Role Hierarchy at Enterprise Scale
Managing the Role Hierarchy at Enterprise ScaleManaging the Role Hierarchy at Enterprise Scale
Managing the Role Hierarchy at Enterprise Scale
 
Lightning web components - Introduction, component Lifecycle, Events, decorat...
Lightning web components - Introduction, component Lifecycle, Events, decorat...Lightning web components - Introduction, component Lifecycle, Events, decorat...
Lightning web components - Introduction, component Lifecycle, Events, decorat...
 
Understanding SharePoint Online
Understanding SharePoint Online Understanding SharePoint Online
Understanding SharePoint Online
 
Intro to the Office 365 Admin Center
Intro to the Office 365 Admin CenterIntro to the Office 365 Admin Center
Intro to the Office 365 Admin Center
 
Sharepoint overview
Sharepoint overviewSharepoint overview
Sharepoint overview
 
Orion Context Broker 20220301
Orion Context Broker 20220301Orion Context Broker 20220301
Orion Context Broker 20220301
 

Semelhante a Creating a Visio web part with SharePoint SPFx

Visio in the cloud
Visio in the cloudVisio in the cloud
Visio in the cloudDavid Parker
 
How to integrate Visio 2013 and Visio Services 2013 with SharePoint to create...
How to integrate Visio 2013 and Visio Services 2013 with SharePoint to create...How to integrate Visio 2013 and Visio Services 2013 with SharePoint to create...
How to integrate Visio 2013 and Visio Services 2013 with SharePoint to create...Knut Relbe-Moe [MVP, MCT]
 
Visio Services in SharePoint 2010
Visio Services in SharePoint 2010Visio Services in SharePoint 2010
Visio Services in SharePoint 2010Alexander Meijers
 
Visio services in sharepoint 2013
Visio services in sharepoint 2013Visio services in sharepoint 2013
Visio services in sharepoint 2013BIWUG
 
SPSOslo 2014 - Visio 2013 & Visio Services – A Quick Guide
SPSOslo 2014 - Visio 2013 & Visio Services – A Quick GuideSPSOslo 2014 - Visio 2013 & Visio Services – A Quick Guide
SPSOslo 2014 - Visio 2013 & Visio Services – A Quick GuideKnut Relbe-Moe [MVP, MCT]
 
Make your visio diagrams accessible to everyone
Make your visio diagrams accessible to everyoneMake your visio diagrams accessible to everyone
Make your visio diagrams accessible to everyoneDavid Parker
 
Bpm portals with Visio and SharePoint
Bpm portals with Visio and SharePointBpm portals with Visio and SharePoint
Bpm portals with Visio and SharePointDavid Parker
 
SPSNYC - Visio 2013 and Visio Services a quick guide
SPSNYC - Visio 2013 and Visio Services a quick guideSPSNYC - Visio 2013 and Visio Services a quick guide
SPSNYC - Visio 2013 and Visio Services a quick guideKnut Relbe-Moe [MVP, MCT]
 
Envision IT - SharePoint 2013 Web Content Managment
Envision IT - SharePoint 2013 Web Content Managment Envision IT - SharePoint 2013 Web Content Managment
Envision IT - SharePoint 2013 Web Content Managment Envision IT
 
Hitchhiker’s Guide to SharePoint BI
Hitchhiker’s Guide to SharePoint BIHitchhiker’s Guide to SharePoint BI
Hitchhiker’s Guide to SharePoint BIAndrew Brust
 
Microsoft Visio Detailed Presentation
Microsoft Visio Detailed PresentationMicrosoft Visio Detailed Presentation
Microsoft Visio Detailed PresentationQBI Institute
 
Share Point For Beginners V1
Share Point For Beginners V1Share Point For Beginners V1
Share Point For Beginners V1MJ Ferdous
 
Building dashboards with Visio Services
Building dashboards with Visio ServicesBuilding dashboards with Visio Services
Building dashboards with Visio ServicesAlan Richards
 
Data Visualization Made Easier in SharePoint 2010
Data Visualization Made Easier in SharePoint 2010Data Visualization Made Easier in SharePoint 2010
Data Visualization Made Easier in SharePoint 2010InnoTech
 
Revit structure brochure
Revit structure    brochureRevit structure    brochure
Revit structure brochureZabeel Institute
 
TechFuse 2012: SharePoint business applications at your fingertips
TechFuse 2012: SharePoint business applications at your fingertipsTechFuse 2012: SharePoint business applications at your fingertips
TechFuse 2012: SharePoint business applications at your fingertipsAvtex
 
Sp biz conf - using office graph api
Sp biz conf - using office graph apiSp biz conf - using office graph api
Sp biz conf - using office graph apiVincent Biret
 
ECS19 - Vesa Juvonen - Getting Started With SharePoint Framework - Roadmap
ECS19 - Vesa Juvonen - Getting Started With SharePoint Framework - RoadmapECS19 - Vesa Juvonen - Getting Started With SharePoint Framework - Roadmap
ECS19 - Vesa Juvonen - Getting Started With SharePoint Framework - RoadmapEuropean Collaboration Summit
 
Building modern intranets with share point communication sites aug 2018 kloud
Building modern intranets with share point communication sites aug 2018   kloudBuilding modern intranets with share point communication sites aug 2018   kloud
Building modern intranets with share point communication sites aug 2018 kloudAsish Padhy
 

Semelhante a Creating a Visio web part with SharePoint SPFx (20)

Visio in the cloud
Visio in the cloudVisio in the cloud
Visio in the cloud
 
How to integrate Visio 2013 and Visio Services 2013 with SharePoint to create...
How to integrate Visio 2013 and Visio Services 2013 with SharePoint to create...How to integrate Visio 2013 and Visio Services 2013 with SharePoint to create...
How to integrate Visio 2013 and Visio Services 2013 with SharePoint to create...
 
Visio Services in SharePoint 2010
Visio Services in SharePoint 2010Visio Services in SharePoint 2010
Visio Services in SharePoint 2010
 
SPSOslo 2014 Visio Services
SPSOslo 2014 Visio Services SPSOslo 2014 Visio Services
SPSOslo 2014 Visio Services
 
Visio services in sharepoint 2013
Visio services in sharepoint 2013Visio services in sharepoint 2013
Visio services in sharepoint 2013
 
SPSOslo 2014 - Visio 2013 & Visio Services – A Quick Guide
SPSOslo 2014 - Visio 2013 & Visio Services – A Quick GuideSPSOslo 2014 - Visio 2013 & Visio Services – A Quick Guide
SPSOslo 2014 - Visio 2013 & Visio Services – A Quick Guide
 
Make your visio diagrams accessible to everyone
Make your visio diagrams accessible to everyoneMake your visio diagrams accessible to everyone
Make your visio diagrams accessible to everyone
 
Bpm portals with Visio and SharePoint
Bpm portals with Visio and SharePointBpm portals with Visio and SharePoint
Bpm portals with Visio and SharePoint
 
SPSNYC - Visio 2013 and Visio Services a quick guide
SPSNYC - Visio 2013 and Visio Services a quick guideSPSNYC - Visio 2013 and Visio Services a quick guide
SPSNYC - Visio 2013 and Visio Services a quick guide
 
Envision IT - SharePoint 2013 Web Content Managment
Envision IT - SharePoint 2013 Web Content Managment Envision IT - SharePoint 2013 Web Content Managment
Envision IT - SharePoint 2013 Web Content Managment
 
Hitchhiker’s Guide to SharePoint BI
Hitchhiker’s Guide to SharePoint BIHitchhiker’s Guide to SharePoint BI
Hitchhiker’s Guide to SharePoint BI
 
Microsoft Visio Detailed Presentation
Microsoft Visio Detailed PresentationMicrosoft Visio Detailed Presentation
Microsoft Visio Detailed Presentation
 
Share Point For Beginners V1
Share Point For Beginners V1Share Point For Beginners V1
Share Point For Beginners V1
 
Building dashboards with Visio Services
Building dashboards with Visio ServicesBuilding dashboards with Visio Services
Building dashboards with Visio Services
 
Data Visualization Made Easier in SharePoint 2010
Data Visualization Made Easier in SharePoint 2010Data Visualization Made Easier in SharePoint 2010
Data Visualization Made Easier in SharePoint 2010
 
Revit structure brochure
Revit structure    brochureRevit structure    brochure
Revit structure brochure
 
TechFuse 2012: SharePoint business applications at your fingertips
TechFuse 2012: SharePoint business applications at your fingertipsTechFuse 2012: SharePoint business applications at your fingertips
TechFuse 2012: SharePoint business applications at your fingertips
 
Sp biz conf - using office graph api
Sp biz conf - using office graph apiSp biz conf - using office graph api
Sp biz conf - using office graph api
 
ECS19 - Vesa Juvonen - Getting Started With SharePoint Framework - Roadmap
ECS19 - Vesa Juvonen - Getting Started With SharePoint Framework - RoadmapECS19 - Vesa Juvonen - Getting Started With SharePoint Framework - Roadmap
ECS19 - Vesa Juvonen - Getting Started With SharePoint Framework - Roadmap
 
Building modern intranets with share point communication sites aug 2018 kloud
Building modern intranets with share point communication sites aug 2018   kloudBuilding modern intranets with share point communication sites aug 2018   kloud
Building modern intranets with share point communication sites aug 2018 kloud
 

Último

Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilV3cube
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsRoshan Dwivedi
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 

Último (20)

Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 

Creating a Visio web part with SharePoint SPFx

  • 1. Visit bVisual.net Embedding Visio diagrams in SharePoint and Teams using SPFx David J Parker, Microsoft MVP (Visio) March 2020
  • 2. Microsoft MVP (Visio) Independent Visio Consultant bVisual.net @VisioRules visiorules.com blog.bvisual.net visualizinginformation.com • Started as building architect (RIBA) • Linked CAD to databases for merchant banks in London & New York • Switched to Visio in mid ‘90’s • Founded bVisual in 1998 • Visio consultant, developer, trainer, blogger, author • 15 years MVP • UK based, global reach bit.ly/Visio2016Data About David J Parker
  • 3. Understanding the possibilities with Visio diagrams Reviewing the Visio JavaScript API Introducing the SharePoint Framework (SPFx) Creating a SPFx WebPart Supporting Microsoft Teams Adding the Visio package Agenda
  • 5. SharePoint Web page (View) Web Windows Desktop (Create/Edit) Windows Desktop SharePoint / OneDrive for Business Cloud Store Positioning Visio in the Web Data source Visio document JavaScript C++ .Net VB VBA VBA Visio document Visio document Power BI Visio document Visio document Power BI Desktop
  • 6. Interacting with Visio in the Cloud – March 2020 Visio documents in OneDrive or SharePoint Edit in Visio Plan 2* Create/ update diagrams View/Edit data View/ edit/ follow hyperlinks View/ edit layers Search text and data Print / Export Edit in Visio Plan 1 Simple diagrams Print / Export to pdf & image View in Visio File Viewer View data Follow hyperlinks Search text View in Visio Viewer for iOS View layers Search text * Windows only
  • 7. A Solution with Visio embedded in a SharePoint page
  • 8. Visio diagrams in file viewer or custom web pages
  • 9. Visio Desktop Custom Template Custom shapes • Automate appearance, colours, icons, hyperlink • Automatic high contrast text Linked SharePoint Lists • Centralise data for consistency • Automatically update shape data and colours Accessibility • Automate Alt Text • Automate text high contrast • Expose navigation order to interface Hyperlinks • Visio page to Visio page • Visio document to Visio document • Visio shape to documentation Validation rules • Ensure correct structure
  • 10. JavaScript API aided by Visio ShapeSheet Page loaded • Web part height adjusted suit the aspect ratio of the page • Significant shapes listed in navigation order • Legend is automatically displayed List item selected • Shape selected • Shape text, alt title and description displayed • Previous and Next buttons displayed • Hyperlinks are grouped by type Shape selected • Arrows go to other pages Mouse enters shape • Custom tooltip appears Shape data • Values provides data for list and groupings • Alt title and description automatically updated from shape data • Navigation order exposed in data Shape hyperlinks • Arrows can be clicked to go to other pages • Some hyperlinks open a target Visio document within the same web part • Some hyperlinks open external links in a controlled manner Shape graphics • Graphics change by data value or containment • Icons displayed if specific data or hyperlinks present
  • 12. Hierarchy of Objects in the JavaScript API Application Document DocumentView Page(s) PageView Selection/ Shape(s) ShapeView ShapDataItem(s) Hyperlink(s) Comment(s) Comment(s)
  • 13. Overview Application Document DocumentView Page PageView PageCollection ShapeCollection Shape ShapeView ShapeDataItemCollection HyperlinkCollection Hyperlink ShapeDataItem CommentCollection Comment <<Interface>> BoundingBox <<Interface>> Highlight <<Interface>> Position RequestContext Selection <<Interface>> DataRefreshCompleteEventArgs <<Interface>> DocumentLoadCompleteEventArgs <<Interface>> PageLoadCompleteEventArgs <<Interface>> PageRenderCompleteEventArgs <<Interface>> SelectionChangedEventArgs <<Interface>> ShapeMouseEnterEventArgs <<Interface>> ShapeMouseLeaveEventArgs <<Enumeration>> ErrorCodes <<Enumeration>> OverlayHorizontalAlignment <<Enumeration>> OverlayType <<Enumeration>> OverlayVerticalAlignment <<Enumeration>> ToolBarType Visio JavaScript API -context -load(...) -showBorders -showToolbars -set(...) -showToolbar(...) -toJSON() -application -getActivePage() -context -pages -view -load(...) -set(...) -setActivePage(...) -startDataRefresh() -toJSON() -context -disableHyperlinks -load(...) -set(...) -disablePan -disablePanZoomWindow -disableZoom -hideDiagramBoundary -toJSON() -allShapes -activate() -context -height -index -load(...) -set(...) -toJSON() -comments -isBackground -name -shapes -view -width -context -load(...) -set(...) -zoom -toJSON() -context -getCount() -items -toJSON() -getItem(...) -load(...) -context -getCount() -items -toJSON() -getItem(...) -load(...) -getBounds() -context -hyperlinks -id -load(...) -set(...) -toJSON() -comments -name -subShapes -view -select -shapeDataItems -text -context -addOverlay(...) -set(...) -highlight -toJSON() -load(...) -removeOverlay(...) -showOverlay(...) -getCount() -toJSON() -getItem(...) -load(...) -context -getCount() -items -toJSON() -getItem(...) -load(...) -context -description -extraInfo -load(...) -toJSON() -address -subAddress -context -format -formattedValue -load(...) -toJSON() -label -value -context -getCount() -items -toJSON() -getItem(...) -load(...) -context -date -text -load(...) -toJSON() -author -set(...) -height -width -x -y -color -width -x -y -(constructor)(url) -document -context -shapes -toJSON() -load(...) -document -success -success -pageName -success -pageName -success -pageName -shapeNames -pageName -shapeName -pageName -shapeName -accessDenied -unsupportedOperation -generalException -itemNotFound -notImplemented -center -left -right -html -image -text -bottom -middle -top -commandBar -pageNavigationBar -statusBar -context -items Classes Interfaces Enums
  • 14. Application to Page Classes Application Document DocumentView Page PageView PageCollection ShapeCollection Shape ShapeView <<Interface>> BoundingBox <<Interface>> Highlight <<Interface>> Position RequestContext Selection <<Interface>> DataRefreshCompleteEventArgs <<Interface>> DocumentLoadCompleteEven <<Interface>> PageLoadCompleteEventArgs <<Interface>> PageRenderCompleteEventArg<<Enumeration>> ErrorCodes <<Enumeration>> ToolBarType -context -load(...) -showBorders -showToolbars -set(...) -showToolbar(...) -toJSON() -application -getActivePage() -context -pages -view -load(...) -set(...) -setActivePage(...) -startDataRefresh() -toJSON() -context -disableHyperlinks -load(...) -set(...) -disablePan -disablePanZoomWindow -disableZoom -hideDiagramBoundary -toJSON() -allShapes -activate() -context -height -index -load(...) -set(...) -toJSON() -comments -isBackground -name -shapes -view -width -context -load(...) -set(...) -zoom -toJSON() -context -getCount() -items -toJSON() -getItem(...) -load(...) -context -getCount() -items -toJSON() -getItem(...) -load(...) -getBounds() -context -hyperlinks -id -load(...) -set(...) -toJSON() -comments -name -subShapes -view -select -shapeDataItems -text -context -addOverlay(...) -set(...) -highlight -toJSON() -load(...) -removeOverlay(...) -showOverlay(...) -height -width -x -y -color -width -x -y -(constructor)(url) -document -context -shapes -toJSON() -load(...) -document -success -success -pageName -success -pageName -success-accessDenied -commandBar Classes • Application • RequestContext • Document • DocumentView • PageCollection • Page • PageView
  • 15. Selection and Shape Classes Application Document DocumentView Page PageView PageCollection ShapeCollection Shape ShapeView ShapeDataItemCollection HyperlinkCollection Hyperlink ShapeDataItem CommentCollection Comment <<Interface>> BoundingBox <<Interface>> Highlight <<Interface>> Position RequestContext Selection <<Interface>> DataRefreshCompleteEventArgs <<Interface>> DocumentLoadCompleteEventArgs <<Interface>> PageLoadCompleteEventArgs <<Interface>> PageRenderCompleteEventArgs<<Enumeration>> ErrorCodes <<Enumeration>> ToolBarType -context -load(...) -showBorders -showToolbars -set(...) -showToolbar(...) -toJSON() -application -getActivePage() -context -pages -view -load(...) -set(...) -setActivePage(...) -startDataRefresh() -toJSON() -context -disableHyperlinks -load(...) -set(...) -disablePan -disablePanZoomWindow -disableZoom -hideDiagramBoundary -toJSON() -allShapes -activate() -context -height -index -load(...) -set(...) -toJSON() -comments -isBackground -name -shapes -view -width -context -load(...) -set(...) -zoom -toJSON() -context -getCount() -items -toJSON() -getItem(...) -load(...) -context -getCount() -items -toJSON() -getItem(...) -load(...) -getBounds() -context -hyperlinks -id -load(...) -set(...) -toJSON() -comments -name -subShapes -view -select -shapeDataItems -text -context -addOverlay(...) -set(...) -highlight -toJSON() -load(...) -removeOverlay(...) -showOverlay(...) -getCount() -toJSON() -getItem(...) -load(...) -context -getCount() -items -toJSON() -getItem(...) -load(...) -context -description -extraInfo -load(...) -toJSON() -address -subAddress -context -format -formattedValue -load(...) -toJSON() -label -value -context -getCount() -items -toJSON() -getItem(...) -load(...) -context -date -text -load(...) -toJSON() -author -set(...) -height -width -x -y -color -width -x -y -(constructor)(url) -document -context -shapes -toJSON() -load(...) -document -success -success -pageName -success -pageName -success-accessDenied -commandBar -context -items Classes • ShapeCollection • Selection • Shape • ShapeView • ShapeDateItemCollection • HyperlinkCollection • CommentCollection • ShapeDataItem • Hyperlink • Comment
  • 16. Misc Interfaces and Enums DocumentView PageView ShapeView <<Interface>> BoundingBox <<Interface>> Highlight <<Interface>> Position RequestContext Selection <<Interface>> DataRefreshCompleteEventArgs <<Interface>> DocumentLoadCompleteEventA <<Interface>> PageLoadCompleteEventArgs <<Interface>> PageRenderCompleteEventArgs <<Interface>> SelectionChangedEventArgs <<Interface>> ShapeMouseEnterEventArgs <<Interface>> ShapeMouseLeaveEventArgs <<Enumeration>> ErrorCodes <<Enumeration>> OverlayHorizontalAlignment <<Enumeration>> OverlayType <<Enumeration>> OverlayVerticalAlignment <<Enumeration>> ToolBarType -toJSON() -view -load(...) -setActivePage(...) -startDataRefresh() -context -disableHyperlinks -load(...) -set(...) -disablePan -disablePanZoomWindow -disableZoom -hideDiagramBoundary -toJSON() -activate() -load(...) -set(...) -toJSON() -name -shapes -view -width -context -load(...) -set(...) -zoom -toJSON() -getBounds() -load(...) -set(...) -toJSON() -subShapes -view -shapeDataItems -text -context -addOverlay(...) -set(...) -highlight -toJSON() -load(...) -removeOverlay(...) -showOverlay(...) -height -width -x -y -color -width -x -y -(constructor)(url) -document -context -shapes -toJSON() -load(...) -document -success -success -pageName -success -pageName -success -pageName -shapeNames -pageName -shapeName -pageName -shapeName -accessDenied -unsupportedOperation -generalException -itemNotFound -notImplemented -center -left -right -html -image -text -bottom -middle -top -commandBar -pageNavigationBar -statusBar Miscellaneous Interfaces • BoundingBox • Highlight • Position Enums • ErrorCodes • ToolBarType • OverlayType • OverlayHorizontalAlignment • OverlayVerticalAlignment
  • 17. EventArg Interfaces DocumentView PageView ShapeView CommentCollection Comment <<Interface>> BoundingBox <<Interface>> Highlight <<Interface>> Position RequestContext <<Interface>> DataRefreshCompleteEventArgs <<Interface>> DocumentLoadCompleteEventArgs <<Interface>> PageLoadCompleteEventArgs <<Interface>> PageRenderCompleteEventArgs <<Interface>> SelectionChangedEventArgs <<Interface>> ShapeMouseEnterEventArgs <<Interface>> ShapeMouseLeaveEventArgs <<Enumeration>> ErrorCodes <<Enumeration>> OverlayHorizontalAlignment <<Enumeration>> OverlayType <<Enumeration>> OverlayVerticalAlignment <<Enumeration>> ToolBarType Visio JavaScript API -context -disableHyperlinks -load(...) -set(...) -disablePan -disablePanZoomWindow -disableZoom -hideDiagramBoundary -toJSON() -activate() -load(...) -set(...) -toJSON() -context -load(...) -set(...) -zoom -toJSON() -getBounds() -load(...) -set(...) -toJSON() -context -addOverlay(...) -set(...) -highlight -toJSON() -load(...) -removeOverlay(...) -showOverlay(...) -getCount() -toJSON() -getItem(...) -load(...) -context -description -extraInfo -load(...) -toJSON() -address -subAddress -context -getCount() -items -toJSON() -getItem(...) -load(...) -context -date -text -load(...) -toJSON() -author -set(...) -height -width -x -y -color -width -x -y -(constructor)(url) -document -shapes -toJSON() -load(...) -document -success -success -pageName -success -pageName -success -pageName -shapeNames -pageName -shapeName -pageName -shapeName -accessDenied -unsupportedOperation -generalException -itemNotFound -notImplemented -center -left -right -html -image -text -bottom -middle -top -commandBar -pageNavigationBar -statusBar -context -items EventArgs Interfaces • DataRefreshCompleteEventsArgs • DocumentLoadCompleteEventArgs • PageLoadEventArgs • PageRefreshEventArgs • SelectionChangedEventArgs • ShapeMouseEnterEventArgs • ShapeMouseLeaveEventArgs
  • 19. SPFx is a page and web part model • provides full support for client-side SharePoint development It is framework-agnostic. • use any JavaScript framework like React, Handlebars, Knockout, Angular, and more End users can use SPFx client-side solutions • if approved by the tenant administrators (or their delegates) on all sites • including self-service team, group, or personal sites. SPFx web parts are multi-functional • can be added to both classic and modern pages • can be made into Microsoft Teams Tabs or Personal Apps What is the SharePoint Framework (SPFx )?
  • 20. Toolset Comparison nodeJs • Asynchronous event-driven JS runtime npm • Node Package Manager Visual Studio Code • Code editor for modern web development Yeoman • Generic scaffolding system TypeScript • Syntactical superset of JavaScript, with static typing Gulp • Build tool
  • 22. Creating a SharePoint and/or Teams web part •docs.microsoft.com/sharepoint/dev/spfx/set-up-your-developer-tenant Set up the Office 365 tenant •docs.microsoft.com/sharepoint/dev/spfx/set-up-your-development-environment •MUST be NodeLJ LTS version 10 Set up the development environment •docs.microsoft.com/sharepoint/dev/spfx/web-parts/get-started/build-a-hello-world-web-part •Select React framework rather than No JavaScript framework •Add url and zoomLevel extra properties, rather than the test* rows Build a web part •docs.microsoft.com/sharepoint/dev/spfx/web-parts/get-started/using-web-part-as-ms-teams-tab Add support for Teams •docs.microsoft.com/sharepoint/dev/spfx/web-parts/get-started/serve-your-web-part-in-a-sharepoint-page Deploy to SharePoint •Available as SharePoint web part, a Teams Tab or a Teams Personal App Sync to Teams
  • 23. Add Visio service to the web part •npm install @types/office-js save • Add type “office-js” to the tsconfig.json Install OfficeJS • Add external reference to visio-web-embedded.js in config/config.json • Create src/shared/services folder • Add index.ts file • Add sample VisioService.ts file from bit.ly/2uQ5dn8 Add Visio Service • Add import { VisioService } from "../../../shared/services"; • Update export visioService: VisioService; Update Props interface •Add .iframeHost{height: 600px;width:100%;} Update styles • Update render() by replacing most <div>s with iframeHost div • Add componentDidMount() and componentDidUpdate() Update tsx file • Add import 'officejs'; • Add import { VisioService } from '../../shared/services'; • Update the interface with visioService: VisioService; • Declare private _visioService: VisioService; • Add onInit() function • Add visioService: this._visioService, to the ReactElement Update WebPart
  • 24. Add Teams support for the Visio service • docs.microsoft.com/javascript/api/overview/msteams- client?view=msteams-client-js-latest • npm install --save @microsoft/teams-js Install Teams client SDK • Add import * as microsoftTeams from "@microsoft/teams-js"; • Update export teamsContext: microsoftTeams.Context; Update Props interface • Add import * as microsoftTeams from "@microsoft/teams-js"; • Declare private _teamsContext: microsoftTeams.Context; • Update onInit() function to add alternate retVal • Update ReactElement teamsContext: this._teamsContext,Update WebPart
  • 25. Deploy to SharePoint and Teams •docs.microsoft.com/sharepoint/dev/spfx/web-parts/get-started/serve-your-web-part-in-a-sharepoint-page •>gulp bundle --ship •>gulp package-solution --shipDeploy to SharePoint •Available as SharePoint web part, a Teams Tab or a Teams Personal App •Drag and drop the package in sites/AppCatlog/AppCatalog •Tick make available to all sites •Click Sync to Teams Sync to Teams Add the web part in SharePoint Add the Tab in Teams Add the Personal App in Teams
  • 26. Learn how to integrate data with SmartShapes Mastering Data Visualization with Microsoft Visio… Publisher’s website : bit.ly/Visio2016Data Power Up Visio … a White Paper on Visio with Power BI Available from : bit.ly/PowerUpVisio
  • 27. Š Copyright Microsoft Corporation. All rights reserved. Creating Visio Tabs and Apps for Teams with SharePoint Framework (SPFx) /bvisual.net/creating-visio-tabs-and-apps-for-teams-with-sharepoint-framework-spfx/
  • 28. Visit bVisual.net Thank you. David J Parker, Microsoft MVP (Visio) davidp@bvisual.net blog.bvisual.net @VisioRules

Notas do Editor

  1. I am proud to have been a Microsoft MVP for 15 years, but before that I was a European Business Partner for Visio Corporation until they were acquired by Microsoft in 2000. At that time I was mainly concerned with visualizing the location of personnel and equipment in trading floors and comms rooms of large merchant banks in London and New York. Visio provided the graphical interface into the reams of information held in the corporate database, but it was normally presented to end users as paper plots and prints, created as weekly or monthly reports. We could respond to ad-hoc queries by using our Visio and database skills to locate, highlight and display or print particular regions or assets, but often this required a little bit of coding skills to facilitate it. Indeed, one of my main reasons for starting to use Visio was its graphical flexibility and ability to link shapes to database records. How much easier would it have been if I could have embedded my Visio drawings into PowerBI, and link the shapes to the database directly? The end-user could then ask their own questions, without having to get me to write some custom code. See http://bvisual.net/Case_Studies/ChaseManhattanBank.aspx for a case study of my experiences back then. See http://visio.mvps.org/History/default.html for history of Visio
  2. https://docs.microsoft.com/javascript/api/visio https://docs.microsoft.com/office/dev/add-ins/reference/overview/visio-javascript-reference-overview
  3. JavaScript API
  4. Search text can be entered utilizing SharePoint search of both shape text and shape data Visio diagrams that contain a match are displayed in a list A customised SharePoint web page is opened The first page of the Visio document is loaded and the web part height automatically changes to suit the aspect ratio of the page, maintaining the width as a constant thus allowing the web page height to vary The significant shapes are listed in navigation order if a user selects a list item, then the shape text, Alt title and description are displayed Previous and Next buttons displayed automatically to assist navigation Any hyperlinks are grouped by type A legend is automatically displayed Arrows can be clicked to go to other pages Taller diagrams can be scrolled vertically The shape text automatically displays black or white for the highest contrast The pan & zoom window can be opened The tooltip appears automatically when the cursor enters a shape Can use the pan and zoom window to re-position the visible area The diagram can be toggled between cross-functional and simple flowchart The grade plates automatically appear if displayed without swimlanes Each shape automatically displays icons to denote if specific data or hyperlinks are present
  5. This was all achieved with just the custom ShapeSheet formulas, and built-in Visio functionality, such as linking to external data. In fact, all of the custom shapes were only provided in the document stencil of the template, so no custom stencils were provided, and the template could be delivered as a content type in a SharePoint library for all diagram creators to utilise.
  6. https://docs.microsoft.com/javascript/api/visio https://docs.microsoft.com/office/dev/add-ins/reference/overview/visio-javascript-reference-overview
  7. The Visio JavaScript API provides read-only access to the Visio documents, and the hierarchy of the classes available can conceptually understood as follows: This is broadly a small subset of the Visio desktop API, with a similar hierarchy. There is more detail of the API at docs.microsoft.com/javascript/api/visio, and an overview is available at docs.microsoft.com/office/dev/add-ins/reference/overview/visio-javascript-reference-overview. Here is a breakdown of the classes, interfaces and enums:
  8. These classes provide context of the Visio diagram in view, and there can only be one Document object within the web part at any time. It is important to realise that a Page needs to be loaded into view before any of its contents, such as shapes or comments can be accessed. Most of the UI elements that are visible in the default Visio file viewer can be made visible or invisible in the Application or DocumentView objects. Each page, and shape, can contain a collection of comments. It is often useful to disable the hyperlinks in the web-part and to handle them either in a panel alongside or within a popup dialog. This will provide the opportunity to intercept and transform these hyperlinks into something more useful, such as allowing the switching the Visio document within the web-part.
  9. The sub-shapes, data, hyperlinks and comments of each shape can be loaded, but there is no access to any data held in the User-Defined Cells section of the Visio shapes. This means that any values, such as the navigation order, that Visio desktop stores in this section must be made visible in the Shape Data section if its value needs to accessed using the JavaScript API. In addition to setting the selected shape within the visible page, there is the ability to add text, image or html overlays to shapes. Note that the ShapeDataItem object does not have the Type or Visible properties that can be found in the Visio desktop shape objects. Similarly, the Hyperlink object does not have a Visible property. Therefore it is usually best not to display the built-in Shape Info panel which does not control the display of these items.
  10. These few interfaces and enums provide a structure to some properties.
  11. There are very few events available within the API, but they are sufficient to create interactive dashboards.
  12. It runs in the context of the current user and connection in the browser. There are no iFrames for the customization (JavaScript is embedded directly to the page). The controls are rendered in the normal page DOM. The controls are responsive and accessible by nature. It enables the developer to access the lifecycle in addition to render, load, serialize and deserialize, configuration changes, and more. It is framework-agnostic. You can use any JavaScript framework that you like: React, Handlebars, Knockout, Angular, and more. The toolchain is based on common open source client development tools such as npm, TypeScript, Yeoman, webpack, and gulp. Performance is reliable. End users can use SPFx client-side solutions that are approved by the tenant administrators (or their delegates) on all sites, including self-service team, group, or personal sites. SPFx web parts can be added to both classic and modern pages
  13. SharePoint Framework (SPFx) is a webpart component and page model that fully supports customer-side SharePoint development tasks, provides easy integration with SharePoint data, and supports open source tools. With SharePoint Framework, you can use modern web technologies and tools in your preferred development environment to create productive applications and experiences that are responsive and usable on mobile from the first Day. SharePoint Framework works for SharePoint locally and SharePoint Online (SharePoint 2016 Feature Pack 2 and SharePoint 2019). The main features of SharePoint Framework are: It runs in the context of the current user and the connection in the browser. There is no iFrame for customization (JavaScript is embedded directly in the page). Controls are displayed in a normal page DOM. The controls are responsive and accessible by nature. It allows the developer to access the lifecycle, in addition to rendering, loading, serialization and de-serialization tasks, configuration modification, and much more. It does not depend on infrastructure. You can use any JavaScript infrastructure that's right for you: React, Handlebars, Knockout, Angular and more. The toolchain uses common open source customer development tools, such as npm, TypeScript, Yeoman, webpack and Gulp. Reliable performance. End-users can use customer-side SPFx solutions approved by customer administrators (or their delegates) on all sites, including group sites, personal sites or self-service team sites. WebPart SPFx components can be added to classic and modern pages.
  14. Andrew Connell, MVP at Voitanus https://www.voitanos.io/understanding-the-sharepoint-framework-development-toolchain-email-course
  15. https://docs.microsoft.com/javascript/api/visio https://docs.microsoft.com/office/dev/add-ins/reference/overview/visio-javascript-reference-overview
  16. https://docs.microsoft.com/sharepoint/dev/spfx/set-up-your-developer-tenant https://docs.microsoft.com/sharepoint/dev/spfx/set-up-your-development-environment https://docs.microsoft.com/sharepoint/dev/spfx/web-parts/get-started/build-a-hello-world-web-part https://docs.microsoft.com/sharepoint/dev/spfx/web-parts/get-started/serve-your-web-part-in-a-sharepoint-page https://docs.microsoft.com/sharepoint/dev/spfx/web-parts/get-started/using-web-part-as-ms-teams-tab https://bvisualnet.sharepoint.com/sites/AppCatalog/AppCatalog/Forms/AllItems.aspx HelloWorldProp.ts HelloWorld.tsx               <p className={ styles.description }>{escape(this.props.url)}</p>               <p className={ styles.description }>{escape(this.props.zoomLevel)}</p> HelloWorldWebPart.ts         url: string;         zoomlevel: string;               }),               PropertyPaneTextField('url', {                 label: 'Visio Document URL',                 multiline: true               }),               PropertyPaneTextField('zoomlevel', {                 label: 'Zoom Level’ HelloWorldWebPart.manifest.json ,       "url": "https://bvisualnet.sharepoint.com/:u:/r/vol/_layouts/15/Doc.aspx?sourcedoc=%7BCB3B9A82-B678-48C8-AF58-44446BD27C1B%7D&file=GAP.vsdx&action=default",       "zoomlevel": "100"
  17. https://docs.microsoft.com/javascript/api/overview?view=visio-js-1.1 The JavaScript API for Office enables you to create web applications that interact with the object models in Office host applications. Use this section to learn more about the classes, methods, and other types available for building Office Add-ins. "officejs": { "path": "https://appsforoffice.microsoft.com/embedded/1.0/visio-web-embedded.js", "globalName": "officejs" } Tsx <div id='iframeHost' className={styles.iframeHost}></div> export * from "./VisioService"; .iframeHost{ height: 600px; width:100%; }     public componentDidMount() {         if (this.props.url) {           this.props.visioService.load(this.props.url, this.props.zoomLevel);         }       }        public async componentDidUpdate(prevProps: IHelloWorldProps) {         if ((this.props.url && this.props.url !== prevProps.url) ||           (this.props.zoomLevel != prevProps.zoomLevel)) {           this.props.visioService.load(this.props.url, this.props.zoomLevel);         }       } private _visioService: VisioService;   public onInit(): Promise<void> {     this._visioService = new VisioService(this.context);     let retVal: Promise<any> = Promise.resolve();     return retVal;   } visioService: this._visioService,
  18. https://docs.microsoft.com/javascript/api/overview?view=visio-js-1.1     if (this.context.sdks.microsoftTeams) {       retVal = new Promise((resolve, reject) => {           microsoftTeams.getContext(context => {           this._teamsContext = context;           resolve();         });       });     }
  19. https://docs.microsoft.com/sharepoint/dev/spfx/set-up-your-developer-tenant https://docs.microsoft.com/sharepoint/dev/spfx/set-up-your-development-environment https://docs.microsoft.com/sharepoint/dev/spfx/web-parts/get-started/build-a-hello-world-web-part https://docs.microsoft.com/sharepoint/dev/spfx/web-parts/get-started/serve-your-web-part-in-a-sharepoint-page https://docs.microsoft.com/sharepoint/dev/spfx/web-parts/get-started/using-web-part-as-ms-teams-tab https://bvisualnet.sharepoint.com/sites/AppCatalog/AppCatalog/Forms/AllItems.aspx HelloWorldProp.ts HelloWorld.tsx               <p className={ styles.description }>{escape(this.props.url)}</p>               <p className={ styles.description }>{escape(this.props.zoomLevel)}</p> HelloWorldWebPart.ts         url: string;         zoomlevel: string;               }),               PropertyPaneTextField('url', {                 label: 'Visio Document URL',                 multiline: true               }),               PropertyPaneTextField('zoomlevel', {                 label: 'Zoom Level’ HelloWorldWebPart.manifest.json ,       "url": "https://bvisualnet.sharepoint.com/:u:/r/vol/_layouts/15/Doc.aspx?sourcedoc=%7BCB3B9A82-B678-48C8-AF58-44446BD27C1B%7D&file=GAP.vsdx&action=default",       "zoomlevel": "100"
  20. Of course, I would encourage you all to invest in my book about data visualization with Visio, which covers just about everything except Power BI, so I have also written a White Paper that you can download via my website.