Aug.03

Systeem- en softwaremonitoring met Visio 2007- 4 van 4 – De Software

In de vorige posts heb ik proberen uit te leggen op welke manier data kan worden gekoppeld aan Visio diagrammen. In deze laatste post over dit onderwerp wil ik uitleggen hoe een C# tool kan worden geschreven die geautomatiseerd de gekoppelde data van het Visiodiagram ververst en wegschrijft als webpagina.

De stappen

  1. Open Visual Studio en creeer een nieuw project.
  2. Klik met de rechtermuisknop in de Solution Explorer op References en kies Add Reference.
  3. Voeg een referentie toe naar Microsoft.Office.Interop.Visio en Microsoft.Office.Interop.Visio.SaveAsWeb.

    De Code
    De complete code ziet er alsvolgt uit:

    Wat doet de code
    Om te zorgen dat we een ‘onzichtbare’ versie van Visio draaien maken we gebruik van de InvisibleAppClass:

    InvisibleAppClass VisioApplication = new
    InvisibleAppClass();

    Helemaal onzichtbaar is Visio niet maar daar kom ik zo op terug.

    VisWebPageSettings VisioSaveAsWebSettings = (VisWebPageSettings)VisioSaveAsWebObject.WebPageSettings;

    VisioSaveAsWebSettings.QuietMode = int.MaxValue;

    VisioSaveAsWebSettings.SilentMode = int.MaxValue;

    VisioSaveAsWebSettings.TargetPath = @”c:tempvisiodiagram.html”;

    Met de VisWebPageSettings class kunnen we een export voor elkaar krijgen naar html pagina’s en gif images.

    Document VisioDocument = VisioApplication.Documents.Open(@”c:tempvisiodiagram.vsd”);

    Het openen van het betreffende VisioDiagram.

    //Refresh Data

    foreach (DataRecordset DataRecordset in VisioDocument.DataRecordsets)

    {

    DataRecordset.DataConnection.ConnectionString += string.Format(“;password={0}”, DataSourcePassword);

    DataRecordset.Refresh();

    }

    Met bovenstaande code worden alle gekoppelde recordsets doorgelopen in het diagram en wordt de data ververst. De constructie met het DataSourcePassword is bruikbaar in het geval dat er een wachtwoord noodzakelijk is in de connectionstring van de datasource. Deze wachtwoorden worden niet in het Visio diagram opgeslagen en zullen dus per connectiestring separaat moeten worden opgegeven. In dit geval ben ik er vanuit gegaan dat alle connectiestrings hetzelfde wachtwoord hebben.

    VisioSaveAsWebObject.AttachToVisioDoc(VisioDocument);

    //Save as webpages

    VisioSaveAsWebObject.CreatePages();

    Deze code zorgt daadwerkelijk voor het creeeren van de html pagina’s.

    VisioDocument.Save();

    VisioDocument.Close();

    De save methode wordt aangeroepen omdat, ondanks het feit dat we hier de InvisibleAppClass gebruiken, er wordt gevraagd of we het betreffende document op willen slaan als we direct de VisioDocument.Close() methode aanroepen.

    Samenvattend
    Met deze code kun je aan de slag om een geautomatiseerd proces te schrijven wat zorgdraagt voor het automatisch hergeneren van diagrammen met een bepaalde tijdsinterval naar html. Je kunt deze diagrammen tonen in een browser en automatisch laten verversen zodat je continue zicht hebt op de status van de systemen die gemonitord moeten worden. Overigens wil Internet Explorer 6 of 7 er dan na een uur of 12 de brui aan geven (oorzaak: Slecht memorymanagement). Je kunt natuurlijk ook een tool schrijven die de door Visio geexpoteerde gif images toont.

    Kanttekening
    Wat mij opviel is dat de namen van de klassen in de Visio libraries bijzonder slecht gekozen zijn. Een class met de naam Document of InvisibileAppClass getuigt niet echt van vindingrijkheid bij het Microsoft Visio Development team.

    Conclusie
    Dit is het laatste blog artikel in de serie. Met de aangedragen oplossing zou je op een simpele automatische manier je systemen moeten kunnen monitoren. Het is vooral leuke materie omdat er bijzondere visuele resultaten kunnen worden behaald. Succes!

Deel dit Verhaal:
  • facebook
  • twitter
  • gplus

Over Ton Snoei

Een enthousiaste ontwikkelaar in de allerbreedste zin van het woord.

Het aansturen maar vooral coachen van mensen geeft me veel plezier en een leuke uitdaging. Ik houdt me graag bezig met het bouwen van software maar ook met alle anderen dingen die komen kijken bij het vak dat IT heet.

Met als achtergrond ontwikkelaar heb ik veel ervaring met C# .NET en alles wat daarbij komt kijken. Deze kennis komt nog regelmatig goed van pas. Mijn liefde voor ontwikkeling van software is nooit verdwenen en heb mij daarom in het afgelopen jaar meer verdiept in Java, Android, iOS/iPhone/iPad (Monotouch/Xamarin), PHP en Unity 3D development. Ik noem dat altijd maar: "Lego-spelen voor grote mensen" ;-)

Kortom van de grote lijnen naar projecten tot hands-on problem solven.

Laat een reactie achter

Comment