Archiv für März 2013

Lync Migration – die Kommunikation geht in die Cloud

Montag, 25. März 2013

bildteaser_cloud3Nun konnte unser eigentliches Vorhaben starten. Unser OnPremises Lync-Server sollte in die Cloud, zu Microsoft Office 365! Um das Login in der „neuen“ Welt problemlos zu gestalten, gibt es einiges zu beachten. Schauen wir es uns Step by Step an!

 

 

Als Erstes müssen wir unsere per DirSync übertragenen User für Lync aktivieren und lizensieren. Dies können wir ganz einfach über die Usereigenschaften machen:

 

Nachdem nun unser User den Service nutzt, sollte ihm auch noch jemand sagen, wie er dahin kommt. Dafür müssen die erforderlichen DNS Einträge für das entsprechende Lync-Domain bearbeitet werden. ACHTUNG! Wenn Sie SplittDNS betreiben, müssen Sie die Einstellungen sowohl in Ihrem lokalen DNS Server, als auch in Ihrem WAN DNS Server vornehmen. Bei ProTechnology sah das folgendermaßen aus.

Lokaler DNS Server:

 

WAN DNS Server:

Soweit so gut. Jetzt kommt aber der Stolperstein, den viele Kunden vergessen, übersehen oder gar nicht wissen. Und zwar: ACTIVE DIRECTORY USER ATTRIBUTE. Sie haben ja Ihren User im OnPremises Lync Server deaktiviert, da er ja zukünftig seinen Cloud Lync Account nutzen soll.

Der User kann sich demnach nicht mehr an Ihrem lokalen Lync Server anmelden, aber der Userdatensatz per se bleibt im Active Directory, wie er ist.

Die msRTCSIP-* Attribute werden jedoch beim DirSync mit Office 365 übertragen. Das stört aber besonders den Office 365 Lync Server.  Denn dieser verweigert nun das Aktivieren des Users auf sich selber. Schließlich scheint dieser ja auf einem anderen Server aktiviert zu sein. Was nun, etwa alle AD Attribute von Hand leeren? Nein, es genügt ein weiterer Schritt im lokalen Lync Server. Löschen Sie den User NACH dem Deaktivieren aus Ihrem Lync Server:

 

Somit sehen seine AD Attribute hinterher wie folgt aus:

Nun wird der User nach der nächsten Synchronisierung mit Office 365 für Lync in der Cloud aktiviert und er kann sich bei Lync anmelden.

Übrigens, wenn Sie uns per Lync kontaktieren wollen, so aktivieren Sie noch schnell den Domänenverbund.

Gehen Sie in Ihrer Office 365 Portalübersicht auf den Punkt „Lync verwalten“ und dann auf  „Externe Kommunikation“ .

Aktivieren Sie hier den „Domainverbundmodus“ entweder für alle Domains oder nur für Ausgewählte.

Die ProTechnology-Mitarbeiter erreichen Sie im Lync unter der persönlichen eMail-Adresse. Gerne können Sie Office 365 (demnach auch Lync in der Cloud) testen: Testversion Office 365 für bis zu 25 Benutzerlizenzen oder für bis zu 10 Benutzerlizenzen.

Passender Artikel dazu: “AD DirSync & Single Sign On – Wie synchronisiere ich nur die User, die in die Cloud sollen?”

Autoren: Sascha Blickensdörfer, Jens Decker

Validierung aus der Datenbank in ASP.NET MVC

Dienstag, 19. März 2013

bildteaser_validierungAls Zugabe zu meinem letzten Blog über “Lokalisierung aus der Datenbank in ASP.NET MVC“, geht es diesmal um Validierung. Praktischerweise lässt die nun folgende Implementierung zudem weitere Wege offen, verschiedenste Konfigurationen in diversen Datenquellen zu hinterlegen. Je nach gewählter Datenquelle (Datei, Datenbank, Azure Storage) lassen sich die Konfigurationen problemlos während der Laufzeit verändern. Daher die Wahl der Validierung als Beispiel, um die Mächtigkeit zu demonstrieren. Der Titel müsste korrekterweise also “Konfiguration aus einer beliebigen Datenquelle” heißen, aber das würde den Rahmen deutlich sprengen. Doch genug des Vorgeplänkels: “Developers, start your Environment!

Meistens integriert man die Validierung direkt im Code. Methoden prüfen die Werte der einzelnen Eingaben. Im ASP.NET MVC lässt sich das ja bereits mit Attributen am Model entschlacken. Problem ist hierbei allerdings, dass Attribute nicht ohne weiteres auf unterschiedliche Eigenschaften zugreifen können. So lässt sich bspw. mit einem Attribut an einer StartDate-Eigenschaft schwer prüfen, ob die entsprechende EndDate-Eigenschaft zeitlich später angegeben wurde. Unmöglich ist es nicht, aber bisher fand ich keinen sauberen Weg. Somit wählt man über kurz oder lang zumindest teilweise wieder den Weg der direkten Validierung ohne Attribute, wodurch am Ende ein noch viel schlimmerer Misch-Masch entsteht. Ein weiteres Thema ist außerdem die clientseitige Validierung, die bei Attributen recht praktisch mit erzeugt wird, wenn man die Macht des MVC korrekt nutzt. Doch wie Vereinheitlicht man diese ganzen Validierungen und fügt zudem die Flexibilität einer Konfiguration hinzu, die sich praktischerweise auch noch in einer Oberfläche konfigurieren lässt?

Schön und gut, aber was hilft uns nun?

Da sind wir auch schon beim Kern unseres Themas. Es mag sicherlich andere Möglichkeiten geben. Eventuell sogar bessere. Doch ich konzentriere mich hier auf Erprobtes und Gewohntes:
Die Nutzung der Enterprise Library mit einer eigenen ConfigurationSource. Das ist auch schon fast die gesamte Magie. Die Enterprise Library bringt, neben vielen anderen nützlichen Dingen, die Möglichkeit der konfigurierbaren Validierung mit sich. Dazu gibt es ein kleines Programm, mit welchem man ganz simpel seine Klassen  sowie Validatoren wählt und konfiguriert, plus am Ende eine ganze Validierung einstellt. Alternativ kann man sich auch manuell durch die XML Konfiguration hangeln.

Die Validierung der Enterprise Library funktioniert auch etwas anders, als man es bei Attributen gewohnt ist. Es lassen sich unterschiedliche Validatoren zusammensetzen und sogar And-/Or-Validatoren verwenden. Auch das Validieren von mehreren abhängigen Eigenschaften (StartDate, EndDate) stellt keine Probleme dar. Erweitern kann man diese natürlich auch mit eigenen Validatoren, wodurch auch jede andere denkbare Form der Validierung möglich wird. Das Ganze lässt sich mit etwas Code auch problemlos auf die clientseitige Validierung adaptieren, worauf ich jedoch erst im nächsten Blog eingehen möchte.
Zur Speicherung dieser Konfigurationen bringt die Enterprise Library unterschiedliche ConfigurationSources mit. Beispielsweise eine SqlConfigurationSource oder gar eine Azure BlobConfigurationSource. Doch was ist, wenn man sein Frontend mit einer Serviceschicht von diesen Teilen abgetrennt hat? Genau, man muss sich selbst eine ConfigurationSource bauen.

Unsere eigene ConfigurationSource

Als Erstes müssen wir unsere eigene ConfigurationSource vom Interface IConfigurationSource aus dem Namespace Microsoft.Practices.EnterpriseLibrary.Common.Configuration ableiten. Die im Interface enthaltenen Methoden müssen wir anschließend nicht vollständig implementieren. Uns werden nur die Methoden GetSection, Add und Remove interessieren, wobei genau genommen nur GetSection wirklich relevant für unseren Fall ist, außer man beabsichtigt das Konfigurationsprogramm direkt mit dieser ConfigurationSource zu verwenden. In diesem Blog beschränke ich mich erst einmal auf das Wesentliche, also nur auf GetSection, auch wenn die Implementierung für Add und Remove alles andere als kompliziert ist. In der angehangenen Solution sind diese natürlich beispielhaft mit implementiert.

Die Implementierung von GetSection ist, wie man hier deutlich sieht, ziemlich unspektakulär. Wir fragen lediglich unseren Service nach der gewünschten Section, deserialisieren diese und werfen sie zurück. Zur Deserialisierung benötigen wir allerdings bereits den korrekten Typ unserer Section, den wir uns mit Hilfe einer privaten Methode GetSectionByName holen. Diese sieht dann ganz schlicht wie folgt aus:

Dazu nun unser eigenes ConfigurationElement

Zur Vollständigkeit unseres Gesamtkunstwerks benötigen wir nun noch ein ConfigurationSourceElement, welches wir in unserer ConfigurationSource mit Hilfe des Attributs ConfigurationElementType verlinkt hatten. Dieses enthält eigentlich keinen ernsthaften Code und sieht entsprechend so aus:

Anbinden in der web.config und das wars, oder?

Fast! Aber alles zu seiner Zeit. Die Anbindung in der web.config ist auch keine große Sache. Das Konfigurationsprogramm der Enterprise Library würde dies sogar für uns erledigen. Allerdings achtet dieses nicht so wirklich auf Reihenfolge und Formatierung der web.config, die man sich möglicherweise vorher schön säuberlich aufgeräumt hatte. Wie auch immer, hier der entscheidende Code:


Man sollte meinen, wir sind nun fertig. Doch genau genommen haben wir bisher nur die Validierung der Enterprise Library vorbereitet und eine eigene Quelle für Konfigurationen erstellt. Das ist toll und reicht auch aus, wenn man die Validierung nur “manuell” ansteuern möchte. Im MVC ist es allerdings üblich die Validierung vom ModelValidator verrichten zu lassen, da dieser nicht ohne Grund dafür geschaffen wurde.

See you later, ModelValidator

Mit einem ModelValidator wird unsere Validierung beim Erhalt von Daten in einer Action des Controllers bereits ausgeführt, sodass wir direkt mit dem Ergebnis und dem entsprechenden Model arbeiten können. Zusätzlich wird natürlich auch bei TryUpdateModel und TryValidateModel unser ModelValidator aufgerufen, was uns erneut ein manuelles ansteuern der Enterprise Library Validierung erspart. Das ist fast wie Weihnachten :-)

Unser ModelValidator benötigt zur Einbindung ins MVC allerdings auch noch einen ModelValidatorProvider. Diesen implementieren wir kurz und schmerzlos folgendermaßen:

Der ModelValidator selbst ruft dann ohne Umwege die Validierung der Enterprise Library auf. Im nun folgenden Screenshot habe ich mich dabei auf den wesentlichen Teil beschränkt. In der angehangenen Solution ist im Provider zusätzlich ein Cache eingebaut, den man auch problemlos auf Dependency Injection (die Enterprise Library liefert dafür Unity) ummünzen kann. Zudem ist dort auch bereits die clientseitige Validierung angedeutet, die im nächsten Blog lediglich um die konkreten Adapter erweitert werden muss.

Nun implementieren wir nur noch die Validate-Methode, welche die Validierung der Enterprise Library aufruft und direkt dessen ValidationResults in für das MVC taugliche ModelValidationResults umwandelt.

Zu guter Letzt geben wir dem MVC noch unseren mühsam angelegten ModelValidator auf den Weg, sodass fortan die Validierung von der Enterprise Library übernommen wird.

Fazit

Nun haben wir unser Gerüst fertig gestellt. Die Validierung kann nun komfortabel konfiguriert und natürlich auch außerhalb des ModelValidators vom Code angesteuert werden, wodurch sich die gleiche Validierungslogik in der gesamten Anwendung wiederverwenden lässt. Fehlt eigentlich nur noch die clientseitige Validierung.

Als kleines Sahnehäubchen habe ich diesmal nicht nur den üblichen SourceCode in ein ZIP gepackt, sondern verweise zusätzlich auf ein sehr interessantes Projekt namens ElValWeb. In diesem ist die Validierung der Enterprise Library clientseitig umgesetzt. Etwas angepasst/ aktualisiert lässt es sich wunderbar inkl. CustomValidator-Unterstützung im MVC 4 einsetzen. Das möchte ich mir allerdings, wie bereits erwähnt, für einen späteren Blog aufheben. Dieses ganze Wissen in einen Topf geworfen und gut umgerührt, ergibt dann eine komplette konfigurierbare Validierung aus einer beliebigen Datenquelle (Datenbank, Azure Storage) inkl. clientseitiger Validierung. It’s magic!

Im Übrigen können die Meldungen unserer soeben implementierten Validierung auch, passend zu meinem letzten Blog, aus Resourcendateien und demzufolge auch aus der Datenbank kommen. Man könnte meinen, das ist Absicht. ;-)
Wie versprochen hier die gesamte Solution zum Download.

Quellen: Enterprise Library, MSDN – Configuring Enterprise Library, MSDN – Validation Application Block
Autor: Dirk Sarodnick
Google+

ProTechnology berichtet von der CeBIT 2013 – Microsoft trifft den Zeitgeist mit Software und Tablets zum Anfassen

Sonntag, 10. März 2013
Nach Jahren des Umbruchs zwischen dem Turbojahr 2001 und dem noch jungen Geschäftsjahr 2013 haben sich die Verhältnisse spürbar verändert. Die Besucherzahlen sind stark gesunken, jedoch wurde das Publikum dabei auf die Kernzielgruppe der Aussteller reduziert. Wo vor zehn Jahren noch zu Messekonditionen Großeinkäufe durchgeführt wurden, dort steht heute das Kennenlernen, Ausprobieren, Fragen stellen und Netzwerken im Vordergrund. Wo sonst Heerschaaren von sogenannten Beutelratten die Messegänge verstopften, um Kugelschreiber und Mousepads einzusammeln, sind engagierte Anbieter und Nachfrager des Marktes übrig geblieben, um das zu bekommen, was Sie suchen – eine Lösung für ihre Probleme. Und natürlich neue Geschäftspartner.

Halle 4 war wie immer auf der CeBIT „the place to be“ mit einer ganz eigenen Atmosphäre. Während unweit des Microsoft-Areals eher Shows, Gewinnspiele und andere Belanglosigkeiten das Geschehen dominierten, so bekam der Messebesucher auf der großen Microsoft-Bühne einen unterhaltsamen Mix aus Produktpräsentationen und lebensnahen Anwendungsfällen geboten. Die verantwortlichen Mitarbeiter ließen es sich nicht nehmen, ihre Produkte persönlich zu präsentieren. Besonders hohen Unterhaltungswert hatten auch in diesem Jahr wieder das Engagement von Nils Bomhoff (MTV Game One, ehem. NBC GIGA) und die ihn begleitende Live-Band. Am Dienstagvormittag stand auch Bundekanzlerin Merkel auf der Bühne, um Microsoft und den Partnern eine erfolgreiche Messe zu wünschen. Zugleich lobte sie die zahlreichen Innovationen und nahm das neue Surface Tablett als Geschenk entgegen.

Das Thema ShareConomy stand im Mittelpunkt der diesjährigen CeBIT – überall wird „ge-shared“: Wissen, Erfahrungen und auch Ressourcen sollen gemeinsam genutzt werden, um die Zusammenarbeit effizienter zu gestalten. Die Hersteller haben verstanden, den Social-Aspekt als „Enabler“ einzusetzen, um ihre Plattformen wie SharePoint für ihre Nutzer noch interessanter zu machen. Durch die Popularität von Social Media (auch in Unternehmen) und dem Wunsch, Shareholder und Stakeholder besser in laufende Prozesse zu integrieren, wächst das Interesse an ShareConomy enorm.

Microsoft hat das Thema aufgegriffen und personalisiert. Human Touch – das sind Technologien, die sich unserem Leben anpassen. Alles soll und wird einfacher werden. Das Thema Haptik, also das Berühren von Benutzeroberflächen spielt eine große Rolle für Mindworker und ist nun Teil der aktuellen Produkte. Wer bei der rasanten Entwicklung noch Schritt halten will, der braucht intelligente Lösungen. Das dürfte nach den interessanten Vorträgen auf der Center Stage von Microsoft allen klar geworden sein. Auch denen, die mit den Microsoft „Tabletten“ und der „Kachelei“ (O-Ton eines Gastes!) derzeit noch nichts anfangen können. Wie so oft, ergibt sich der Anwendungsfall für neue Technologien mehr zufällig als aus der Planung – was für fast alle Arten von Bedürfnissen gilt.

Der Fachbesucher konnte sich kostenfrei von den anwesenden Microsoft-Experten (oft sogar MVPs) beraten lassen. Darüber hinaus gab es ein Vortrags-Kino, ein IT-Camp und weitere Angebote, die das Herz des IT-Pro´s höher schlagen lassen. Wenn Sie sich den einen oder anderen Vortrag erneut anschauen möchten: über uns finden Sie die Übersicht aller Vorträge. Schauen Sie es sich an, es lohnt sich! Auch für Partner wurde ein guter Rahmen geboten, um Geschäft zu generieren. So begegnete man guten Bekannten aus anderen Partnerfirmen oder traf sich mit potentiellen Neukunden in der Partner-Lounge. Nach 18 Uhr und einem anstrengenden, aber erfolgreichen Messetag traf man sich in der Microsoft-Lounge in der ersten Etage auf das obligatorische Messe-Bierchen und ließ den Tag gediegen ausklingen.

Unser Messe-Team (Annekathrin Buhr, Karsten Ulferts, Sascha Blickensdörfer, Katharina Flemmer)

Summa summarum: uns bot sich ein Bild zahlreicher Anwendungen auf Microsoft-Plattformen (SharePoint, NAV, SQL Server, Azure), die von Partnern auf einen spezifischen Anwendungsfall (Vertragsmanagement, Ideenmanagement, etc.) hin erstellt wurden. Diese waren hochwertig konfiguriert/designt, jedoch bildeten diese Anwendungen lediglich einen Geschäftsprozess innerhalb einer Anwendung ab. In der Regel sind Geschäftsprozesse jedoch anwendungssystemübergreifend. Beginnend im CRM, dann weiter im SharePoint und weiter im NAV, etc. Unsere Spezialität ist es, Geschäftsprozesse über mehrere Systeme hinweg abzubilden und die Systeme auf der Anwendungsebene miteinander kommunizieren zu lassen. Das bedeutet: Funktionalitäten von System A (z. B. SharePoint) aus System B (z. B. CRM) heraus abrufen und verwenden zu können. Diesen Focus behalten wir bei und freuen uns auf die CeBIT 2014!

Autoren: Annekathrin Buhr, Karsten Ulferts