Guten Tag,
ich entwickle zur Zeit ein paar Grundfunktionen für eine dynamische Veranstaltungsdatenbank. Dynamisch in dem Sinne, dass der Anwender neue Veranstaltungen generieren kann und ich diese nicht hart vorprogrammiere.
Zum Aufbau:
Aufruf eines angelegten Veranstaltungsdoks mit eingebetteter Ansicht der zur Verfügung stehenden Kunden. Auswahl der Kunden innerhalb der Ansicht durch entsprechende Aktion. Die Kundendoks bekommen dann eine der Veranstaltung entsprechende Variable in das Feld "events" eingetragen. Es handelt sich um ein Textfeld mit Mehrfachwerten.
Die Werte werden per
item.AppendToTextList(NameVeranstaltung)
hinzugefügt. Dabei prüfe ich auch noch die maximale Teilnehmerzahl und einen eventuell bereits vorhandenen Wert im Kundendok.
Sub Click(Source As Button)
'Deklaration
Dim session As New NotesSession
Dim workspace As New NotesUIWorkspace
Dim db As NotesDatabase
Dim uiview As NotesUIView
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Dim dc As NotesDocumentCollection
Dim collection As NotesDocumentCollection
Dim item As NotesItem
Dim NameVeranstaltung As String
Dim anzahl As String
Dim searchFormula As String
Dim TNMAX As String
Dim verfuegbar As Long
Dim anzahlausgewaehlt As Long
Dim dummyitem As String
'Set Variable
Set db = session.CurrentDatabase
Set uiview = workspace.CurrentView
Set collection = uiview.Documents
'VeranstaltungDoc deklarieren
Set uidoc = workspace.CurrentDocument
'Bezeichnung der Veranstaltung auslesen
NameVeranstaltung = uidoc.FieldGetText( "ThemaVeranstaltung" )
'KundenDoks suchen
searchFormula = | events = "| + NameVeranstaltung +|"|
Set dc = db.Search( searchFormula, Nothing, 0 )
'KundenDoks innerhalb Collection zählen
anzahl = dc.Count
'TNMAX
TNMAX = uidoc.FieldGetText( "TeilnehmerMax" )
'Differenz Anzahl - TNMAX
verfuegbar = TNMAX - anzahl
'Anzahl ausgewählte Doks
anzahlausgewaehlt = collection.Count
If anzahlausgewaehlt <= verfuegbar Then
'Erstes Dokument
Set doc = collection.GetFirstDocument
'Schleife zum setzen des Event-KZ
While Not (doc Is Nothing)
Set item = doc.GetFirstItem( "events" )
If Not item.Contains( NameVeranstaltung ) Then
Call item.AppendToTextList( NameVeranstaltung )
Call doc.Save( False, True )
End If
'Nächstes Dokument
Set doc = collection.GetNextDocument(doc)
Wend
Else
Messagebox "Maximale Teilnehmerzahl bereits erreicht"
End If
End Sub
Jetzt die große Frage:
Wie bekomme ich gezielt einzelne Werte aus diesem Feld entfernt. Also Selektion eines oder mehrerer Kundendoks in der eingebetteten Ansicht und entfernen des jeweiligen Veranstaltungswertes.
Solange ich es nicht als Array oder Liste deklariere, ist es wohl trotz Mehrfachwerte auch nur ein einfaches Feld, oder? Welchen Umgang würdet Ihr mir mit diesem Feld innerhalb des Scripts empfehlen?
Folgendes funktioniert, allerdings nur mit konstanten Werten innerhalb einer Testmaske:
Const Macro = |@ReplaceSubstring(subject; char_old; char_new)|
Wert = Evaluate(Macro, doc)
Call doc.ReplaceItemValue ("subject" , Wert)
Ich nehme an, dass die EvaluateFormel nicht mit dynamischen Werten per Script gefüttert werden kann?!
Erschießt mich nicht gleich. Das sind meine ersten Scriptschritte..
Gruß Sascha