Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Selin am 23.06.05 - 10:05:26

Titel: Name aus gewählter Gruppe löschen
Beitrag 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

Zitat
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
Titel: Re: Name aus gewählter Gruppe löschen
Beitrag von: Glombi am 23.06.05 - 12:47:19
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
Titel: Re: Name aus gewählter Gruppe löschen
Beitrag von: Selin am 23.06.05 - 14:16:52
ja sorry, ist vielleicht nicht sehr sauber gelöst aber ich bemühe mich...

Zitat
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
Titel: Re: Name aus gewählter Gruppe löschen
Beitrag von: Glombi am 23.06.05 - 14:25:51
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
Titel: Re: Name aus gewählter Gruppe löschen
Beitrag von: Glombi am 23.06.05 - 14:27:47
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 
Titel: Re: Name aus gewählter Gruppe löschen
Beitrag von: Selin am 23.06.05 - 15:01:16
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.
Titel: Re: Name aus gewählter Gruppe löschen
Beitrag von: Selin am 23.06.05 - 15:05:42
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
Titel: Re: Name aus gewählter Gruppe löschen
Beitrag von: klaussal am 23.06.05 - 15:09:59
Dann lass doch mal den Debugger mitlaufen.
Warum findet er den Namen nicht ?
Titel: Re: Name aus gewählter Gruppe löschen
Beitrag von: Axel am 23.06.05 - 15:33:41
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
Titel: Re: Name aus gewählter Gruppe löschen
Beitrag von: Selin am 23.06.05 - 15:51:11
genau das war's Axel.

Vielen Dank an Alle.

Lieben Gruß
Selin
Titel: Re: Name aus gewählter Gruppe löschen
Beitrag von: Selin am 23.06.05 - 15:57:42
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