Willkommen zu Teil #5 unseres Erstaunlich blogPost und webinar Serie! In unserer Serie helfen wir Ihnen, alle Ihre Domino-Anwendungen zu analysieren.

Der Titel des webinar hierfür blogDer Post lautete „Gehen Sie nicht in einen Graben, weil Sie keine Hindernisse in Ihrem Quellcode kennen“.

Dieses Mal teilen wir Ihnen mit, warum, was und wie Sie in Ihren Domino-Anwendungen analysieren sollten.

Bitte kontaktieren Sie uns, wenn Sie Probleme im Zusammenhang mit dieser Website haben oder Akzeptieren Sie Marketing-Cookies um dieses Video anzusehen.

Ein Vorwort für Nicht-Entwickler

Wenn Sie kein Entwickler sind: Die folgende Einführung kann Ihnen helfen, den Rest dieses Beitrags besser zu verstehen.

Jede Datenbank in Ihrer Umgebung enthält Designelemente und Code. Dies dient dazu, alle darin enthaltenen Dokumente anzuzeigen. Sei es zum Erstellen, Bearbeiten oder Lesen.

Ansichten zeigen Ihre Dokumente im Listenformat an. Diese können sortiert und/oder kategorisiert werden. Zum Beispiel nach Datum, Benutzername oder was auch immer zur jeweiligen Anwendung und Ansicht passt.

Neben Ansichten sind zwei weitere Gestaltungselemente hervorzuheben. Diese unterstützen Sie beim Erstellen, Bearbeiten oder Lesen von Dokumenten in Ihren Datenbanken:

  • Aktionen in Ansichten (normalerweise über Schaltflächen oder Menüoptionen oben in Ansichten verfügbar)
  • und Formulare sowie Felder in Formularen

Eine Datenbank kann aus vielen weiteren Typen von Gestaltungselementen bestehen. Jeder von ihnen kann eine oder mehrere der folgenden Programmiersprachen verwenden:
@Formeln, LotusScript, JavaScript und Java.

Dieser Code kann wiederum eine Vielzahl von Schnittstellen und Abhängigkeiten haben:

  • andere Notes/Domino-Datenbanken,
  • andere Anwendungen wie Microsoft Excel oder SAP,
  • das Dateisystem – sei es auf Clients oder Servern –,
  • das Betriebssystem,
  • und viele, viele andere Abhängigkeiten.

Eine Anwendung kann eine oder mehrere Datenbanken umfassen und auf einem oder mehreren Servern verfügbar sein. Die Replikation hält dieselben Datenbanken auf allen Servern synchron. Dies führt zu großartiger Leistung, Lastausgleich und hoher Verfügbarkeit über Regionen/Netzwerke hinweg.

Wenn Sie eine Anwendung optimieren, modernisieren oder migrieren möchten, müssen Sie Folgendes wissen:

  • wie komplex eine Anwendung ist (denken Sie an Typen und Anzahl von Designelementen sowie Codezeilen),
  • Was der ganze Code macht,
  • und ob der Code in Ihrem jeweiligen Projekt einfach zu handhaben ist.

Beginnen wir also mit dem Warum

Die meisten Entwickler haben nicht alle Anwendungen selbst entwickelt. Selbst wenn sie es taten (Chapeau!), geschah es höchstwahrscheinlich nicht „alles gestern“, sondern über ein paar Jahre. Erinnern Sie sich noch gut genug an den Code in all Ihren Anwendungen?

Außerdem haben einige Unternehmen nicht einmal mehr einen Domino-Entwickler. Ganz zu schweigen von allen, die im Laufe der Jahre beim Aufbau der heutigen Anwendungslandschaft mitgewirkt haben.

Als Nächstes ist es gut, den Quellcode einer Anwendung zu kennen, um sie unverändert auf Domino auszuführen/zu warten.

Schließlich möchten Sie alle Hindernisse sowie hilfreichen Code finden, wenn nicht im Allgemeinen die guten, die schlechten und die hässlichen.

Wenn Sie Ihre Anwendungen optimieren, modernisieren oder migrieren möchten:

Alles in allem wäre es nicht toll, wenn Sie sich wertvolle Zeit, Frust und Fallstricke sparen könnten? Kennen Sie die Stakeholder Ihrer Anwendungen, wird in Kombination mit der Analyse des Designs und des Codes Ihrer Anwendungen viel leistungsfähiger.

Sobald Sie Ihre Stakeholder kennen, wissen Sie auch:

  • Wer ist von Änderungen betroffen, die Sie an einer Anwendung vornehmen?
  • Wie werden sie betroffen sein?
  • Wen sollten Sie konsultieren, bevor Sie Änderungen vornehmen?
  • Wer profitiert von Ihrer Arbeit?

Was uns zum Was bringt

Bevor wir uns mit dem Thema „Was von Ihrem Code sollten Sie analysieren“ befassen, denken Sie bitte daran: 

Es gibt viele andere wichtige Datenpunkte, die vor der Codeanalyse zu berücksichtigen sind: 

  • Welches sind Ihre am häufigsten verwendeten und am wenigsten komplexen Anwendungen?
    Diese zahlen sich schnell aus. Und Sie sollten keine Zeit mit Anwendungen verbringen, die niemand verwendet! Für weitere Details siehe auch hier und hier
  • Welche Endbenutzer benötigen aus Gründen der Leistung oder der Offline-Nutzung lokale Replikate? 
  • Welche Anwendungen nutzen Ihre VIPs oder Ihre wichtigsten Profit Center? 

Dies sind nur ein paar Beispiele, die Sie sich merken sollten – mehr finden Sie hier (siehe Folien 17-21)

Welchen Code sollten Sie nun analysieren und wonach Sie darin suchen? 

Alles davon. Zeitraum. In *allen* Ihren Anwendungen. Und das bedeutet für jeden von ihnen 

  • Der gesamte Code: @Formulas, Java, JavaScript und LotusScript 
  • Alle Gestaltungselemente (denken Sie an „Code-Container“). Dies können Formulare, Unterformulare, Ansichten, Spalten, Aktionen, Agenten, Schaltflächen, Skriptbibliotheken usw. sein. 
  • Folgende Gestaltungselemente verdienen oft besondere Aufmerksamkeit:
    XPages, Java-Klassen, Applets, Jar-Dateien, Webdienste, Funktionen für zusammengesetzte Anwendungen und ähnliches 

Korrekte Analyse beider Anwendungsdesignelemente und Code beantwortet zwei wesentliche Fragen: 

  1. Wo lebt Ihr gesamter Code? Wie viel ist wo? Und was ist das für ein Code? 
  2. Was macht dieser Code?

Die folgenden beiden Beispiele zeigen den Wert der Analyse von Design und Code: 

a) Je mehr Formulare, Felder und Code eine Anwendung hat, desto zeitaufwändiger ist ihre Modernisierung oder Migration 

b) Eine Anwendung, die Java-Code verwendet, ist kein idealer Kandidat für die Migration zu SharePoint. Ja, das hängt teilweise davon ab, was der entsprechende Code macht. Es hilft Ihnen jedoch, Ihre Bewerbungen zu ordnen und zu prevent Tücken.

WAS solltest du in deinem Code suchen 

Die Suche im Code kann alles von Spaß bis Frustration sein. 

Nach der Exportieren des Designs Ihrer Apps nach DXL (Domino XML Language), hier sind drei Tipps für den Anfang: 

  1. Starten Sie Notepad oder ähnliches und erkunden Sie das Ergebnis. Um ein erstes Gefühl zu bekommen, versuchen Sie, einen Teil Ihres Codes zu finden, indem Sie nach Teilen davon suchen. Suchen Sie auch nach Benutzernamen, Servernamen und ähnlichem 
  2. Versuchen Sie LotusScript Manager oder Source Sniffer von OpenNTF
    (Verwenden Sie *nicht* Lotus Analyzer! Es hat ein verstecktes Design und telefoniert nach Hause) 
  3. Pro-Challenge: Schneiden Sie den Code aus dem DXL in Dokumente in einer Notes-Datenbank. Dies erleichtert die Kategorisierung, Suche und Nachbearbeitung (z.B. um Gestaltungselemente zu zählen) 

Wenn Sie eines der oben genannten Verfahren ausprobiert haben, sind Ihnen möglicherweise einige Mängel aufgefallen: 

a) Ihre Suchanfragen stimmen auch mit Kommentaren/Anmerkungen in Ihrem Code überein 

b) Kombinierte Suchen wie @Db(Column OR Lookup) rufen dazu auf, zuerst die Pro-Challenge anzugehen
(=Schneiden des Codes in Notes/Domino-Dokumente oder eine SQL-Datenbank). Getrennte Suchen führen zu doppelten Ergebnissen. Dies wiederum widerspricht Ihrem Ziel, so wenig Code wie möglich zu überprüfen. 

c) Ihre Suchanfragen stimmen auch mit Code überein, nach dem Sie nicht gesucht haben. Beispielsweise: 

  • Die Suche nach „Open“ findet NotesDatabase[Object].Open und NotesStream[Object].Open 
  • Die Suche nach „@DbLookup“ umfasst Suchvorgänge in derselben Datenbank, in der sich der Code befindet. Möglicherweise möchten Sie jedoch nur nach anderen/externen Datenbanken suchen. Oder Ihr Ergebnis enthält auch Nicht-Notes-Lookups wie ODBC. Möglicherweise suchen Sie jedoch nur nach Notes-Suchen. 

SchluchzenBevor wir unsere Suche fortsetzen, müssen wir optimieren der Code

Für gute Suchergebnisse müssen wir alle Kommentare aus dem gesamten Code entfernen. Ja, Kommentare sind gut in Ihrem Code, um ihn später wieder besser zu verstehen. Aber sie verzerren unsere Suchergebnisse. 

Die folgenden Bilder veranschaulichen, wie ein Entwickler in LotusScript und @Formulas kommentieren kann: 

In @Formulas beginnen Kommentare mit einem REM, gefolgt von beliebig vielen Leerzeichen (=Leerzeichen oder Tabulatoren). Als nächstes kommt der eigentliche Kommentar, der entweder von doppelten Anführungszeichen oder geschweiften Klammern umgeben ist.

Wir haben das oben Genannte bereits vorbereitet, damit Sie es KOSTENLOS testen können

Dieser gesamte Artikel hilft Ihnen, Ihre eigenen, unabhängigen Anwendungsanalysen zu verstehen und durchzuführen. Vielleicht möchten Sie sich jedoch wertvolle Zeit sparen und schnell vorankommen. Alles was du tun musst, ist registriere dich für unser ready-to-play iDNA Applications Sandkasten. Sobald Sie sich registriert haben, müssen Sie sich nur noch einloggen und zu unserem vorgefertigte Instant-Code-Suche. Zugegeben, es zeigt nicht Ihre eigenen Anwendungen, gibt Ihnen aber eine gute Vorstellung davon, wie die Codesuche funktionieren sollte.

Verwenden Sie zum Testen die Textsuche mit „florian“, „vogler“, „server“, „/acme“, „/O=acme“ und „workflow“. Versuchen Sie auch eine Suche mit regulären Ausdrücken wie „(?iw)@db(lookup|column)“.

Lassen Sie uns nun wirklich in das Thema eintauchen, wonach Sie *in* all dem (Design und) Code Ihrer Anwendungen suchen müssen:

Wenn Sie optimieren möchten

  • Suche nach GetNthDocument – ​​es ist langsamer als GetFirst/GetNextDocument
  • Suche nach hartcodierten Servernamen, Benutzernamen, Datenbankdateinamen, IP-Adressen, E-Mail-Adressen, Replikat-IDs usw.
  • Nach altem Code suchen (@V2If, @V3Username, @V4UserAccess, @UserPrivileges, @IfError)
  • Unabhängig vom Code: Finden Sie Ihre meistgenutzten/beliebtesten Datenbanken und schenken Sie ihnen ein wenig Liebe. Machen Sie sie schöner und moderner!

Wenn Sie modernisieren möchten

  • Prüfen Sie, ob eine Anwendung stark auf NotesUI*-Klassen angewiesen ist. Das funktioniert in Webbrowsern nicht und muss überarbeitet werden
    Suchen Sie nach Code, der in Browsern nicht unterstützt wird. Hinweis: Suchen Sie in der Designer-Hilfe nach „Diese Funktion kann in Webanwendungen nicht verwendet werden“.
  • Gibt es bereits viel Code, der auf Browserunterstützung hinweist?
    dh @WebDbName, @BrowserInfo, @ClientType, Domino @DbCommands, …
  • Ist Ihre Anwendung/Ihr Code vom Drucken abhängig? Das kann für einen Browser eine Herausforderung sein
  • Analysieren Sie Ihren Code, ob er funktioniert HCL Nomad
    • Ist die Anwendung abhängig von XPages, Java oder ODBC? Das geht nicht weiter HCL Nomad.
    • Verwendet die Anwendung C-API-Aufrufe? Wenn ja, funktioniert der Code auch auf iOS und Android?
    Benötigt Ihre Anwendung Client-Erweiterungen von Drittanbietern?
  • Unabhängig vom Code: Finden Sie Ihre am häufigsten verwendeten/beliebtesten Datenbanken und geben Sie ihnen ein wenig Liebe. Machen Sie sie schöner und moderner!

Wenn Sie migrieren möchten

  • Wie viele Formulare, Felder, Ansichten etc. hat eine Anwendung? Wählen Sie nicht zuerst das Komplexeste aus.
  • Hängt Ihre App von Code- oder Designelementen ab, die auf Ihrer jeweiligen Zielplattform nicht gut funktionieren?
    Beispiel: Java <> SharePoint, zu viele Ordner <> SharePoint. C-API. Privates oder öffentliches Adressbuch, Mail (Senden und) verschlüsseln. Verwenden Sie LSX, ODBC, DB2, DOS/cmd, OLE, Dateien, Verzeichnisse, MIME, Dokumentverknüpfungen usw.
  • Ist eine Anwendung von anderen Datenbanken abhängig?
    Denken Sie an @DbLookups, die sich mit anderen Datenbanken verbinden (z. B. nicht „“:““ als Server:Dateiname verwenden). Gleiches gilt für New NotesDatabase, GetDatabase, .Open, .OpenWithFailover, .OpenIfModified, .OpenByReplicaID, [FileOpenDatabase], [Compose] usw.
  • Unabhängig von Code und Migration: Geben Sie einer Ihrer übrig gebliebenen Datenbanken ein wenig Liebe, machen Sie sie schöner und moderner.

Schauen wir uns abschließend an, WIE Sie Ihren Code am besten durchsuchen können

Das Folgende ist wirklich, wirklich gruseliges Zeug. Wenn Sie kein Entwickler sind, können Sie diesen Abschnitt überspringen!

Zum Teil haben wir bereits erklärt, warum die Suche nach Code mit nur (Teil-)Strings nicht allzu weit führt. Es stimmt in zu vielen Fällen zu viel oder zu wenig überein. Wir haben auch untersucht, warum das Entfernen aller Kommentare erforderlich ist, bevor Sie Ihren Code durchsuchen.

Außerdem ist Folgendes sehr, sehr, sehr wichtig bei der Suche nach Code:
Suchen Sie NICHT nach Code und denken Sie daran, wie Sie ihn entwickelt hätten. Denken Sie breiter und Sie werden überrascht sein zu erfahren, wie andere Leute programmieren.

Was sind also bessere Ansätze für die Suche nach Code als nur Übereinstimmungen mit Teilzeichenfolgen?

Ein Volltext-Index, der Wildcards wie „*“ (Sternchen) unterstützt, bringt Sie etwas weiter im Spiel. ZB bei der Suche nach „@dbcolumn* OR @dblookup*“ – aber es fehlt die Unterstützung für eine präzise Negation. Das genaue Negieren von Codeteilen ist wichtig, um zB nur @DbLookups zu finden, die nicht auf dieselbe Datenbank verweisen.

Das folgende @DbLookup sucht Daten aus derselben Datenbank, in der der Code ausgeführt wird. Dies geschieht über das „“:““ als zweiten Parameter:

Das nächste @DbLookup sucht Daten aus dem „lokalen“ Adressbuch (Client oder Server, je nachdem wo es läuft):

Die Suche nach einem @DbLookup, das Daten von „names.nsf“ nachschlägt, ist ziemlich einfach. Auch mit nur Wildcards: @dblookup(:“namen.nsf“). Das ist, bis Sie auf Code wie diesen stoßen:

Jetzt müssen wir plötzlich über mehrere Zeilen hinweg nach Code suchen – ja, wir haben so einen Code gesehen.

Noch schlimmer wird es, wenn Variablen, geschweige denn @Funktionen, als Parameter ins Spiel kommen:

Der obige Code sucht nach Daten aus derselben Datenbank. Die Variable ht_filename ist das Ergebnis von @Subset(@DbName;-1). Daraus ergibt sich wiederum der Dateiname der Datenbank, in der der Code ausgeführt wird.

Ähnlich sucht das folgende Codebeispiel Daten aus dem lokalen Adressbuch:

Die beste Lösung für die Suche nach Code wäre, wenn man den Code parsen könnte. Dies würde es uns ermöglichen, den Wert von ht_filename in den obigen Beispielen aufzulösen. Dafür haben wir jedoch keine schlaue Lösung gefunden.

Für die Suche nach Code mit präziser Negation haben wir eine clevere Lösung gefunden:

Wir verwenden reguläre Ausdrücke.

Der folgende reguläre Ausdruck ist ein großer Schritt vorwärts. Es ermöglicht uns, nach jedem @DbLookup zu suchen, das keine Daten aus derselben Datenbank sucht, in der es ausgeführt wird:

@dblookup([^;];(?!””(:””)?).*
@dblookup(Die offene Klammer muss in regulären Ausdrücken mit Escapezeichen versehen werden, daher wird das \(
[^;]*;gefolgt von „alles außer einem Semikolon“ bis zum nächsten Semikolon.

Die Suche nach „.*;“ wäre falsch, da dieser Ausdruck gierig wäre. Es würde bis zum letzten Semikolon suchen.
(?!““(:““)?)Nächstes Negieren von „“, gefolgt von einem weiteren optionalen :““ – der zweite Parameter kann entweder „“ oder „“:““ sein
.*bis Zeilenende

Dieses Beispiel erfordert noch etwas Feinabstimmung, um

  • auch so ziemlich überall jede Menge Leerzeichen unterstützen,
  • und für Situationen sorgen, in denen @dbname oder @subset(@dbname;1):@subset(@dbname;-1) dieselbe Datenbank verwenden
  • und finde nur die @DbLookups, für die die Klasse „“ oder „Notes“ ist (Groß-/Kleinschreibung nicht beachten)

Als Bonuspunkte können Sie auch @dblookups finden, die in LotusScript Evaluates verwendet werden. Oftmals müssen dann auch Anführungszeichen mit Escapezeichen versehen werden.

Der reguläre Ausdruck, der alle oben genannten Anforderungen (außer Code-Parsing) erfüllt, ist … möglicherweise das Hässlichste, was Sie heute zu sehen bekommen: 

Ich könnte stundenlang weitermachen

Wenn du es durch die wirklich gruseligen Sachen oben geschafft hast: mein Hut ist vor dir! Sie sind ein Superhelden-Entwickler und Überlebender regulärer Ausdrücke.

Die gute Nachricht für alle Leser lautet: Wir bei panagenda haben schon einiges an Schwerstarbeit geleistet. Und wir lieben es zu teilen.

Wenn Sie einen Blick auf unsere werfen iDNA Applications Sandkasten, Finden Sie mehr als 70 vorgefertigte reguläre Ausdrücke. Diese suchen nach über 300 verschiedenen Code-Ergebnissen. Sie können alle diese Muster KOSTENLOS in Ihrer eigenen Codesuchlösung verwenden.

Und falls Sie eine klügere Idee haben, als reguläre Ausdrücke zu verwenden oder neue oder verbesserte reguläre Ausdrücke zu entwickeln: Bitte lassen Sie es uns wissen und wir teilen es mit den community.

Falls Sie keine Zeit haben, Ihre eigenen zu bauen Code Suchlösung:

Es gibt eine Reihe von Lösungen von Drittanbietern, die helfen können. Einige davon sind auf OpenNTF verfügbar. Einige davon sind kommerzielle Lösungen wie unsere eigene panagenda iDNA Applications.

Der Summe ist

Die richtige Analyse Ihrer Anwendungen dient drei Hauptzielen:

  • Spart (viel) Zeit, Frust und Geld
  • Auf die richtigen Dinge fokussieren und Bescheid wissen
  • Ermöglichen Sie die erfolgreiche Transformation Ihrer Domino-Landschaft

Optimierung, Modernisierung oder Migration

  • Was auch immer Sie tun, vergessen Sie nicht, mindestens einer Ihrer Domino-Anwendungen etwas Liebe zu schenken. Es wird dich zurückzahlen. Viele ti

Weiter in unserer Serie

Fortschrittsbericht. Sie sind ein Teil jedes Projekts und es macht keinen Spaß, sie zu produzieren. Sie müssen nicht nur Ihre Fortschritte teilen. Außerdem müssen Sie die Projektteams mit den Daten versorgen, die sie für ihre Arbeit benötigen. Es ist schwer zu koordinieren und es endet nie. Aber Fortschrittsberichte können Ihr Freund sein, wenn Sie Erfolge melden!

Migrations- und Modernisierungsprojekte sind enorm teuer und sehr öffentlichkeitswirksam. Von Anfang an werden viele Augen auf Sie gerichtet sein. Die Erwartungen werden hoch sein. Wie können Sie verhindern, dass Ihr Projekt scheitert? Manchmal kann man es nicht. Manche Projekte sind zum Scheitern verurteilt, bevor sie überhaupt beginnen. Sie sollten es wissen, bevor Sie gehen.

Von nun an wird sich der Kreis der Anwendungen, an denen wir arbeiten, kontinuierlich erweitern. Jeder Schritt wird kostenintensiver und eine umsichtige Planung bringt immer größere Vorteile.

Über diese Serie:

Viele Unternehmen auf der ganzen Welt haben sich dazu verpflichtet HCL Notes/Domino* jahrelang. Sie kennen die vielen Vorteile, die sich aus dieser Beziehung ergeben. Außerdem steht Notes/Domino im Mittelpunkt ihrer Prozesse und ihrer Funktionsweise. Trotz alledem beginnen IT-Entscheidungsträger auf der ganzen Welt, sich eine Zukunft vorzustellen, in der Notes/Domino möglicherweise eine geringere oder gar keine Rolle spielt.

*ehemals IBM Notes/Domino