199 Lotus blogs updated hourly. Who will post next? Home | Blogs | Search | About 
 
Latest 7 Posts
Chile ändert mit Wirkung zum 15.05.2016 seine Zeitzone
Thu, May 26th 2016 3
Chile ändert mit Wirkung zum 15.05.2016 seine Zeitzone
Mon, May 2nd 2016 5
Cloud Extender zur Steuerung eines Notes Traveler Servers
Sat, Jan 16th 2016 8
Cloud Extender erfordert keinen lokalen Notes Client
Sat, Jan 16th 2016 3
Traveler Task start nicht
Sat, Jan 16th 2016 7
Kein debugging von LotusScript Agent möglich
Sun, Apr 26th 2015 0
Wie finde ich aktuelle Notes / Domino 9.0.1 FixPacks?
Sun, Apr 26th 2015 6
Top 10
Verwendung der iNotes Active-X Controls in restriktiven Arbeitsplatzumgebungen
Sun, Sep 28th 2014 12
mailto Links starten Internet Explorer statt Lotus Notes
Mon, Nov 25th 2013 8
Cloud Extender zur Steuerung eines Notes Traveler Servers
Sat, Jan 16th 2016 8
Traveler Task start nicht
Sat, Jan 16th 2016 7
RichText Felder eines im UI geöffneten Dokumentes im BackEnd modifizieren
Thu, Apr 26th 2012 6
Wie finde ich aktuelle Notes / Domino 9.0.1 FixPacks?
Sun, Apr 26th 2015 6
Wie kann ich programmatisch private Gestaltungselemente auf Aktualität prüfen?
Fri, Dec 28th 2012 5
Gut zu wissen : Lotus Traveler mit reverse Proxy !
Tue, Nov 22nd 2011 5
Aktivierung von NSL kann fehlschlagen
Fri, Jul 22nd 2011 5
Notes Single Login und Windows 7 64bit funktioniert wieder !
Wed, Mar 30th 2011 5


Wie kann ich programmatisch private Gestaltungselemente auf Aktualität prüfen?
Twitter Google+ Facebook LinkedIn Addthis Email Gmail Flipboard Reddit Tumblr WhatsApp StumbleUpon Yammer Evernote Delicious
Manfred Meise    

Wir setzen eine Anwendung mit privaten Ansichten und Ordnern ein, die regelmäßig weiterentwickelt wird und produktive Datenbanken durch Schalonenaktualisierung anpasst. Hierbei werden die privaten Kopien der Ansichten und Ordner nicht automatisch aktualisiert. Bei der Konzeption einer "selbstgestrikten" Aktualisierungslogik stößt man schnell auf die Frage: "Wie kann ich erkennen, ob die private Kopie des Gestaltungselementes aktuell ist?"

Vergleich von Zeitstempeln


a) Einsatz von NotesView

Die Idee:
Man öffnet die Ansicht und hat Zeitstempel (Erstelldatum; letzte Änderung) des jeweiligen gemeinsamen Gestaltungselementes und der privaten Kopie.. Klingt gut, ist es aber nicht!

So erhält man mit
 
Dim view as NotesView
set view = db.getView ("Meine Ansicht")


jeweils die gemeinsame Ansichtsvorlage, wenn die private Kopie nicht existiert, jedoch die private Kopie des Ansicht, wenn diese exisiert. Somit kann man im Regelfall (wenn die private Kopie NICHT existiert) nicht auf die gemeinsame Vorlage zu Vergleichszwecken zugreifen.

Ergebnis:
Nicht praktikabel !

b) Einsatz von NotesDatabase.Views

Die Idee:
Man arbeitet alle Ansichten (gemeinsame Vorlagen und private Kopien) einer Datenbank ab und muss die jeweiligen Exemplare (Vorlage  / Kopie) einander zuordnen, um sie zu vergleichen.. Das muß doch gehen!

So durchsucht folgendes Skript die Datenbank nach Ordnern mit dem AliasNamen "F2-DE" und listet jeweils die Universal-ID der Gestaltungselemente auf:
 
Sub
Initialize

Dim
s                         As New NotesSession
Dim
db                         As NotesDatabase
Dim
view                 As NotesView
Dim
vViewNames        As Variant

Set
db = s.Currentdatabase

ForAll
v In db.Views
      Set view = v
      vViewNames = view.Aliases
      If Not IsEmpty (vViewNames) then
              If vViewNames(0) = "F2-DE" Then    
                      If Not IsEmpty (view.Readers) Then
                              MessageBox |Private Kopie des Ordners "F2" gefunden: | & view.Universalid
                      Else
                              MessageBox |Gemeinsame Vorlage des Ordner "F2" gefunden: | & view.Universalid
                      End If
              End If
      End If
End
ForAll
End
Sub


Interessant und noch nicht vollständig erforscht: Dieses Skript findet sogar private Kopien von Ordnern (in Datenbank gespeichert), welche der Domino Designer nicht anzeigt! Nach anfänglicher Begeisterung über diesen Lösungsansatz, habe ich dieses Skript gegen eine große produktive Datenbank laufen lassen und musste feststellen, dass jeweils beim Zugriff auf ein Ansichtsobjekt die Ansichtsindizes aktualisiert werden, um nur auf unwesentliche Merkmale der Ansicht zuzugreifen. Ein echter Performance-Killer, wollte ich diese Logik in einem Datenbank-Script beim Öffnen der Datenbank einsetzen. In meinen Testfällen habe ich teilweise 15 Sekunden warten müssen, bevor ich mein Ergebnis hatte.

Hinweis:
Es ist darauf zu achten, NICHT auf die gemeinsame Vorlage der Ansicht/des Ordners zuzugreifen, da dieses einen Laufzeitfehler 4005 "Index is not to be generated on server" verursacht. Somit ist stets z.B. mit isEmpty(view.Readers) zu prüfen, dass auf eine private Kopie zugegriffen wird (die Prüfung anderer Attribute ist nicht möglich).

Ergebnis:
Zu langsam für den Produktionsbetrieb!

b) Einsatz von NotesNoteCollection>

Die Idee:
Man kann doch die Gestaltungselemente sammeln und auf diese als NotesDocument zugreifen!. So erhalte ich Informationen zum Gestaltungselement, ohne den Indexer zu triggern!

Schon häufig habe ich mit der NotesNoteCollection Klasse auf Gestaltungslemente (Ansichten, Felder, Agenten, Teilmasken) zugegriffen und hierfür u.A. auch eine Selektionsformel einsetzen können, nach Elementen mit speziellen Attributen zu suchen. So würde ich mit den Werten des "$Flags" Items auf bestimmte Ansichts-/Ordner-Typen zugreifen und mit Auswertung des "$Readers" Felders den Eigentümer einer privaten Kopie identifizieren können.

siehe dieses Codebeispiel ...

Beim Einsatz dieses Skriptes gegen eine große produktive Datenbank ist dieses schneller als das zuvor, jedoch immer noch zu langsam, da eine Datenbanksuche angestoßen wird.. Ein echter Performance-Killer, wollte ich diese Logik in einem Datenbank-Script beim Öffnen der Datenbank einsetzen.

Ergebnis:
Besser, doch noch zu langsam für den Produktionsbetrieb! Vorteil: Ich kann die Namen der Ansichten/Ordner ermitteln, die ich behandeln möchte.


Einsatz eines Namensschemas


Nach intensiven Tests habe ich alle oben beschriebenen Lösungsansätze verworfen und mich für die Variante entschieden (welche in diesem Beitrag nicht näher beschrieben ist):
  • Ich führe ein Namensschema (speziell für Ansichten, die lokal statt in der Datenbank gespeichert werden) ein und ändere die Namen der Gestaltungselemente, wenn ich diese aktualisiere
  • Ich akzeptiere, durch Einführung eines Versionskennzeichens für die gesamte Anwendung, dass ich ggf. Elementen aktualisiere, deren Gestaltung sich zur Vorversion nicht geändert haben

Ergebnis:
Sehr performant, da keinerlei Prüfungen

Dieser Artikel ist Teil der Artikelserie
:  Gestaltungsaktualisierung privater Ansichten und Ordner stellt eine echte Herausforderung dar

---------------------
http://www.mmi-consult.de/FAQ/dx/wie-kann-ich-programmatisch-private-gestaltungselemente-auf-aktualität-prüfen.htm
Dec 28, 2012
6 hits



Recent Blog Posts
2
Erneute Registrierung eines gelöschten Benutzers schlägt fehl
Fri, Apr 24th 2015 12:36p   Manfred Meise
Gelegentlich kommt es vor, dass Benutzer registiert werden (z.B. Schreibfehler im Namen). Bis der Account noch nicht Betrieb ist (Notes Client konfiguriert ist), stelle ich mir als Administrator stets die Farge, wei ich den Fehler am einfachsten (schnellsten) beseitigen kann und somit kurzfristig der richtigen Account zur Verfügung stellen kann. Hier bieten sich aus meiner Sicht grundsätzlich zwei Vorgehensweisen an: 1. Arbeitsplatz in Betrieb nehmen und dann kurzfristig die Umbenennun
1
Funktionale GegenĂĽberstellung von Client-Funktion (IBM Notes, IBM iNotes & IBM SmartCloud Notes web)
Tue, May 6th 2014 6:18a   Manfred Meise
Zur Beurteilung der verfĂĽgbaren Funktionen unterschiedlich Notes-Clients in den aktuellen Versionen hat IBM eine ĂĽbersichtlicher GegenĂĽberstellung publiziert: http://www-01.ibm.com/support/docview.wss?uid=swg27040248
1
Domino Designer kompiliert nicht vollständig
Mon, Jan 20th 2014 9:16a   Manfred Meise
Mit DDE (Domino Designer for Eclipse) kann man LotusScript Code (z.B. in Bibliotheken) auch fehlerhaft abspeichern und später korrigieren. Dieses kann einen Entwickler durchaus im Arbeitsfluss unterstĂĽtzen, wenn klar ist, dass noch Codeänderungen anderer Stelle in diesem Zusammengang erforderlich sind. Nun hatte ich erwartet, dass eine anschlieĂźende vollständige (erfolgreiche) Kompilation der Anwendung entweder mich auf verbliebene Fehler hinweist oder die Anwendung anschlieĂ
0
Destruktor der Basisklasse einer abgeleiteten Klasse wird nicht ausgefĂĽhrt
Thu, Jun 6th 2013 4:35p   Manfred Meise
Bei objektorientierter Entwicklung unter Verwendung von abgeleiteten Klassen kann man sich auch manchmal selbst im Weg stehen. So geschehen, wenn man einige (sonst sehr probate) Entwurfsprinzipien fĂĽr LotusScript-Klassen Verwendung von abgeleiteten Klassen Umfangreiche Fehlerbehandlung in allen Methoden Verwendung von Codeschablonen im Domino Designer fĂĽr Eclipse (DDE) So musste ich jĂĽngst die Ursache finden, warum bei abgeleiteten Klassen der Destruktur (Sub Delete) der Basisklass
1
Visitenkarteninformationen fĂĽr Sametime konfigurieren
Wed, Apr 3rd 2013 9:06a   Manfred Meise
Lotus Sametime bietet die Möglichkeit, im Kontakte-Fenster zusätzliche Informationen zu den Benutzern (aus deren Personendokumenten im Domino Directory) einzublenden. Hierzu können neben Telefonnummer oder Titel auch ein Bild zählen. Um z.B. Bilder der Benutzer darzustellen (ja ich weiß, ich sollte einmal ein aktuelleres Bild organisieren....) empfiehlt sich die Aufnahme eines weiteren Feldes in Personendokumenten (z.B. durch Verwendung einer geschützten Teilmaske "
0
Lotus Notes Clients stĂĽrzt beim Replizieren ab
Mon, Mar 18th 2013 9:12a   Manfred Meise
Es gibt Tage (wie diesen) an dem ich meinen Lotus Notes Client hasse. Habe ich doch soeben ein Dokument in einer lokalen Datenbank bearbeitet und gespeichert. Danach wollte ich Datenbank mit meinem Server replizieren..... Crash ! Mein Lotus Notes Client stürzt ab. Dieses Verhalten lässt sich sogar reproduzieren: beim Replizieren einer beliebigen Datenbank stürzt mein Client reproduzierbar ab. Leider sind die erstellten Crash-Dumps (obwohl vorsorglich aktiviert) vollkommen nutzlos (Datei
0
Fehlerhafte Sortierung von LotusScript Code in Domino Designer fĂĽr Eclipse
Sun, Mar 10th 2013 8:04a   Manfred Meise
Seit Domino Designer 8.5.1 bietet der Domino Designer den LotusScript Editor auch als Eclipse Plugin. FĂĽr Entwickler, welche objektorientiert programmieren und eigene Klassenkonstrukte bauen ein Segen (un Fluch zugleich). So ist bei der Erstellung abgeleiteter Klassen die Reihenfolge zu beachten: Erstellt man den Source fĂĽr mehrere Klassen, so werden diese im Navigationsfenster stets alphabetisch dargestellt (hilfreich). Im echten Sourcecode wird jedoch der zuletzt eingegebene Code ste
1
Lotus Client lässt sich nicht im Offline Betrieb starten
Mon, Feb 25th 2013 1:27p   Manfred Meise
Moderne und flexible Lotus Notes Installationen sind MultiUser Installationen mit Roaming User Konfiguration (sowie ID-Vault-Nutzung). Hierdurch kann man sogar Geräte wechseln, und seine Daten mit sich nehmen. Doch auch hier kann etwas schief gehen: So hatte ich heute ein Kundenproblem zu lösen, wobei der Benutzer mit seinem neuen Windows 7 Notebook (mit Lotus Notes 8.5.3 FP3) problemlos im LAN arbeiten konnte. Doch wenn er die Netzwerkverbinung gelöst hat (weil er das Notebook unter
1
Wie kann ich programmatisch private Gestaltungselemente auf Aktualität prüfen?
Fri, Dec 28th 2012 8:13a   Manfred Meise
Wir setzen eine Anwendung mit privaten Ansichten und Ordnern ein, die regelmäßig weiterentwickelt wird und produktive Datenbanken durch Schalonenaktualisierung anpasst. Hierbei werden die privaten Kopien der Ansichten und Ordner nicht automatisch aktualisiert. Bei der Konzeption einer "selbstgestrikten" Aktualisierungslogik stößt man schnell auf die Frage: "Wie kann ich erkennen, ob die private Kopie des Gestaltungselementes aktuell ist?" Vergleich von Zeitstempeln a) Ein
0
Die Lizenzdatei fĂĽr den Installshield Tuner fehlt
Tue, Jul 17th 2012 7:34a   Manfred Meise
Zur Erstellung eines angepassten Lotus Notes 8.5.3 Installlationspaketes ist eine Lizenzdatei "*.itw" erforderlich, um den Install Shield Tuner verwenden zu können. Leider ist diese nicht auf der Installlations-CD der IBM vorhanden, sondern nur als separater Download von der IBM Support-Site: Download LotusNotes853.itw for Windows 8.5.3 Notes Standard client from IBM oder hier angehängt LotusNotes853.itw




Created and Maintained by Yancy Lent - About - Planet Lotus Blog - Advertising - Mobile Edition