LightSwitch–Visual Studio 2013–ein paar Hightlights (Teil1)

Vor kurzem habe ich das Upgrade eines LightSwitch Projektes auf Visual Studio 2013 gewagt. Eins vorweg: Es hat sich gelohnt!  Bei diesem Projekt handelt es sich um einen Silverlight Client der eine externe SQL Server Datenbank anbindet. Das LightSwitch Projekt dient hier der GUI Gestaltung und verwendet keine “_intrinsic-Database”. Zu den Verbesserungen die lt. Doku im Bereich HTML Client hinzugekommen sein sollen, kann ich daher nichts sagen.

Das Highlight für mich ist das nun endlich mehrere Designer gleichzeitig öffen sein können.

In den vorherigen Versionen war immer nur eine Instanz eines Screens- oder Table-Designer möglich. Ein flüssiges arbeiten und schnelles umschalten zwischen mehreren Screens\Tables war nicht möglich. Öffnet man in VS 2013 ein Screen\Table erhält dieser ein eigenes Register und man kann beliebig viele davon gleichzeitig offen halten, das wechseln zwischen den Registern geht entsprechend schnell. Vermutlich auch weil nun für jede Tabelle ein eigenes *.isml File erzeugt wird. Weiter so!

Leider leider funktioniert immer noch nicht die mehrfach Selektion zur Änderung einer gemeinsamen Eigenschaft. Also mal schnell die Text Ausrichtung von links auf rechts ändern ist nicht Trauriges Smiley 

SNAGHTML77efe14

VS 2012 LightSwitch: Updating datasource change FK from NOT NULL to NULL

Oft nutze ich Visual Studio LightSwitch 2012 um externe Datasources einzubinden. Also bereits bestehende Datenbanken bekommen mit LightSwitch ein GUI spendiert. Änderungen am Datenmodell sind in solchen Fällen nur eingeschränkt möglich.

Wenn dann nach dem erstmaligen einlesen der Metadaten einer Datenquelle dennoch ein Update erfolgt, also Änderungen in der DB durchgeführt- und diese nun VS LightSwitch bekannt gemacht werden, kann es zu unerwarteten Fehlern kommen.

In einem konkreten Fall konnte ich LightSwitch nicht dazu bewegen die Änderung einer FK-Beziehung zu erkennen.

In meinem Datenbank Modell hatte ich eine 1-n Beziehung in eine 0-n Beziehung geändert. Dazu wurde die foreign key column von “not NULL” auf “allow NULL” gerändert. Danach kam es dann beim speichern zu folgender Meldung:

Multiplicity conflicts with the referential constraint

in Role ‘XXX’ in relationship ‘FK_Table2_XXX’.

Because all of the properties in the Dependent Role

are non-nullable, multiplicity of the Principal Role

must be ’1′.

Der Fehler ist auch anderen widerfahren und wird in dein einschlägigen Foren diskutiert. Es gibt wohl derzeit nicht allzu viele Lösungswege, einer wäre die Datasource zu löschen und neu hinzuzufügen. Das ist aber ein no go wenn das Projekt viele Screens enthält. Die würden dann in Mitleidenschaft gezogen.

Ein User gab den Tipp die Common.lsml direkt zu verändern. Und das habe ich dann auch gemacht. Wie in diesem Screenshot dargestellt:

image

Microsoft.LightSwitch.SecurityAdmin.exe

Wer nach der Installation einer 3-Tier LightSwitch App noch einen Admin hinzufügen möchte benötigt das Tool Microsoft.LightSwitch.SecurityAdmin.exe, jedenfalls sofern er nicht direkt in der DB fummeln möchte.

Doch wo findet man das Tool?

Auf einem frisch installierten Server der die “LightSwitch für Visual Studio 2012 – Serverkonfiguration ohne lokales SQL Express” (das ist der offizielle sperrige Name) erhalten hat, konnte ich es nicht finden.

Erst eine Suche auf meiner lokalen Entwicklungsmaschine hatte Erfolg. Und zwar hier: C:\Program Files (x86)\Microsoft Visual Studio 10.0\LightSwitch\1.0\Tools

Es reicht aber nicht aus das exe-File zu kopieren. Am einfachsten den ganzen Tools Order zippen und auf die Zielmaschine kopieren um die Microsoft.LightSwitch.SecurityAdmin.exe nutzen zu können.

Aufgerufen wird Microsoft.LightSwitch.SecurityAdmin.exe mit diesen Parametern:

Administrative utility to perform security operations

for a LightSwitch application. /? Display this help text. /createadmin Creates an administrator user. Options: /user:<username> UserName of the user. /password:<password> Password of the user. Required for

Forms authentication mode. /fullname:<full name> Full name of the person represented by the user.

Required for Forms authentication. /config:<config path> Absolute path to the web.config file

of the LightSwitch application.

Wie ich später feststellte war die gefundene Microsoft.LightSwitch.SecurityAdmin.exe von Visual Studio 2010 (LightSwitch 2011) und funktioniert nicht mit VS 2012 LightSwitch Apps. In Visual Studio 2012 ist dieses Programm nach meinen Recherchen nicht mehr enthalten. Stattdessen wird es laut Doku nun mit der “LightSwitch für Visual Studio 2012 – Serverkonfiguration ohne lokales SQL Express” auf dem Hosting Server installiert… leider nicht immer. In meinem Fall konnte ich jedenfalls keine AdminSecurity.exe auf dem Server finden. Neu installieren war leider auch nicht möglich (Details dazu hier).

Um nun endlich weiter zu kommen und das deployment abschliessen zu können, habe ich dann den Weg über die StoredProcedure gewählt. Glücklicherweise war in meiner DB bereits ein Admin enthalten. Mit der folgenden SP kann das Passwort in der DB nach eigenem gusto angepasst werden:

declare @cd datetime set @cd=getdate() exec [dbo].[aspnet_Membership_SetPassword]

‘appname’,‘<domain>\<user>’,‘<plainpassword>’,‘salt’,@cd,0

Der letzte Parameter identifiziert das Passwort Format: (0=Plaintext, 1=Hashed, 2=Encrypted). Hier ist insbesondere die Möglichheit 0=Plaintext hilfreich.

Diese spannende Geschichte ;-) soll mir in erster Linie als Gedankenstütze dienen… mal schauen ob es hilft.

Can’t uninstall Lightswitch for Visual Studio 2012 – Server Configuration without local SQL-Express

Kaum zu glauben, aber das installieren einer LigthSwitch Application kann ganz schön nerven aufreibend werden!

Auf einem frischen Windows Server 2008 R2 Enterprise SP1 habe ich die “Lightswitch for Visual Studio 2012 – Server Configuration without local SQL-Express” per Web Platform Installer zur Installation ausgewählt.

Danach lief alles autom. und fehlerfrei, auch wenn nun der Web Platform Installer anzeigt das “Lightswitch for Visual Studio 2012 – Server Configuration with local SQL-Express” ungefragt auf den Server kopiert wurden:

image

Als ich danach diverse Probleme während des deploments einer LightSwitch Application hatte wollte ich die “Lightswitch for Visual Studio 2012 – Server Configuration” entfernen und erneut installieren… die Vergangenheit zeigt das dann plötzlich Oh-Wunder! das ein oder andere Problem gelöst werden warZwinkerndes Smiley

Leider nicht hier! Denn seht selbst:

image

Da sind keine “Lightswitch for Visual Studio 2012 – Server Configuration” unter Progamme eingetragen?!?!? Was nun? Wie ist hier eine “Neuinstallation” möglich?

Einfache Active Directory Validierung

Wer schon mit der eingebauten Userverwaltung von VS LightSwitch gearbeitet hat, kennt die bequeme Funktion das der eingegeben Name gegen das AD validiert-, und wenn erfolgreich, der Full Name komplettiert wird:

image

Der Screenshot zeigt die Userverwaltung von VS LightSwitch 2012, die Funktionalität gibt es aber auch in der “alten” Version.

Ich war auf der Suche nach der gleichen Funktionalität, sträubte mich aber davor für diesen Anwendungsfall extra einen RIA Service zu bauen. Nach ein wenig stöbern bin ich glücklicherweise auf folgende Methode gestoßen:

try
{
  Microsoft.LightSwitch.Security.WindowsUserInfo info = 
        this.DataWorkspace.SecurityData.GetWindowsUserInfo(Property1);
  YourNameColumn = info.FullName;
}
catch (Exception e)
{
  // handle exception
}

GetWindowsUserInfo macht hier das gewünschte Smiley Wer eine simple Active Directory Validierung benötigt und dafür nicht einen RIA Service anlegen möchte, sollte diese Methode versuchen.

Noch ein Hinweis: Der Anwender muss in der Gruppe “SecurityAdministration” sein! Ansonsten kommt es beim Aufruf zu einer Exception.

Visual Studio 2012

Den Test und das experimentieren mit einer Visual Studio 2012 Beta habe ich mir geschenkt. Umso gespannter war ich nun selbst die ersten Versuche mit dem Final Release zu machen. Und der erste Eindruck? Angenehm überrascht!

Als erstes bemerkte ich die gefühlt wesentlich bessere Startgeschwindigkeit. Zum vergleich startete ich mehrmals VS 2010 und VS 2012 nacheinander. VS 2012 war auf meinem Rechner nach ca. 3 sec. bereit! VS2010 benötigte ca. 4 sec bis die IDE sichtbar war und weitere ca. 4 sec. bis der Waitcursor endlich verschwand. Beachtlich!!

Danach musste ich schnell das Color theme auf Dark umstellen:

image

Danach war die IDE richtig ansehnlich Zwinkerndes Smiley

image

Bei VS LightSwitch 2012 bemerkte ich ebenfalls eine deutlich bessere Reaktionsgeschwindigkeit der IDE. Besonders der Wechsel zwischen dem Table Designer und dem Screen Designer geht nun flugs von statten, was noch in LightSwitch 2011 eine sehr träge Angelegenheit war.

Details folgen…

Movie List Printer

Der Movie List Printer ist ein kleines Tool um schnell und einfach eine Liste von Filmen zu erstellen. Die Daten kommen dabei von http://www.themoviedb.org
Das Aussehen der Liste kann in teilen beeinflusst werden. Wobei der Focus des Programmes auf “schnell” & “einfach” liegt. Um seine Filme in einer Datenbank zu verwalten gibt es viele gute programme.

Excel Export verursacht Performance Probleme

Wer viele Daten ohne Paging mit Lightswitch anzeigen möchte, wird unter gewissen Umständen einen deutlichen Performance Einbruch bemerken:

… And the result was huge performance hit. Screen with 2600 records opened in 30 seconds. At first we thought that slowest part is SQL data retrieval, but when we looked in SQL Profiler, it showed that SQL request took only 1-2 seconds. During window opening there is network activity for approx. 3 seconds, then CPU usage goes up to 50 percent and stays there until screen fully loads. So, we think that the problem is with data serialization/deserialization or rendering.

OK, you could say: If you request so many records, of course, you have to wait a little longer. Okay, I agree. But waiting for screen to load is just one problem, even fully loaded screen with more than 50 records is laggy and scrolling is really slow. …

Im Microsoft eigenen Lightswitch Forum wird das in diesem Thread detailliert diskutiert: Unacceptable performance for more than 50 records.

Kurz zusammen gefasst ist die Ursache das Export to Excel Feature! Diese Funktion steht nur Desktop Anwendungen zur Verfügung. Daher ist auch nur dort der Performance Einbruch zu beobachten. Also einfach mal abschalten wenn es langsam wird!

Visual Studio Lightswitch zeigt meine DB Views nicht an?!

Das einbinden von Datenquellen (z.b. eine bestehende Datenbank) ist in Visual Studio sehr einfach möglich. Umso verwunderter ist man, wenn im nächsten Schritt nur einige oder keine Datenbank Views zu Auswahl angezeigt werden.

image

Was ist die Ursache?

VS Lightswitch 2011 zeigt nur Datenbank Views an, wenn diese einen Primary Key- oder mindestens eine Not Nullable Spalte enthalten (welche LS dann intern als Key nutzen kann). Alle anderen Views werden ohne weitere Meldung ausgeblendet.

Praxistauglicher fände ich den View als Readonly zu Kennzeichen, damit stände dem Einsatz nichts mehr im Wege. Leider hat Microsoft das anders gesehen Zwinkerndes Smiley

Welche Möglichkeiten hat man trotzdem an den VIEW zu kommen? Oft ist an eine Änderung des Views nicht zu denken, wenn z.b. eine Lightswitch Applikation auf einer bestehenden Datenbank basiert und der DB Admin nur ein müdes lächeln für den Änderungswunsch übrig hat…

Hier heißt die Lösung WCF RIA Services! Ein Beispiel folgt das nächste mal.