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.
Posts Tagged: ‘Ansichten’
Gestaltungsaktualisierung privater Ansichten und Ordner stellt eine echte Herausforderung dar
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.
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
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.
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
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.
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?
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
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
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
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:
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
Ergebnis: Zu langsam fĂĽr den Produktionsbetrieb!
b) Einsatz von
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
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):
Ergebnis: Sehr performant, da keinerlei PrĂĽfungen
Dieser Artikel ist Teil der Artikelserie: Gestaltungsaktualisierung privater Ansichten und Ordner stellt eine echte Herausforderung dar
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?
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
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
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
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:
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
Ergebnis: Zu langsam für den Produktionsbetrieb!
b) Einsatz von
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
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):
Ergebnis: Sehr performant, da keinerlei Prüfungen
Dieser Artikel ist Teil der Artikelserie: Gestaltungsaktualisierung privater Ansichten und Ordner stellt eine echte Herausforderung dar
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?
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
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
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
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:
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
Ergebnis: Zu langsam für den Produktionsbetrieb!
b) Einsatz von
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
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):
Ergebnis: Sehr performant, da keinerlei Prüfungen
Dieser Artikel ist Teil der Artikelserie: Gestaltungsaktualisierung privater Ansichten und Ordner stellt eine echte Herausforderung dar
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?
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
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
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
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:
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
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
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):
Ergebnis: Sehr performant, da keinerlei Prüfungen
Dieser Artikel ist Teil der Artikelserie: Gestaltungsaktualisierung privater Ansichten und Ordner stellt eine echte Herausforderung dar
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?
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
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
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
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:
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
Ergebnis: Zu langsam fĂĽr den Produktionsbetrieb!
b) Einsatz von
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
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):
Ergebnis: Sehr performant, da keinerlei PrĂĽfungen
Dieser Artikel ist Teil der Artikelserie: Gestaltungsaktualisierung privater Ansichten und Ordner stellt eine echte Herausforderung dar
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?
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
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
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
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:
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
Ergebnis: Zu langsam für den Produktionsbetrieb!
b) Einsatz von
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
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):
Ergebnis: Sehr performant, da keinerlei Prüfungen
Dieser Artikel ist Teil der Artikelserie: Gestaltungsaktualisierung privater Ansichten und Ordner stellt eine echte Herausforderung dar
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?
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.

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
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.
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?
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.

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
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.
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?
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.

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
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.
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?
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.

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
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.
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?
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:
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
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
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