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