Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Data Visualization Desktop: Make it Yours, But ...

Gianni Ceresa
December 04, 2017

Data Visualization Desktop: Make it Yours, But do not Forget Security!

Custom plugin development for Oracle Data Visualization Desktop and the security impact of using unknown and from not trusted sources.

Presented at UKOUG Tech17 in Birmingham (UK)

Gianni Ceresa

December 04, 2017
Tweet

More Decks by Gianni Ceresa

Other Decks in Technology

Transcript

  1. • • • How to build a custom plugin (the

    theory) How to build it without doc as there isn’t one (I hope you like JavaScript…) DVD is more similar to OBIEE than what you can imagine Web service APIs At least a bit about the current version of it: v4 (aka 12.2.4.0.0)
  2. set DVDESKTOP_SDK_HOME="C:\Oracle\Oracle Data Visualization Desktop" set PLUGIN_DEV_DIR="C:\Oracle\DVD_plugins" set PATH=%DVDESKTOP_SDK_HOME%\tools\bin;%PATH% cd

    %PLUGIN_DEV_DIR% bicreateenv bicreateplugin viz -id ch.datalysis.tech17demo -subType dataviz Path where DVD is installed Path where the plugins will be developed (optional) Unique ID, java package “style” name
  3. .\gradlew run Definitely SDK mode Interesting URL: 127.0.0.1 a webserver

    run locally port 49765, can be different as it’s a randomly chosen port /va/ui/home.jsp just like in OBIEE
  4. render d3.select("body") d3.select(elContainer) $(elContainer).empty(); Sample code use the same standard,

    variables names start by the type: “el” = element, “n” = number etc.
  5. Paste the code for the 3D Donut directly inside “render”

    after the existing code Main change to use the provided container
  6. Random column just to be able to have a canvas

    My custom plugin Match perfectly the sample
  7. Easy, isn’t it? The plugin display a 3D donut, sure,

    but… • It doesn’t resize • It doesn’t display any real value coming from DVD • It doesn’t react to anything Keeping it short: we have a nice but useless plugin ! And now it’s where the painful part starts …
  8. • • var nWidth = $(elContainer).width(); var nHeight = $(elContainer).height();

    nWidth nHeight • resizeVisualization • _render • _render resizeVisualization • render _render
  9. Triggered on resize Empty function calling the new _render New

    “render” function No formal doc, found the code in a tutorial…
  10. • • • • If there was a clear formal

    doc I could tell you exactly what it is and how it works … As there isn’t one, I can just “guess” based on samples and pieces of code
  11. getEdgeExtent getItemEndSlice • • • getValue getNumberValue Column 1 Column

    2 Column 3 # row A A1 10 0 A2 25 1 A3 5 2 B B1 2 3 B2 6 4 B3 8 5 C C1 15 6 layers
  12. var color = d3.scale.category20(); color(i) i color(i) If there was

    a doc I could probably ask DVD to gives me colours for the values to keep them in sync with other canvas, but there isn’t one …
  13. Let’s stop here with a custom plugin development… A lot

    more should/could be done (colours, legend, interactions etc.) • The lack of documentation is clearly not helping • Lot of functions exists (look for a file named “report_base.js” and enjoy finding nice interesting things inside) • It is extremely time consuming
  14. • • • • • (remember I said DVD is

    more similar to OBIEE than what you could imagine?)
  15. • I’m not telling you it’s the case I’m not

    telling you to find a way to do it that way I’m just expressing a “theoretical” possibility…