Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Selin am 23.06.05 - 10:05:26
-
Hallo Ihr Lieben,
ich habe das Problem hier schon mal gepostet gehabt:
http://www.atnotes.de/index.php?topic=21692.0
ich habe eine Datenbank, die auf der Adressbuchschablone basiert.
Habe ein zusätzliches Feld Gruppe eingefügt.
Das Feld ist ein Listfeld mit der Formel
@Right(@DbColumn("":"NoCache"; ""; "Gruppe"; 1);"_")
Die Gruppennamen fangen alle mit ABC_ an.Deshalb @Right...
Mir werden in der Liste nun alle Gruppen angezeigt.
Was ich versuche ist folgendes:
Wenn ich eine oder mehrere Einträge in dem Listfeld markiere(Mehrfachauswahl möglich), soll dieser Kontakt, z.B. nach Klick auf einen Knopf, in die markieren Gruppen hinzugefügt werden.
Und wenn ich die Markierung vor der Gruppe wieder rausnehme, soll der Name aus der Gruppe wieder gelöscht werden.
Mit folgendem Script hat das Löschen des aktuellen Kontakts aus der gewählten Gruppe auch funktioniert aber irgendwie geht das nicht mehr.
Und ich weiß nicht, warum?
Mit diesem Script löscht er alle Namen aus der Gruppe und nicht den aktuellen.
Habt ihr vielleicht eine Idee, was an dem Script falsch ist?
Sub Click(Source As Button)
Dim session As New NotesSession
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Dim db As NotesDatabase
Dim view As NotesView
Dim docGroup As NotesDocument
Dim item As NotesItem
Dim books As Variant
Dim done As Integer
Dim idx As Integer
Dim subj As Variant
'Zugriff auf das aktuell geöffnete Dokument
Set uidoc = ws.CurrentDocument
Set doc = uidoc.Document
Set db = session.CurrentDatabase
Set view = db.GetView("(Gruppe)")
'Bearbeiten aller markierten Einträge im Listenfeld
For idx = 0 To Ubound(doc.Gruppe)
Set docGroup = view.GetDocumentByKey("#ABC_" & doc.Gruppe(idx), True)
subj = docGroup.GetItemValue( "Members" )
Set item = docGroup.GetFirstItem( "Members" )
'Name_Gruppe ist ein berechnetes Feld in der Maske Firstname + " " + LastName
If (subj(0) = doc.Name_Gruppe(0)) Then
docGroup.Members = ""
Call docGroup.Save(True, False)
Else
Msgbox("Name vorhanden")
End If
Next
Msgbox("Die Gruppenliste wurde aktualisert")
End Sub
Vielen Dank + Viele Grüsse
Selin
-
Das
docGroup.Members = ""
löscht alle Namen aus dem Feld Members.
Ich blicke den Code ehrlich gesagt nicht so ganz: Wo steht denn der Name der Gruppe, die entfernt werden soll? Ist das "#ABC_" & doc.Gruppe(idx) ?
Andreas
-
ja sorry, ist vielleicht nicht sehr sauber gelöst aber ich bemühe mich...
Ich blicke den Code ehrlich gesagt nicht so ganz: Wo steht denn der Name der Gruppe, die entfernt werden soll? Ist das "#ABC_" & doc.Gruppe(idx) ?
genau, das ist die Gruppe.
Und aus der Gruppe, die markiert ist, soll der Name rausgelöscht werden.
Viele Grüße
Selin
-
Hier mal ein erster Ansatz:
Sub Click(Source As Button)
Dim session As New NotesSession
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Dim db As NotesDatabase
Dim view As NotesView
Dim docGroup As NotesDocument
Dim item As NotesItem
Dim books As Variant
Dim done As Integer
Dim idx As Integer
Dim subj As Variant
Dim group_name As String
Dim ret_eval As Variant
'Zugriff auf das aktuell geöffnete Dokument
Set uidoc = ws.CurrentDocument
Set doc = uidoc.Document
Set db = session.CurrentDatabase
Set view = db.GetView("(Gruppe)")
'Bearbeiten aller markierten Einträge im Listenfeld
For idx = 0 To Ubound(doc.Gruppe)
group_name = "#ABC_" & doc.Gruppe(idx)
Set docGroup = view.GetDocumentByKey(group_name , True)
subj = docGroup.GetItemValue( "Members" )
Set item = docGroup.GetFirstItem( "Members" )
'Name_Gruppe ist ein berechnetes Feld in der Maske Firstname + " " + LastName
If (subj(0) = doc.Name_Gruppe(0)) Then
ret_eval = Evaluate( |FIELD Members := @Trim(@Replace(Members;"| + group_name + |";""));@True|,docGroup)
Call docGroup.Save(True, False)
Else
Msgbox("Name vorhanden")
End If
Next
Msgbox("Die Gruppenliste wurde aktualisert")
End Sub
Andreas
-
Und dann würde ich die Schleife noch ändern, denn die zu löschende Gruppe muss ja nicht immer an erster Stelle stehen, oder?
For idx = 0 To Ubound(doc.Gruppe)
group_name = "#ABC_" & doc.Gruppe(idx)
Set docGroup = view.GetDocumentByKey(group_name , True)
subj = docGroup.GetItemValue( "Members" )
Set item = docGroup.GetFirstItem( "Members" )
If item.Contains( doc.Name_Gruppe(0) ) Then
ret_eval = Evaluate( |FIELD Members := @Trim(@Replace(Members;"| + group_name + |";""));@True|,docGroup)
Call docGroup.Save(True, False)
Else
Msgbox("Name NICHT vorhanden")
End If
Next
-
Hi Andreas,
danke für deine Mühen.
An dieser Stelle weist der Debugger einen Fehler auf:
subj = docGroup.GetItemValue( "Members" )
Object Variable not set.
-
ok, jetzt klappt es ohne Fehlermeldung
aber ein Problem bsteht noch.
obwohl der aktuelle Name in der Gruppe vorhanden ist, kommt die Meldung "Name NICHT vorhanden und der Name wird nicht aus der Gruppe gelöscht
-
Dann lass doch mal den Debugger mitlaufen.
Warum findet er den Namen nicht ?
-
Hi,
ich glaube hier liegt der Hase im Pfeffer:
In der Evaluate-Anweisung wird auf den falschen Namen geprüft.
Probier's mal so:
If item.Contains( doc.Name_Gruppe(0) ) Then
ret_eval = Evaluate( |FIELD Members := @Trim(@Replace(Members;"| + doc.Name_Gruppe(0) + |";""));@True|,docGroup)
Call docGroup.Save(True, False)
Else
...
Axel
-
genau das war's Axel.
Vielen Dank an Alle.
Lieben Gruß
Selin
-
ach ja, eins noch
im moment ist das Handlin für den Benutzer etwas aufwendig.
Er muss als erstes die Markierungen setzen/entfernen, dann auf den Knopf "Remove" klicken und anschließend die neuen Markierungen über "Import" wieder aktualisieren,
Ich habe versucht beide Prozeduren in einen Agenten zupacken und alles über einen Knopf zu realisieren, aber das funktioniert nicht.
Der Agent importiert zwar aber das löschen macht er nicht
Der Aufruf ist folgendermaßen:
@Command( [ToolsRunMacro] ; "Loeschen") ;
@Command([ToolsRunMacro];"import");
@Command([FileSave])
Habt ihr hier eine Idee?
danke