Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: MadMetzger am 31.03.03 - 12:18:52
-
Wie kann man die Gestaltung von Ansichten aktualisieren, wenn diese ab der ersten Nutzung persönliche Ansichten sind?
Dazu muss man doch die persönliche Ansicht löschen und neu in die DB gehen, oder? Wie kann ich den Vorgang automatisieren?
-
entweder im Notesforum SUCHEN :P oder aber das lesen:
http://www.atnotes.de/index.php?board=7;action=display;threadid=7248
-
der code funktioniert nicht! spuckt eine Fehlermeldung aus bei der forall-schleife und dem ersten if...
-
ich geh davon aus, wenn man solchen Code verwendet, daß man ihn liest und nachzuvollziehen versucht...les nochmals bitte die Kommentare zum Quellcode "oben" im header..steht genau das drin, was Dir nun als Fehler auftaucht ::) ::) ::)
-
hab ich getan, kann aber mir den fehler nicht erklären. da kommt ein type mismatch bei der abfrage ob es sich um eine persönliche ansicht handelt.
im header stehen leider keine näheren infos.
-
doch doch...da steht was...
"For R5.0 and later, use the isPrivate property of NotesView rather than isPrivateView(v)"
...ersetz mal bitte die if Bedingung durch ein "notesView.IsPrivate" => If isPrivateView(v) Then
in
=> If v.IsPrivate Then
und, klappts?
-
... handelt es sich um diese Zeile ...
Print "Suche veraltete, private Ansichten " & count & " von " & tot & "..."
... das sind TypeMismatch drin, denn es sollen Zahlen und Text verkettet werden...
Print "Suche veraltete, private Ansichten " & Cstr(count) & " von " & Cstr(tot) & "..."
ata
-
@ata: das mit dem print war es nicht, danke trotzdem.
jetzt kommt nur noch ein Fehler bei
Set masterView = getMasterView (v)
-
... was für ein Fehler kommt jetzt, immer noch Type mismatch?
ata
-
ja genau, der kommt.
-
sag mal, wo läuft der Code bei Dir eigentlich? Im PostOpen der DB oder etwa in einer Schaltfläche oder wo auch immer?
Weil, der Code klappt ganz super duper auf 4.xer Client, weil Du ja auch unter diesem R4er Forum postest, fällt mir jetzt erst auf.
-
ich habe einen agenten genommen, und hab ein wenig am anfang angepasst. (beim Kommentar zum Postopen)
hier mal der quelltext.
Dim session As New notessession
Dim Eintrag As String
Eintrag = session.getenvironmentstring("pbtraxx")
Dim Heute As String
Heute = Today()
If Heute = Eintrag Then
Exit Sub
End If
Set db = Session.currentdatabase '...works in Database PostOpen event, modify for other contexts
count=0
privateviewtext=""
Dim masterView As NotesView
tot = Ubound(db.views) + 1
Forall v In db.views
count=count+1
Print "Suche veraltete, private Ansichten " & cstr(count) & " von " & cstr(tot) & "..."
If isPrivateView(v) Then
Set masterView = getMasterView(v) '...get the shared view on which this personal view is based
If Not(masterView Is Nothing) Then
If v.Created < masterView.LastModified Then '...if the shared view design was updated after the private view was
'...then remove the private view
privateviewtext=privateviewtext & Chr(10) & v.name
v.remove
End If
End If
End If
End Forall
If privateviewtext="" Then
Print "Keine veralteten Ansichten gefunden."
Else
Print ""
Messagebox "folgende private ""Meine"" Ansichten mußten entfernt werden:" & privateviewtext & Chr(10) & "Schließen Sie die Datenbank und gehen wieder hinein."
End If
Call session.setenvironmentvar("pbtraxx",Heute)
End Sub
Function isPrivateView(v As NotesView) As Integer
isPrivateView = False
Set vdoc = v.parent.GetDocumentByUnid( v.UniversalID )
If Not (vdoc Is Nothing) Then
If vdoc.HasItem("$Flags") Then
If Instr(vdoc.GetItemValue("$Flags")(0), "V") Then
isPrivateView = True
Exit Function
End If
End If
End If
End Function
Function getMasterView(pView As NotesView) As NotesView
Set db = pView.parent
viewList = db.views
Dim view As NotesView
Forall v In viewList
If v.Name = pView.Name Then
Set view = v
If Not(isPrivateView(view)) Then
Set getmasterView = v '...get the shared view on which this personal view is based
Exit Function
End If
End If
End Forall
Set getMasterView = Nothing
Print "Die ursprüngliche Vorlage der privaten Ansicht '" & pView.name & "' konnte nicht gefunden werden."
End Function
-
auf den ersten Blick...sag ihm mal daß
db einen Notes DB ist per
dim db as notesdatabase
-
das einfügen ändert leider nichts. hab oben mal die angemeckerten Zeilen fett gemacht.
-
im einem älteren Posting hatte ich Dir einen Vorschlag bzgl. dieser Zeile gemacht...schon gelesen und getestet?
-
das habe ich schon ausprobiert... funktionierte nicht, da mein client r4 ist.
-
ok...dann werde ich den Code mal im Agent testen..liegt bestimmt (so wie es auch die Authorin betont) am Kontext wo das Script läuft.
Aber, ich kann erst heute Abend R4 anschmeissen und testen (wirs spääät), was da in einem normalen Agent nicht klappt...gehe davon aus, daß Du den Agent manuell antriggerst und der eigentlich auf was eingestellt ist? Run über selected oder wie ?
-
habe den Agenten eingestellt manuell aus der Liste der Agents zu starten und das er einmal ausgeführt werden soll.
das mit dem Kontext habe ich ja eigentlich beachtet, denke ich. denn ich muss mir ja die backend-database holen, was ich hier dann über die session gemacht habe, oder? Oder habe ich irgendwo einen richtigen Denkfehler?
-
Was haltet Ihr von dieser Formel? Sie entfernt die DB aus dem Arbeitsbereich und fügt sie wieder hinzu, so dass die Ansichten gelöscht und neu erstellt werden. Funktioniert das auch? Habe ich bei www.martinscott.com (http://www.martinscott.com) gefunden.
Formel:
@Command([WindowWorkspace]);
@Command([FileOpenDatabase];........);
@Command([FileCloseWindow]);
@PostedCommand([EditClear]);
@PostedCommand([FileOpenDatabase];.......)
edit: Diese Formel hat nicht funktioniert.
-
@Rob Green: Schon was gefunden?
-
ja...hallo,...gefunden...was...achsoo..moment..ich schmeis mal schnell R4 an...erstmal ölen, ist schon Rost auf dem HD Cluster wo R4 drauf ist...quietsch...rauch...peng....ahhhh..die Maschine läuft noch immer auch nach 500.000 KM, das ist ne Qualität eh? Unverwüstlich.
-
alsoooo...hab das Teil als >>AGENT<< und als >>runonce<< und >>rufe über Action<< eingestellt. Mit dem Code von Dir. Mein Client hat den Stand 4.64 und kein Error im Code. Läuft tuto paletti durch.
Bist Du a.) ganz sicher, daß der Agent bei Dir auch so eingestellt ist und b.) ganz sicher, daß Du alles in einer 4er Umgebung (auch Client) testest?
BTW, habs nun auch unter R5.10 getestet...nema problema !
-
hatte nicht mit "aus Menü Aktion" eingestellt, dann läuft es ohne Fehler durch. Schönen Dank!!!!
-
Irrtum! Hatte den angemeckerten Teil auskommentiert!!! ICh Blödmann!
Aber ich kriege immer noch einen Fehler, schon beim Abspeichern des Agenten in den oben angegebenen Zeilen.
Das ist ja die Stelle, wo der Agent alle Ansichten aus dem Views-Array durchläuft. Ich kann mir das nicht erklären... Die Funktion IsPrivateView brauch doch eine NotesView als Parameter und V in dem Script ist eine Ansicht aus dem Array. Warum kommt dann ein Fehler?
*kurz vor dem verzweifeln bin*
-
hast Du den ganz Code aus dem Board gepastet und original in den Agent im Bereich INITIALIZE zwischen Sub und END Sub reinkopiert?
Schau mal hier die Test DB:
-
Hatte ich eigentlich getan...
Hab jetzt deinen Agenten reinkopiert, der natürlich funktioniert. ICh versteh die Welt nicht mehr, aber der Fehler muss wohl bei mir gelegen haben...
-
sch...egal..nimm das Teil, Hauptsache es klappt jetzt ;)
-
Hab noch mal eine Frage...
Wenn der Agent durchgelaufen ist, kommt immer eine Fehlermeldung, die ich mir nicht erklären kann:
B-Tree structure is inavalid
kann mir das jemand erklären?