Posts Tagged: ‘Ansichten’

Gestaltungsaktualisierung privater Ansichten und Ordner stellt eine echte Herausforderung dar

9. Januar 2013 Posted by Manfred Meise

Als Domino Entwickler weiß man um die Vor- und Nachteile von z.B. von Ansichten und Ordnern "Gemeinsam, privat bei Erstbenutzung" und setzt diese nur sehr selektiv ein. Trotzdem habe ich mich bei einer unserer zentralen Domino Anwendungen entschieden, hiervon Gebrauch zu machen. Da die Anwendung ständig Funktionserweiterungen erfährt, kommt es immer wieder vor, dass auch die Ansichten und Ordner überarbeitet oder erweitert werden müssen. Somit stellt sich bei unseren Kunden, welche diese Anwendung einsetzen die Frage, wie die neue Gestaltung einer Folgeversion in die bereits vorhandenen Installationen kommt, nachdem wir eine neue Schablonenversion der Anwendung bereit stellen!

Hierzu haben wir im Verlauf der Zeit zahlreiche (vorwiegend negative) Erfahrungen sammeln dürfen, welche ich in der nachfolgenden Artikelreihe zusammengetragen habe.

Warum setzen Entwickler private Gestaltungselemente ein?
Leistungsmerkmale privater Ansichten und Ordner sind gelegentlich fachlich gefordert.


Alternativen zum Einsatz privater Gestaltungselemente
Zur Vermeidung der Nachteile privater Gestaltungselemente (u.A. mangelnde Aktualisierungsfähigkeit) bieten sich durchaus Alternativen an.


Speicherort der privaten Gestaltungselemente
Zunächst muss man sich klar werden, wo die Informationen der persönlichen Gestaltungselemente gespeichert werden: In der Datenbank oder im persönlichen Desktop. Man könnte denken "Egal" - doch weit gefehlt! Nicht nur das Roaming sondern auch das Client-Verhalten ist zu beobachten.


Erkennung/unterscheidung von neuen Versionen
Um die Gestaltung neuer Versionen der gemeinsamen Vorlage für Ansichten und Ordner von bereits vorhandenen privaten Kopien unterscheiden zu können, eignen sich leider nicht die üblichen Verfahren (neue Versionen mit neuem Zeitstempel).


Aktualisierung der Gestaltung
Anwendungslogik, welche im Kontext des Benutzers abläuft, entscheidet über die Notwendigkeit und führt die Aktualisierung der privaten Gestaltungselemente durch.


... um das Ergebnis vorwegzunehmen: Zahlreiche leidvolle Erfahrungen mit Happy End.

Gestaltungsaktualisierung privater Ansichten und Ordner stellt eine echte Herausforderung dar

9. Januar 2013 Posted by Manfred Meise

Als Domino Entwickler weiß man um die Vor- und Nachteile von z.B. von Ansichten und Ordnern "Gemeinsam, privat bei Erstbenutzung" und setzt diese nur sehr selektiv ein. Trotzdem habe ich mich bei einer unserer zentralen Domino Anwendungen entschieden, hiervon Gebrauch zu machen. Da die Anwendung ständig Funktionserweiterungen erfährt, kommt es immer wieder vor, dass auch die Ansichten und Ordner überarbeitet oder erweitert werden müssen. Somit stellt sich bei unseren Kunden, welche diese Anwendung einsetzen die Frage, wie die neue Gestaltung einer Folgeversion in die bereits vorhandenen Installationen kommt, nachdem wir eine neue Schablonenversion der Anwendung bereit stellen!

Hierzu haben wir im Verlauf der Zeit zahlreiche (vorwiegend negative) Erfahrungen sammeln dürfen, welche ich in der nachfolgenden Artikelreihe zusammengetragen habe.

Warum setzen Entwickler private Gestaltungselemente ein?
Leistungsmerkmale privater Ansichten und Ordner sind gelegentlich fachlich gefordert.


Alternativen zum Einsatz privater Gestaltungselemente
Zur Vermeidung der Nachteile privater Gestaltungselemente (u.A. mangelnde Aktualisierungsfähigkeit) bieten sich durchaus Alternativen an.


Speicherort der privaten Gestaltungselemente
Zunächst muss man sich klar werden, wo die Informationen der persönlichen Gestaltungselemente gespeichert werden: In der Datenbank oder im persönlichen Desktop. Man könnte denken "Egal" - doch weit gefehlt! Nicht nur das Roaming sondern auch das Client-Verhalten ist zu beobachten.


Erkennung/unterscheidung von neuen Versionen
Um die Gestaltung neuer Versionen der gemeinsamen Vorlage für Ansichten und Ordner von bereits vorhandenen privaten Kopien unterscheiden zu können, eignen sich leider nicht die üblichen Verfahren (neue Versionen mit neuem Zeitstempel).


Aktualisierung der Gestaltung
Anwendungslogik, welche im Kontext des Benutzers abläuft, entscheidet über die Notwendigkeit und führt die Aktualisierung der privaten Gestaltungselemente durch.


... um das Ergebnis vorwegzunehmen: Zahlreiche leidvolle Erfahrungen mit Happy End.

Gestaltungsaktualisierung privater Ansichten und Ordner stellt eine echte Herausforderung dar

9. Januar 2013 Posted by Manfred Meise

Als Domino Entwickler weiß man um die Vor- und Nachteile von z.B. von Ansichten und Ordnern "Gemeinsam, privat bei Erstbenutzung" und setzt diese nur sehr selektiv ein. Trotzdem habe ich mich bei einer unserer zentralen Domino Anwendungen entschieden, hiervon Gebrauch zu machen. Da die Anwendung ständig Funktionserweiterungen erfährt, kommt es immer wieder vor, dass auch die Ansichten und Ordner überarbeitet oder erweitert werden müssen. Somit stellt sich bei unseren Kunden, welche diese Anwendung einsetzen die Frage, wie die neue Gestaltung einer Folgeversion in die bereits vorhandenen Installationen kommt, nachdem wir eine neue Schablonenversion der Anwendung bereit stellen!

Hierzu haben wir im Verlauf der Zeit zahlreiche (vorwiegend negative) Erfahrungen sammeln dürfen, welche ich in der nachfolgenden Artikelreihe zusammengetragen habe.

Warum setzen Entwickler private Gestaltungselemente ein?
Leistungsmerkmale privater Ansichten und Ordner sind gelegentlich fachlich gefordert.


Alternativen zum Einsatz privater Gestaltungselemente
Zur Vermeidung der Nachteile privater Gestaltungselemente (u.A. mangelnde Aktualisierungsfähigkeit) bieten sich durchaus Alternativen an.


Speicherort der privaten Gestaltungselemente
Zunächst muss man sich klar werden, wo die Informationen der persönlichen Gestaltungselemente gespeichert werden: In der Datenbank oder im persönlichen Desktop. Man könnte denken "Egal" - doch weit gefehlt! Nicht nur das Roaming sondern auch das Client-Verhalten ist zu beobachten.


Erkennung/unterscheidung von neuen Versionen
Um die Gestaltung neuer Versionen der gemeinsamen Vorlage für Ansichten und Ordner von bereits vorhandenen privaten Kopien unterscheiden zu können, eignen sich leider nicht die üblichen Verfahren (neue Versionen mit neuem Zeitstempel).


Aktualisierung der Gestaltung
Anwendungslogik, welche im Kontext des Benutzers abläuft, entscheidet über die Notwendigkeit und führt die Aktualisierung der privaten Gestaltungselemente durch.


... um das Ergebnis vorwegzunehmen: Zahlreiche leidvolle Erfahrungen mit Happy End.

Gestaltungsaktualisierung privater Ansichten und Ordner stellt eine echte Herausforderung dar

9. Januar 2013 Posted by Manfred Meise

Als Domino Entwickler weiß man um die Vor- und Nachteile von z.B. von Ansichten und Ordnern "Gemeinsam, privat bei Erstbenutzung" und setzt diese nur sehr selektiv ein. Trotzdem habe ich mich bei einer unserer zentralen Domino Anwendungen entschieden, hiervon Gebrauch zu machen. Da die Anwendung ständig Funktionserweiterungen erfährt, kommt es immer wieder vor, dass auch die Ansichten und Ordner überarbeitet oder erweitert werden müssen. Somit stellt sich bei unseren Kunden, welche diese Anwendung einsetzen die Frage, wie die neue Gestaltung einer Folgeversion in die bereits vorhandenen Installationen kommt, nachdem wir eine neue Schablonenversion der Anwendung bereit stellen!

Hierzu haben wir im Verlauf der Zeit zahlreiche (vorwiegend negative) Erfahrungen sammeln dĂĽrfen, welche ich in der nachfolgenden Artikelreihe zusammengetragen habe.

Warum setzen Entwickler private Gestaltungselemente ein?
Leistungsmerkmale privater Ansichten und Ordner sind gelegentlich fachlich gefordert.


Alternativen zum Einsatz privater Gestaltungselemente
Zur Vermeidung der Nachteile privater Gestaltungselemente (u.A. mangelnde Aktualisierungsfähigkeit) bieten sich durchaus Alternativen an.


Speicherort der privaten Gestaltungselemente
Zunächst muss man sich klar werden, wo die Informationen der persönlichen Gestaltungselemente gespeichert werden: In der Datenbank oder im persönlichen Desktop. Man könnte denken "Egal" - doch weit gefehlt! Nicht nur das Roaming sondern auch das Client-Verhalten ist zu beobachten.


Erkennung/unterscheidung von neuen Versionen
Um die Gestaltung neuer Versionen der gemeinsamen Vorlage für Ansichten und Ordner von bereits vorhandenen privaten Kopien unterscheiden zu können, eignen sich leider nicht die üblichen Verfahren (neue Versionen mit neuem Zeitstempel).


Aktualisierung der Gestaltung
Anwendungslogik, welche im Kontext des Benutzers abläuft, entscheidet über die Notwendigkeit und führt die Aktualisierung der privaten Gestaltungselemente durch.


... um das Ergebnis vorwegzunehmen: Zahlreiche leidvolle Erfahrungen mit Happy End.

Wie kann ich programmatisch private Gestaltungselemente auf Aktualität prüfen?

28. Dezember 2012 Posted by 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

Wie kann ich programmatisch private Gestaltungselemente auf Aktualität prüfen?

28. Dezember 2012 Posted by 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

Wie kann ich programmatisch private Gestaltungselemente auf Aktualität prüfen?

28. Dezember 2012 Posted by 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

Wie kann ich programmatisch private Gestaltungselemente auf Aktualität prüfen?

28. Dezember 2012 Posted by 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 prakttikabel !

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.

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

Wie kann ich programmatisch private Gestaltungselemente auf Aktualität prüfen?

28. Dezember 2012 Posted by 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

Wie kann ich programmatisch private Gestaltungselemente auf Aktualität prüfen?

28. Dezember 2012 Posted by 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

Wie kann ich den Einsatz von privaten Gestaltungselementen umgehen?

6. November 2012 Posted by Manfred Meise

Private Ansichten und Ordner haben zahlreiche Vorteile doch auch Nachteile.
Will man die Nachteile vermeiden/umgehen, so stellt sich die Frage nach Alternativen. Hierzu bieten sich (evtentuell) an:                  

Ersatz von Ordnern


Um bestimmte Dokumente zu "kennzeichnen" und zu sammeln bieten sich kaum gleichwertige Alternativen an. Wollen Entwickler eine Ansicht bauen, in der lediglich einige von entsprechenden Benutzern "gekennzeichnete" Dokumente finden, so bleibt nur der Einsatz eines Feldinhaltes in den Dokumenten (interaktiv durch Bearbeitung des Dokumentes oder einen Agenten gesetzt) und Auswahl der Dokumente in einer privaten Ansicht. Hierdurch würde nicht nur ein mühsames Handling, sondern besonders das hohe Risiko für Replizier/Speicherkonflike entstehen.

Ersatz von privaten Ansichten


Als Ersatz privater Ansichten hingegen können Seiten/Masken erstellt werden, die eingebettete (gemeinsame) Ansichten enthalten, die z.B. mit Benutzernamen in der ersten Spalte kategorisiert sind. So können die entsprechenden Dokumente des Benutzers übersichtlich in einer Ansicht mit dem Merkmal "Einzelne Kategorie" anzeigen selektiert und dargestellt werden.

Image:Wie kann ich den Einsatz von privaten Gestaltungselementen umgehen?

Leider hat auch diese Variante einen Nachteil. So wird die eingebettete Ansicht nicht automatisch aktualisiert, wenn Dokumente gelöscht werden. Dieses Verhalten kann zu mangelnder Benutzerakzeptanz führen.

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

Wie kann ich den Einsatz von privaten Gestaltungselementen umgehen?

6. November 2012 Posted by Manfred Meise

Private Ansichten und Ordner haben zahlreiche Vorteile doch auch Nachteile.
Will man die Nachteile vermeiden/umgehen, so stellt sich die Frage nach Alternativen. Hierzu bieten sich (evtentuell) an:                  

Ersatz von Ordnern


Um bestimmte Dokumente zu "kennzeichnen" und zu sammeln bieten sich kaum gleichwertige Alternativen an. Wollen Entwickler eine Ansicht bauen, in der lediglich einige von entsprechenden Benutzern "gekennzeichnete" Dokumente finden, so bleibt nur der Einsatz eines Feldinhaltes in den Dokumenten (interaktiv durch Bearbeitung des Dokumentes oder einen Agenten gesetzt) und Auswahl der Dokumente in einer privaten Ansicht. Hierdurch würde nicht nur ein mühsames Handling, sondern besonders das hohe Risiko für Replizier/Speicherkonflike entstehen.

Ersatz von privaten Ansichten


Als Ersatz privater Ansichten hingegen können Seiten/Masken erstellt werden, die eingebettete (gemeinsame) Ansichten enthalten, die z.B. mit Benutzernamen in der ersten Spalte kategorisiert sind. So können die entsprechenden Dokumente des Benutzers übersichtlich in einer Ansicht mit dem Merkmal "Einzelne Kategorie" anzeigen selektiert und dargestellt werden.

Image:Wie kann ich den Einsatz von privaten Gestaltungselementen umgehen?

Leider hat auch diese Variante einen Nachteil. So wird die eingebettete Ansicht nicht automatisch aktualisiert, wenn Dokumente gelöscht werden. Dieses Verhalten kann zu mangelnder Benutzerakzeptanz führen.

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

Wie kann ich den Einsatz von privaten Gestaltungselementen umgehen?

6. November 2012 Posted by Manfred Meise

Private Ansichten und Ordner haben zahlreiche Vorteile doch auch Nachteile.
Will man die Nachteile vermeiden/umgehen, so stellt sich die Frage nach Alternativen. Hierzu bieten sich (evtentuell) an:                  

Ersatz von Ordnern


Um bestimmte Dokumente zu "kennzeichnen" und zu sammeln bieten sich kaum gleichwertige Alternativen an. Wollen Entwickler eine Ansicht bauen, in der lediglich einige von entsprechenden Benutzern "gekennzeichnete" Dokumente finden, so bleibt nur der Einsatz eines Feldinhaltes in den Dokumenten (interaktiv durch Bearbeitung des Dokumentes oder einen Agenten gesetzt) und Auswahl der Dokumente in einer privaten Ansicht. Hierdurch würde nicht nur ein mühsames Handling, sondern besonders das hohe Risiko für Replizier/Speicherkonflike entstehen.

Ersatz von privaten Ansichten


Als Ersatz privater Ansichten hingegen können Seiten/Masken erstellt werden, die eingebettete (gemeinsame) Ansichten enthalten, die z.B. mit Benutzernamen in der ersten Spalte kategorisiert sind. So können die entsprechenden Dokumente des Benutzers übersichtlich in einer Ansicht mit dem Merkmal "Einzelne Kategorie" anzeigen selektiert und dargestellt werden.

Image:Wie kann ich den Einsatz von privaten Gestaltungselementen umgehen?

Leider hat auch diese Variante einen Nachteil. So wird die eingebettete Ansicht nicht automatisch aktualisiert, wenn Dokumente gelöscht werden. Dieses Verhalten kann zu mangelnder Benutzerakzeptanz führen.

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

Wie kann ich den Einsatz von privaten Gestaltungselementen umgehen?

6. November 2012 Posted by Manfred Meise

Private Ansichten und Ordner haben zahlreiche Vorteile doch auch Nachteile.
Will man die Nachteile vermeiden/umgehen, so stellt sich die Frage nach Alternativen. Hierzu bieten sich (evtentuell) an:                  

Ersatz von Ordnern


Um bestimmte Dokumente zu "kennzeichnen" und zu sammeln bieten sich kaum gleichwertige Alternativen an. Wollen Entwickler eine Ansicht bauen, in der lediglich einige von entsprechenden Benutzern "gekennzeichnete" Dokumente finden, so bleibt nur der Einsatz eines Feldinhaltes in den Dokumenten (interaktiv durch Bearbeitung des Dokumentes oder einen Agenten gesetzt) und Auswahl der Dokumente in einer privaten Ansicht. Hierdurch wĂĽrde nicht nur ein mĂĽhsames Handling, sondern besonders das hohe Risiko fĂĽr Replizier/Speicherkonflike entstehen.

Ersatz von privaten Ansichten


Als Ersatz privater Ansichten hingegen können Seiten/Masken erstellt werden, die eingebettete (gemeinsame) Ansichten enthalten, die z.B. mit Benutzernamen in der ersten Spalte kategorisiert sind. So können die entsprechenden Dokumente des Benutzers übersichtlich in einer Ansicht mit dem Merkmal "Einzelne Kategorie" anzeigen selektiert und dargestellt werden.

Image:Wie kann ich den Einsatz von privaten Gestaltungselementen umgehen?

Leider hat auch diese Variante einen Nachteil. So wird die eingebettete Ansicht nicht automatisch aktualisiert, wenn Dokumente gelöscht werden. Dieses Verhalten kann zu mangelnder Benutzerakzeptanz führen.

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

Warum sollte ich private Ansichten oder Ordner verwenden?

18. Oktober 2012 Posted by Manfred Meise

Lotus Notes bietet die Möglichkeit "Private" Gestaltungselemente für Ansichten und Ordner zu verwenden. Ursprünglich (in den ersten Tagen des Produktes) diente dieses erfahrenen Anwendern sich "schnell" eine Ansicht zu bauen, um spezielle Auswertungen gestalten zu können. Private Ordner erlauben die Ablage von Dokumenten, die dort nur von den entsprechenden Benutzer wieder gefunden werden.

Mittlerweile werden private Gestaltungen primär von Anwendungsentwicklern in der Variante "Gemeinsam, privat bei Erstbenutzung" eingesetzt, um schön und aufwändig gestaltete Ansichten/Ordner mit den Merkmalen von privaten Gestaltungen zu erstellen. Hierbei werden dann (pro Benutzer) jeweils Kopien der Gestaltungselemente (Ansicht oder Ordner) erstellt, in denen dann lediglich Dokumente des aktuellen Benutzers zu finden sind.

So gestalte ich gern einen Ordner "Wichtige Dokumente", in dem sich Benutzer jeweils Dokumente (per Drag/drop) ablegen können, die sie nach endlich nach langer Suche gefunden haben, regelmäßig suchen oder noch bearbeiten müssen.

Private Ansichten hingegen setze ich hingegen ein, wenn in der Ansicht lediglich Dokumente des/für den jeweiligen Benutzer erscheinen sollen (z.B. im Rahmen von Workflow-Anwendungen) um die jeweiligen zu bearbeitenden Dokumente erscheinen und nach Bearbeitung wieder verschwinden zu lassen (durch Selektionsformel in Bezug auf @UserName).

Leider haben diese privaten Gestaltungselemente einige Nachteile, die man sich im Rahmen der Konzeptentscheidung vor Augen führen muss:
  • Keine automatische Gestaltungsaktualisierung der privaten Kopien der Ansicht/Ordner, wenn sich die gemeinsame Vorlage im Rahmen von Weiterentwicklungen der Anwendung verändert
  • Speicherort der Gestaltungselemente ist abhängig vom Typ des Gestaltungselementes und der aktuellen Datenbankberechtigung eines Benutzers (somit weiß ich als Entwickler nicht unbedingt, wo die Gestaltungselemente in einer konkreten Installation gespeichert sind).
  • Ansichtsindizes können nicht von Server aktualisiert werden, sondern werden beim Öffnen durch den Benutzer aktualisiert (kann bei großen Datenbanken mrkmliche Wartezeit von Benutzer abverlagen)
  • Private Ansichten (im Desktop gespichert) können erst mit Client Versionen 8.5.2 und höher roamen (in gleicher Version an anderen Arbeitsplätzen zur Verfügung stehen (kann in Citrix Umgebungen störend sein)
  • Private Ansichten und Ordner sind im Wen nicht unterstütz

Besonders die fehlende Aktualisierung der Gestaltung der privaten Kopien nach Änderung der gemeinsamen Vorlage-Ansichten und -Ordner stellt im Produktionsbetrieb einen entscheidenden Nachteil dar, weil Benutzer so
  • verschiedene Versionen der Gestaltung nutzen können (und so den Helpdesk belasten, weil sie Funktionen vermissen, die Kollegen mit aktueller Gestaltung haben)
  • Benutzer oft vom Helpdesk aufgefordert werden, ihr Datenbanksymbol vom Arbeitsplatz zu entfernen und die Datenbank erneut zu öffnen (um alte Gestaltungselemente zu löschen und aktuelle zu erstellen). Leider gehen dabei Ordnerinhalte verloren, wenn deren Gestaltung im Desktop gespeichert ist.

Und totzdem kommt man an diesen Elementen nicht vorbei und muss sich damit auseinander setzen.

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