ZENITY – Werkzeug für Release Management heute

In der heutigen Unternehmens-Release-Planung gilt es zunehmends Abhängigkeiten zu berücksichtigen. Dabei geht es nicht nur um vernetzte IT- und Software-Architekturen, sondern auch um Abhängigkeiten zwischen Hardware, Dokumenten, Fahrzeugen, Maschinen etc. All diese Objekte, im Weiteren als „Komponente“ bezeichnet, sind Teile eines Gesamtsystems oder Prozesses und müssen bei der Release-Planung mitberücksichtigt werden. 

Fehlende Werkzeuge für Abhängigkeiten

Das Release Management umfasst im Allgemeinen die Planung, Projektierung und Umsetzung neuer Releases. Für die Umsetzung und Projektierung gibt es zwar mittlerweile viele Tools auf dem Markt, doch für die Planung gibt es nur wenige Software, die in der Lage sind, komplexe Abhängigkeitsstrukturen zu definieren um sie in die Releaseplanung einfließen zu lassen.

Genau diesem Punkt haben wir bei der Entwicklung der Release Management Software ZENITY besondere Aufmerksamkeit geschenkt, mit dem Resultat, dass selbst komplexe Abhängigkeiten in einer für den Benutzer verständlichen und einfachen Art definiert werden können. Diese Abhängigkeitsgraphen basieren auf dem UML2 Standard und sind im Wesentlichen ein Subset der Komposit- und Komponenten-Diagrammtypen.

Nachfolgendes Beispiel zeigt eine solche graphische Abhängigkeit auf:

Abhängigkeiten im Release Management

Abhängigkeiten im Release Management

Abhängigkeiten als Planungsgrundlage für neue Releases

In ZENITY dienen diese Abhängigkeiten als Grundlage für die Planung. Mittels den Abhängigkeiten ist es möglich, Versionsanpassungen und deren Auswirkungen auf abhängige Versionen zu simulieren und einen Beispiel Releaseplan zu erstellen. Dadurch wird sichergestellt, dass alle betroffenen Stellen (oder Versions-Verantwortliche) in die Planung frühzeitig miteinbezogen werden.

ZENITY bietet nebst Abhängigkeitsgraphen natürlich auch die Möglichkeit, Releases detailliert zu planen und deren Umsetzung zu projektieren und tracken. Durch Schnittstellen ist es möglich, bestehende Change- und Configuration-Management Systeme anzubinden und ZENITY somit in Ihre ITIL-Umgebung zu integrieren. Change Requests aus dem Change Management System können übernommen und in der Projektplanung integriert werden. Komponenten und Versionen können in ZENITY durch eine Vielzahl an Möglichkeiten, erfasst oder importiert werden.

Mittels ZENITY erhalten Sie ein Werkzeug, welche sämtliche Aspekte des Release Management berücksichtigt.

.NET – Dynamische Abfragen mit LINQ erstellen

In den „guten“ alten Tagen, wo man noch mit SQL-Abfragen im Programmcode arbeitete war es leicht, dynamische Abfragen zu erstellen. Durch einfache Zeichenketten-Manipulationen konnten direkt SQL-Statements an die Datenbank gesendet werden. Die Zeichenketten liessen sich im Code zur Laufzeit zusammensetzen.

Mit der Einkehr von OR-Mappern, typisierten Entitäten und LINQ wurde zwar vieles vereinfacht und verbessert, doch fehlt für solche dynamischen Abfragen die Flexibilität. Auch wenn sich Expressions unter LINQ dynamisch zusammensetzen lassen – der Aufwand dafür ist extrem hoch und die Lernkurve dafür sehr steil.

Mittels der Bibliothek System.LINQ.Dynamic lassen sich Abfragen wieder im OLD-SQL-Style erstellen. Queries in der Form „SELECT Attr1, Attr2 FROM Entity WHERE Attr1=@0“ können nach der Installation der Biblothek in der LINQ Funktion Select() und Where() erstellt werden.

Wie diese Funktionen verwendet werden können, wird im folgenden Projekt-Beispiel kurz erläutert. Das Beispiel-Projekt basiert auf dem Entity Framework 6.0 mit Code First und als Datenbank-Provider wurde die In-Memory DB von Effort verwendet. Beide Libraries sind als NuGet-Pakete erhältlich.

Beispiel

Die Vorgaben des Beispiels sind:

  • Der Entitäts-Typ selbst ist dynamisch (Keine Verwendung von DbSet<Entity>)
  • Die SELECT-Felder sind parametrierbar
  • Die Where-Bedingung ist parametrierbar
  • Die Resultate werden inkl. Header-Zeile in einem Konsolen-Fenster wiedergegeben

1. Schritt „Erzeugen der Enitäten mittels Code-First“

Im Beispiel werden zwei Entitäten benötigt: Software und Hardware, beide abgeleitet von der Entität „Component“.

Entitites.cs

2. Schritt „DbContext erstellen“

Im DbContext werden die Entitäten „Software“ und „Hardware“ als DbSet hinzugefügt.

DynamicLINQDbContext.cs

3. Schritt „Programmlogik für die dynamische Abfrage erstellen“

Die dynamische Abfrage im nachfolgenden Code wird in den beiden Methoden Query() und PrintResult() erzeugt. Die restlichen Methoden dienen lediglich dem SetUp der Parameter.

Für die Parametrisierung wurde die Klasse „Field“ erzeugt. Durch sie wird zum einen festgelegt, welche Felder in der Query berücksichtigt werden sollen und ob sie in der Where-Bedingung verwendet werden sollen. Die nachstehende Parametrisierung erzeugt eine solche Abfrage:
SELECT Name, Description, Weight FROM Hardware WHERE Name=’Lenovo T530′ AND Weight > 4.0

 Program.cs

.NET – Programmatically create users in Alfresco DMS

This post aims to show how to create user accounts in the OpenSource Document Mangement System “Alfresco” with .NET. Alfresco provides several web services to interact with. But I found it very hard to get appropriate information how to use these services. In this example you will see how to create a new user in the user database of Alfresco with .NET and dotCMIS.

Please make sure, that your Alfresco installation supports SSL (see “Enable SSL on Tomcat Apache Web Server“) since the Administration web services of Alfresco are accessable only over HTTPS. Secondly, you need to know Alfresco’s administration username and password. If you can access Alfresco’s web services over the SSL port (normally 443 or 8443), you’re ready to start building your .NET project.

CLASS “CONSTANTS.CS”

Some of Alfresco’s web services methods require as parameters some of the values defined in the class below. I have found those constants in Alfresco’s Java API and converted it to C#:

 

CLASS “USER.CS”

This is a simple class that holds some information about a user. It just shows you, which properties are required to setup a new user account in Alfresco. You can replace this class with one of your implementation, just make sure you have these properties defined.

CLASS “USERSERVICES.CS”

This class provides methods to create and remove user accounts in Alfresco’s user management. It makes use of Alfresco administration web services and Alfresco’s CMIS web services. You need to add a WCF “Service Reference” of “https://server.name:PORT/alfresco/api/AdministrationService?wsdl” to your .NET project. Ensure you’re calling the web services over HTTPS and not HTTP.

Snippet

That’s it. Now, you should be able to create and remove user accounts in Alfresco!

.NET – Add documents in Alfresco DMS using Aspects and dotCMIS

This example shows how to add documents in Alfresco by using aspects and dotCMIS. If you’re not familiar with creating custom models in Alfresco, this step-by-step tutorial is a good starting point: Step-By-Step – Creating a custom model with Alfresco.

dotCMIS doesn’t provide built-in support for Alfresco aspects. But there is a way to do that manually by creating extended CMIS elements.

CUSTOMMODEL.XML

The customModel.xml file contains the model for our example project. Our custom model considers the following aspects:

  • Constraints
  • Aspects
  • Types

Constraints

In the constraints section, we define a list of currency values that are valid for the attributes.

Aspects

Aspects are a feature of Alfresco and could be understood as global attribute sets. Apsects can be added and removed for each object in Alfresco. Aspects can be defined on folder or document level.

In our example, the aspects section contains two different aspects. One aspect contains default attributes and the other aspect defines attributes which are used by the content-type “invoice”.

Types

In this section, we define three different node types: Standard, Invoice and Contract. The node type “standard” is as well the base type for invoices and contracts, which means, invoices and contracts inherit all attributes defined by “standard”.

Here is our custum model:

.NET CODE

After setting up Alfresco with our new custom model, we’re ready to implement the required code in .NET.  These are the classes we need to add new documents to Alfresco’s document storage via CMIS with dotCMIS. dotCMIS can be downloaded directly from Apache Chemistry project web site.

lädt
×