Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Mikhail am 27.05.08 - 14:35:28

Titel: Eigenes Ordnersystem
Beitrag von: Mikhail am 27.05.08 - 14:35:28
Hallo Alle :)

habe hier schon via Schnellsuche die meisten "Ordner" Threads durchgelesen, bin aber zu dem Schluss gekommen, dass ich doch einen neuen Thread dafür erstellen muss...
(vorab die Information, dass ich Neuling im Bereich Lotus Notes bin)

Also für meine Ordnerstruktur habe ich mir bereits die Aktionen "Ordner erstellen...", "In Ordner verschieben..." sowie "Aus Ordner entfernen" aus der Standardmaildatenbank übernommen. Da ich die Dokumente "quasi" aus Postein- und ausgang in die jeweiligen Ordner "verschieben" will, muss ich ja eine Flag setzen um diese Dokumente in den Ansichten nicht mehr gezeigt zu bekommen.

Momentan kann ich mit meiner Aktion In Ordner verschieben... (Formelsprache) aber nur Hinzufügen; "Verschieben" ist ausgegraut.
Ich wäre sehr dankbar wenn ihr mir helfen könnten,

entweder das Ausgrauen in irgendeiner Form loszuwerden
oder ein von meiner bisherigen Verschieb-aktion unabhängiges LotusScript zu entwerfen, welches aber auch die Art von Dialogbox bietet wie es @Command([Folder]) tut.

Im Voraus schon ein Danke fürs Lesen und ein weiteres, wenn ihr euch die Mühe macht mir zu helfen.

Michael
Titel: Re: Eigenes Ordnersystem
Beitrag von: Driri am 27.05.08 - 16:10:21
Für das @Command([Folder]) gibt es zusätzliche Optionen. Mit @Command([Folder];"";"1") kommt die Ordnerauswahl und das Dokument wird dann verschoben.

Das bewirkt der letzte Parameter "1". Wenn man dort "0" setzt oder den Parameter komplett wegläßt, wird das Dokument kopiert.

Ich empfehle auch die Lektüre der Designer-Hilfe, da steht der Befehl noch einmal ausführlich beschrieben.
Titel: Re: Eigenes Ordnersystem
Beitrag von: Mikhail am 28.05.08 - 06:46:12
Ah danke, werde es mal probieren und mich mal mit der Designer-Hilfe auseinandersetzen ;)

Edit:
Das scheint so nicht zu funktionieren... Bei dem Dialog bleibt die Möglichkeit Verschieben weiterhin ausgegraut; prinzipiell geht ja auch keine Verschiebung von einer Ansicht in einen Ordner (das ist mir bewusst) aber dann muss es doch die Möglichkeit geben die Sichtbarkeit nach dem Dialog umzustellen...

Also mein Problem ist weiterhin, dass die Mail weiterhin sichtbar bleibt; habe auch schon @SetField probiert, konnte damit aber die sichtbarkeitsflag nicht umstellen... falls jemand 'ne Idee hat, bitte immer her damit :)

Michael
Titel: Re: Eigenes Ordnersystem
Beitrag von: s_Old am 28.05.08 - 09:22:57
Moin Moin!

Du kannst doch einfach ein bestimmtes Flag setzen beim Verschieben in einen Ordner und alle Dokumente mit eben diesem aus den Ansichten über die Selektionsformel herausfiltern.

@Do(
    @Command([Folder];"";"1");
    FIELD MeinFlag := "1"
);
Titel: Re: Eigenes Ordnersystem
Beitrag von: Mikhail am 28.05.08 - 09:59:42
Danke Sven, das FIELD Flagsetzen funktioniert, allerdings kommt jetzt die Fehlermeldung "Angegebener Befehl kann nicht ausgeführt werden" und der Folder-Dialog kommt nicht mehr... vertragen sich @Command und @Do nicht oder was kann da das Problem sein?

Wie gesagt Flagsetzen funktioniert aber Dialog bleibt weg.

Edit:
Habs nochmal anders herum probiert dann hat's funktioniert; danach wieder so wie du vorgeschlagen hast und es geht auch... problem jetzt: die mailflag wird ja schon vor dem dialog gesetzt und somit auch bei Abbruch; ich versuche das mal mit einer Abfrage zu lösen... danke für die Hilfe an euch beide
Titel: Re: Eigenes Ordnersystem
Beitrag von: Driri am 28.05.08 - 10:18:32
Sorry, das kam nicht so klar rüber, daß Du versuchst aus einer Ansicht zu verschieben. Das funktioniert natürlich nicht, weil eine Ansicht die Dokumente anhand einer Selektionsformel anzeigt.
Titel: Re: Eigenes Ordnersystem
Beitrag von: Mikhail am 28.05.08 - 10:28:23
Danke für die Antwort, aber das ist mir schon klar... die Beschreibung des Unterschiedes habe ich schon oft gelesen; daher versuche ich ja jetzt die Flag zu setzen.

Mein aktuelles Problem ist folgendes:
Die Flag wird gesetzt und zwar schon bevor der Dialog abgeschlossen ist. D.h. im Falle einer Verschiebung klappt es prima; aber wenn der Benutzer Abbrechen wollte, wäre die Email durch die Flag "quasi im Æther verschwunden"

Ich muss also irgendwie an das Ergebnis des Dialoges dran kommen, also die dialogresults wenn man so will... weiß einer wie man an diese dialogergebnisse ran kommt, bzw. haben die verschiedenen buttons in dem Dialog überhaupt verschiedene Werte?
Titel: Re: Eigenes Ordnersystem
Beitrag von: Axel am 28.05.08 - 10:36:22
Ohne Code lässt sich da wenig sagen. Poste mal den Code und dann können wir weitersehen.


Axel
Titel: Re: Eigenes Ordnersystem
Beitrag von: Mikhail am 28.05.08 - 10:47:17
Hallo Axel,

ich habe keinen wirklich konkreten Code; ich stelle mir das so vor

variable := @command([folder];"";"1");
@if(
variable != abbruch;
@do(
sichtbarkeit=1);
"")

Das heißt, in eine Variable soll das Ergebnis eines Dialogs gespeichert werden. Dann soll abgefragt werden ob das Ergebnis eben nicht das des Buttons Abbrechen ist und in dem Fall soll die Flag eben gesetzt werden. Das Problem ist, dass ich in der Formelsprache noch weniger versiert bin als in LotusScript :D und, dass Dialogresults (für mich bekannt aus VB.NET) ja nicht unbedingt Teil jeder Programmiersprache sein müssen.

Abseits davon: Mich wundert, dass ein simples
@Command([Folder];"";"1")
in der Standardmaildatenbank funktioniert, während es in der von mir bearbeiteten eben nicht funktioniert.

Michael
Titel: Re: Eigenes Ordnersystem
Beitrag von: Axel am 28.05.08 - 11:23:03
So kann das nicht funktionieren, weil das Folder-Command keinen Rückgabewert liefert. Ich sehe da auch wenig Chancen. Auch bei der entsprechenden Script-Methode ist der Rückgabewert undefiniert.

Als einzigste Alternative sehe ich im Moment, dass du einen eigenen Dialog erstellst, die vorhandenen Ordner ausliest und in einer Liste in der Dialogbox zur Auswahl anbietest. Dann hast du die Möglichkeit auszuwertern, ob die Dialogbox mit OK oder Abbrechen beendet wurde.

Momentan kann ich mit meiner Aktion In Ordner verschieben... (Formelsprache) aber nur Hinzufügen; "Verschieben" ist ausgegraut.

Dann wird die Aktion mit Sicherheit aus einer Ansicht heraus gestartet. In diesem Fall kannst du das Dokument nur in einen Ordner hinzufügen.

Ruft du das Ganze aus einem Ordner heraus auf, dann ist auch der Verschieben-Button aktiv.

Axel
Titel: Re: Eigenes Ordnersystem
Beitrag von: Christopher am 28.05.08 - 11:28:01
Ich habe mal eine Label funktion so wie bei google mail gebaut .... bei Interesse kann ich es gerne hier hochladen.....
Titel: Re: Eigenes Ordnersystem
Beitrag von: Mikhail am 28.05.08 - 11:38:26
Danke euch beiden für die Vorschläge.

Also bei mir ist Verschieben nicht mehr länger ausgegraut aber deswegen verschiebt er es natürlich trotzdem nicht (wie du schon sagtest, Axel, ist es eine Ansicht, da geht das ja schlecht)

Da kein Rückgabewert vorhanden ist, habe ich nun auch begonnen über LotusScript Möglichkeiten nachzudenken. Wahrscheinlich ist es das Beste eine eigene DialogBox dafür zu erstellen, wie du vorgeschlagen hast, Axel. Aber wie gesagt bin ich noch nicht so versiert in LotusScript - mal schauen ob ich das irgendwie hinkriege; werd' den Quelltext hier posten, falls ich was habe.

Danke auch dir Christopher; so wie du das realisiert hast sieht das schon gut aus; das gibt mir die ungefähre Idee, wie es nachher aussehen könnte. Danke für das Angebot es hochzuladen, aber ich werde mal schauen, ob ich's selbst hinbekomme.
Titel: Re: Eigenes Ordnersystem
Beitrag von: gossifu am 28.05.08 - 11:41:00
Ich hätte da vielleicht noch etwas, geht aber nur mit Script.
Und zwar das Ereignis 'QueryAddToFolder'. Wenn dur das nutzt, kannst Du, wenn du die Mail in einen Ordner verschiebst,
ein Flag mitgeben und dann mit der Selection-Formula in der Ansicht filtern.

Hab schon öfter mal was damit gemacht. Du kannst sogar nach Ordner die Aktionen unterschiedlich gestalten, Target gibt Dir den Zielordner wieder.

Ich führe so zum Beispiel gewisse aktionen aus, wenn ein User eine Mail in den Ordner 'Unerwünschte Mail' verschiebt.

mfg

Kjeld

Edit: Das muß aber in jede Ansicht/Ordner aus der Du etwas verschieben willst.
Titel: Re: Eigenes Ordnersystem
Beitrag von: Mikhail am 28.05.08 - 11:52:03
Hallo Kjeld,

wie genau meinst du das? Wird QueryAddToFolder dann angestoßen wenn die Aktion @Command([Folder]) verarbeitet ist oder wie muss ich das verstehen? Hast du ein Beispielquelltext, damit ich das nachvollziehen kann?

Michael
Titel: Re: Eigenes Ordnersystem
Beitrag von: gossifu am 28.05.08 - 14:42:28
Hallo Michael,

ja, es gibt das Ereignis in jeder/m Ansicht/Ordner, es wird ausgeführt beim Verschieben mit Button oder per Drag and Drop:

Code
Sub Queryaddtofolder(Source As Notesuiview, Target As Variant, Continue As Variant)
     'Source ist die aktuelle Ansicht, Target ist der Zielordner und mit Continue kannst Du die Sache abbrechen (für genaueres, Hilfe konsultieren)
	     If Instr(Target, "JunkMail") > 0 Then 'zum Bsp
		'Hier kommt Deine von Dir gewünschte Aktion rein
          Dim dc as NotesDocumentCollection
          Set dc = Source.Documents 'das sind die angehakten
          Call dc.StampAll("FlagFeld", 1) 'Alle Dokumente bekommen dieses Flag
	     End If
End Sub

Probier mal.

mfg

Kjeld
Titel: Re: Eigenes Ordnersystem
Beitrag von: Mikhail am 28.05.08 - 15:03:21
Danke für den Vorschlag, Kjeld.

Ich denke ich habe das Ereignis verstanden und daher bin ich mir nicht sicher ob es für mein Ordnersystem das Richtige ist. Dein Beispiel bezieht sich ja auf den "JunkMail"-Ordner. Bei mir gibt es aber (wie ganz am Anfang schon mal kurz erwähnt) die Möglichkeit die Ordner selbst zu erstellen, d.h. jeder neu erstellte Ordner müsste direkt eine Queryaddtofolder mit dem Instr-Vergleich Target, "Ordnername" bekommen - wahrscheinlich würde das sogar irgendwie gehen, aber wie man sicherlich schon merkt wird's an der Stelle weitaus komplizierter als bei deinem noch relativ simplen Quellcode.

Ich denke ich werde mir einen eigenen Dialog mit Picklist stricken müssen...
nochmal Danke an Alle!
Wenn ich 'was neues hab' werd' ich's hier 'reinschreiben ;)
Titel: Re: Eigenes Ordnersystem
Beitrag von: gossifu am 28.05.08 - 15:53:11
Hallo Michael,

mußt Du nicht, war nur ein Beispiel. Man muß nicht auf Target abfragen.
Ich hatte das nur so gemacht, um nicht das Ereignis bei allen Ordnern machen zu müssen.
Wenn das aber sein soll, dann gib doch dem Ordnernamen ein Suffix oder Präfix, an dem Du diese Spezialordner identifizierst
Und eigentlich brauchst Du das Script nur bei den Ansichten, denn aus Ordnern kann man es ja verschieben. Und neue Ansichten werden selten von den Usern erstellt, eher Ordner.
Naja, trotzdem viel Glück. Und bei Fragen fragen ;) .

mfg

Kjeld
Titel: Re: Eigenes Ordnersystem
Beitrag von: Mikhail am 29.05.08 - 07:26:54
Hey Kjeld,

hab' gerade mal ein wenig 'rumprobiert... der Debugger zeigt, dass das Event bei mir nur beim Drag&Drop ausgeführt wird und in der Designerhilfe steht auch, dass es dadurch ausgelöst wird. Der Benutzer wird aber eher eine Schaltfläche benutzen wollen...

Du hast doch geschrieben, dass es auch durch Buttonclick angestoßen werden kann, bist du dir sicher, dass das stimmt?

Grüße
Michael
Titel: Re: Eigenes Ordnersystem
Beitrag von: gossifu am 29.05.08 - 07:57:33
Hi Michael,

sorry, mein Fehler  ::). Hast Recht, das Script müsste dann auch in den Button rein.
Asche auf mein Haupt.

Kjeld
Titel: Re: Eigenes Ordnersystem
Beitrag von: Mikhail am 29.05.08 - 08:23:06
Hey, macht ja nix, es wird halt irgendwie immer komplizierter....
Die QueryAddToFolder gibt's dann ja auch nur bei Aktionen, welche in LotusScript formuliert wurden. Das heißt das simple @Command([Folder];"";"1") der Formelsprache kommt dann wieder nicht in Frage und schon muss man das durch weitaus komplexeres LotusScript ersetzen...

Hast du das bei deinen Datenbanken denn irgendwie in LotusScript realisieren können?

Michael
Titel: Re: Eigenes Ordnersystem
Beitrag von: dirk_2909 am 29.05.08 - 09:13:05
Zitat
..komplexeres LotusScript ..

Warum ist denn das Verschieben eines Dokumente sin einen Ordner so komplex mit LS??

Sind nicht mehr als 3-4 Zeilen Code (bei min. Anforderungen).
Titel: Re: Eigenes Ordnersystem
Beitrag von: Mikhail am 29.05.08 - 09:32:39
Hallo Dirk,

das grundsätzliche Verschieben ist vielleicht nicht das Komplexe daran; es ist mehr die Aufgabe das ganze in einem Dialog mit dem Benutzer zu realisieren. Denke da an eine Dialogbox mit Embedded View, welche alle verfügbaren Ordner anzeigt und da ich, wie gesagt, noch nicht ganz so bewandert in LS bin, wirkt der Formelsprachen-Einzeiler schon deutlicher einfacher ;)

Michael
Titel: Re: Eigenes Ordnersystem
Beitrag von: dirk_2909 am 29.05.08 - 09:47:13
eine Embedded View macht in dem Zusammenhang überhaupt keinen Sinn .....

Und wenn Du alles mit einem "Formelspracheneinzeiler" hinbekommst , dann ist es ja ok.
Aber LS ist - aus meiner Sicht - auch schnell umgesetzt.

Und dank der Designerhilfe kann man sich viele Beispiele ansehen/verwenden und sich in das Thema einarbeiten...
Titel: Re: Eigenes Ordnersystem
Beitrag von: Mikhail am 29.05.08 - 09:57:30
Das ist ja genau was ich mache...

Also ich habe schon wirklich viel in der Designerhilfe 'rumgeblättert und auch hier im Forum, aber eine schnelle Umsetzung für einen Benutzerdialog, in dem dieser einen Ordner auswählen kann (so wie er es bei @Command([Folder]) kann, habe ich für LS noch nicht gefunden.

Von mir aus macht Embedded View keinen Sinn; hatte das halt nur hier im Forum gelesen - weiß halt nicht, wie ich sonst realisieren soll dass der Benutzer aus bestehenden Ordnern wählen kann. Schaue mir schon Picklist u.Ä. an, aber nach allem was ich schon gesehen und probiert habe, bin ich nicht der Meinung, dass das was ich schaffen will, leicht zu schaffen ist. Aber ich lasse mich auch gerne eines besseren belehren.

Michael

edit:
Vergessen zu schreiben: Der Formelspracheneinzeiler sorgt für das Verschieben, aber (wie schon früher in diesem Thread geschrieben) setzt keine Flag für die Sichtbarkeit, damit das Dokument aus der Ansicht verschwindet. Das Flagsetzen ist dabei nicht das Problem, sondern die Tatsache, dass die Flag gesetzt wird, auch wenn der Benutzer den Dialog mit Abbrechen (und eben nicht mit Kopieren/Verschieben) beendet. Das ergibt als Resultat, dass nicht verschobene Dokumente trotzdem nicht mehr angezeigt werden.
Titel: Re: Eigenes Ordnersystem
Beitrag von: dirk_2909 am 29.05.08 - 10:36:46
Du musst über die DB-Eigenschaften die Ansichten auslesen und darus dann die Ordner herausselektieren ( notesdatabase.Views / notesview.IsFolder ).

Dann die ermittelten werte in einem Auswahlfeld oder Prompt ( NotesUIWorkspace ) dem User auswählbar machen ..

über document.PutInFolder( "DERAUSGEAEHLTE_ORDNER" , True ) kannst Du das dok verschieben.
Titel: Re: Eigenes Ordnersystem
Beitrag von: gossifu am 29.05.08 - 10:37:37


Ich hab da jetzt für Deine Anforderung nichts fertiges, aber wenn Du mit db.Views arbeitest, kannst Du Dir eine Liste aller Ordner zusammenstellen.
Code
Dim i as integer
Dim folder() As String
Forall v in db.Views
    If v.IsFolder Then
        Redim Preserve folder(i) As String
        folder(i) = v.Name
        i = i + 1
    End If
End Forall
ggfs noch sortieren, Script könnte man z. Bsp aus dem GruppenDokument des NAB nehmen,
um die Gruppenmitglieder zu sortieren.

Dann die Liste in eine Promptbox mit Einzel- oder Mehrfachauswahl.
So hast Du Die Namen der Ordner und kannst dann den Rest erledigen.

Vielleicht kann man auch schon eine Ordnerliste irgendwo hinterlegen, die beim Erstellen eine neuen Ordners aktualisiert wird, dann geht das schneller.

mfg

Kjeld

Edit: zu spät  ;)
Titel: Re: Eigenes Ordnersystem
Beitrag von: Mikhail am 29.05.08 - 10:43:08
Okay, ich nehme es zurück;
es HÖRT sich zumindest viel einfacher AN, als ich es mir vorgestellt hatte...

Also ein großes DANKESCHÖN an dieser Stelle und ich werde mich dann mal damit auseinander setzen ;)

Grüße
Michael

edit:
Nochmal ein großes DANKE; mit eurer Hilfe und ein bisschen Fummeln bin ich jetzt so weit:


Sub Click (Source As Button)
   Dim uiws As New NotesUIWorkspace
   Dim sess As New NotesSession
   Dim db As NotesDatabase
   Dim dc As NotesDocumentCollection
   Dim doc As NotesDocument
   Dim item As notesitem
   
   Set db = sess.CurrentDatabase
   Set dc = db.UnprocessedDocuments
   Set doc = dc.GetFirstDocument
   
   Dim i As Integer
   Dim folder() As String
   Forall v In db.Views
      If v.IsFolder Then
         Redim Preserve folder(i) As String
         folder(i) = v.Name
         i = i + 1
      End If
   End Forall
   
   Dim auswahl As Variant
   auswahl = uiws.Prompt(PROMPT_OKCANCELLIST, "In Ordner einfügen", "Bitte wählen Sie einen Ordner aus:", "", folder())
   Messagebox auswahl
   
   If Not auswahl = "" Then
      While Not doc Is Nothing
         Call doc.PutInFolder(auswahl)
         
         Set item = doc.ReplaceItemValue("sichtbarkeit", "3")
         Call doc.Save( True, False, False)
         Set doc=dc.GetNextDocument(doc)
      Wend
   End If
End Sub

Das braucht ein klein bisschen bis es die Liste geladen hat und daher denke ich nochmal über deinen Vorschlag nach, Kjeld. Aber grundsätzlich läufts erst mal, also wiederholtes Danke. PROMPTe Hilfe sozusagen :P

[closed]