Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: botschi am 23.03.06 - 11:46:08
-
Moin zusammen,
ich würde gerne beim replizieren nur die Gestaltungelemente replizieren, die mit einer bestimmten ID signiert wurden.
Ich habe es mit den Replizierparametern versucht mit dieser Formel:
SELECT @Name([CN];$UpdatedBy) = "Bernd Hacker".
Das hat aber nicht funktioniert.
Kann man sowas irgendwie erreichen?
-
Hi
versuch es mal so:
SELECT @Name([CN];~$UpdatedBy) = "Bernd Hacker"
Gruss
André
-
André, für die Formelsprache ist das falsch (die Tilde wird in diesem Zusammenhang nur in LS so benutzt).
M.E. ist es aber nicht möglich, über Formeln Designelemente zur Replikation auszuwählen.
Bernhard
-
Uups, Sorry.
Hast Recht Bernhard.
André
-
Etwas Hardcore-Programmierung ;D
Wie bringt man eine Ansicht dazu, alle Design Elemente anzuzeigen.
Dazu erstellt man bspw. eine Ansicht namens "DesignElements" und macht dann einen Execute Once Agenten:
Dim session As NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim doc As NotesDocument
Set session = New NotesSession
Set db = session.CurrentDatabase
Set view = db.GetView("DesignElements")
If Not view Is Nothing Then
Set doc = db.GetDocumentByUNID(view.UniversalID)
Call doc.ReplaceItemValue("$FormulaClass", "1548")
doc.Save True, True
End If
Dann zeigt die View alle Design Elemente an. Welche genau, bestimmt dann "$FormulaClass".
Wenn Du dann als Zugriffsformel folgendes einträgst:
SELECT $UpdatedBy = "... der Username..."
werden nur Elemente angezeigt, die von dem User unterzeichnet wurde.
Cool, oder :D
siehe dazu
http://www.dominopower.com/issuesprint/issue199908/design.html
Andreas
-
So, das sollt aber klappen
SELECT @Name([CN];@GetDocField(@DocumentUniqueID;"$UpdatedBy")) = "Hugo Altbier"
Gruss
André
Ok, das mit der View habe ich jetzt nicht dazu geschrieben... :)
Andreas, was ist das für ein Wert, der in $FormulaClass eingetragen wird? Tomatenaufaugen oder so... :P
Okokok, hab die Änderung jetzt auch gesehen :)
-
OK, ich habs mit der Ansicht und dem Agenten hinbekommen, aber verstanden ab ich es noch nicht...
Ich habe folgendes gemacht:
1. Einen Agenten mit dem Code von Glombi erstellt
2. Eine Ansicht erstellt "DesignElements" mit der Ansichtsauswahl
SELECT @Name([CN];$UpdatedBy) = "Bernd Hacker" & $FormulaClass = "1548"
3. In den Replizierparametern eingestellt, dass nur aus der View "DesignElements" repliziert werden soll
Dann habe ich repliziert und es wurde tatsächlich nur 1 Gestaltungsdokument repliziert, alles richtig also.
Aber was macht der Agent? Wie läuft das technisch ungefähr ab? Kann das jemand anreissen?
-
Hi Botschi,
ich versuche mal es zu erklären:
Für Notes sind Dokumente und Designelemente praktisch das gleiche. Jedes Designelement (na ja fast jedes) kann bspw. mit LotusScript als NotesDocument im Backend angesprochen werden.
Da es den Anwender aber wohl irritieren würde wenn er die Designelemente in Ansichten sieht, erhalten Designelemente ein besonderes Flag, damit diese nicht in Ansichten erscheinen. Für Profildokumente, die ein Zwitter zwischen Dokument und Designelement sind, gilt das auch.
Ansichten zeigen nur "normale" Dokumente an - per Default. Das liegt an dem Flag "$FormulaClass" welches eine Ansicht hat. Das Flag besagt "Zeige nur Dokumente an".
Wenn man nun bspw. mittels des o.g. Agenten den Wert des Flags (= Feldwert, da ja eine Ansicht ein Dokument ist ;) ) ändert, so kann man auch spezielle Dokumente, nämlich Desigenelemente , anzeigen.
Hinweis: Deine Ansichtsformel kann auch nur
SELECT @Name([CN];$UpdatedBy) = "Bernd Hacker"
heissen.
Andreas
-
Ah OK, ich habs teilweise verstanden.
Warum der Agent scheinbar nur 1 Dokument speichert
"If Not view Is Nothing Then
Set doc = db.GetDocumentByUNID(view.UniversalID)
Call doc.ReplaceItemValue("$FormulaClass", "1548")
doc.Save True, True
End If"
und deswegen alle Elemente zu sehen sind verstehe ich nicht ganz.
Und meine replikation der Elemente, die mit einer bestimmten ID signiert wurden, funktioniert doch noch nicht richtig.
Meine Ansichtsauswahl ist select @Name([CN];$UpdatedBy) = "Bernd Hacker".
Nur so werden alle Elemente angezeigt, die in der Liste von $UpdatedBy irgendwo "Bernd Hacker" stehen haben. Ich brauch aber nur die Elemente, in denen "Bernd Hacker" als letztes steht. Also nur die Elemente, die "Bernd Hacker" als signatur haben.
So könnte ich in den Replizierparametern die Ansicht angeben und gut ist.
Ich brauch hilfe...
-
Designelemente haben doch nur einen Wert unter $UpdatedBy zu stehen ...
Prinzipiell: Das letzte Element bekommst Du mit @Subset (DeinFeld; -1).
Bernhard
-
Nein, das $UpdatedBy enthält mehrere Werte.
Das mit dem "@Subset (DeinFeld; -1)" weiss ich, aber wie sage ich das dem Replizierparameter? Irgendwie funzt das nicht.
Und das Subset in die Ansichtsauswahl zu packen haut auch nicht richtig hin. SO könnte ich dem Parameter ja einfach die Ansicht geben und gut ist.
Wahrscheinlich muss ich nur ein wenig tüfteln, ich gebe aber bescheid wenn es funktioniert.
Prinzipiell funktioniert es mit dem $FormulaClass usw. aber sehr gut.
Jetzt nur noch aus den Einzelteilen ein Ganzes machen....
-
Die Zugriffsformel der ANSICHT muss lauten:
_LetzeAenderungVon :=
@If(
@Elements($UpdatedBy) > 1;
@Subset(@Name([CN];$UpdatedBy);-1);
@Name([CN];$UpdatedBy)
);
SELECT _LetzeAenderungVon = "Bernd Hacker"
In den Replizierparametern dann nur die Ansicht auswählen, sonst nix,
Andreas
-
Vielen, vielen Dank!
Sehr schön, ich bin begeistert! ;D
-
Ah, Ok, jetzt ist da auch was bei mir angekommen :P
Ich hatte mich schon gewundert warum der Select nicht klappen soll. Ok, wenn er als Replizierparameter angegeben ist.... Das hab ich zwar gelesen, ist aber nicht bei mir angekommen ::)
André