Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: FlashDance am 09.07.03 - 09:01:38
-
Script Neuling hat da ein Problem:
Fülle in einer Tabelle diverse Felder. Über einen Button werden diese Felder wiederum in andere Felder übertragen.
Wird nun ein neuer Datensatz hinzugefügt soll dieser hinzugefügt werden und den bereits bestehenden nicht überschreiben.
Wie krieg ich das hin ?
Das ist der Script
Sub Click(Source As Button)
Dim session As New NotesSession
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Dim db As NotesDatabase
Set db = session.CurrentDatabase
Set uidoc = workspace.CurrentDocument
Set doc = uidoc.Document
Set doc = New NotesDocument(db)
'doc.Form = "Anlagebewegung"
doc.PartNo_AB= uidoc.FieldGetText("PartNo")
doc.Description_AB= uidoc.FieldGetText("Description")
doc.Quantity_AB= uidoc.FieldGetText("Quantity")
doc.Sender_KST_AB= uidoc.FieldGetText("Sender_KST")
doc.Empfaenger_KST_AB= uidoc.FieldGetText("Empfaenger_KST")
Call doc.MakeResponse( doc )
Call doc.Save(True, False)
Call uidoc.Reload
Call uidoc.FieldSetText("PartNo", "")
Call uidoc.FieldSetText("Description", "" )
Call uidoc.FieldSetText("Quantity","" )
Call uidoc.FieldSetText( "Sender_KST", "" )
Call uidoc.FieldSetText("Empfaenger_KST", "" )
Call uidoc.Refresh
Call uidoc.Save
End Sub
??? ???
-
Du musst einfach nur den Array ermitteln und den neuen Datensatz mit dem Wert +1 hinzufügen.
Meff
P.S.: Ich mache das leider nur immer im Backend. Muss mir kurz mal ein Frontendbeispiel basten.
-
Danke für die Info. Habe leider mit Arrays noch nichts gemacht.
-
... ich habe auf meiner Homepage grundlegendes zur LS-Programmierung hinterlegt und erklärt...
http://www.anton-tauscher.de/LotusScript (http://www.anton-tauscher.de/LotusScript)
... unter Sprachelemente findest du auch Arrays
ata
-
Hi,
eine ziemlich verspätete Antwort, aber vielleicht kann ich helfen:
Zunächst einmal solltest Du Dir grundsätzlich Gedanken machen über Lotus Notes - Du kommst sicherlich gerade aus einer anderen Programmierecke und machst Dir so nur selbst Schwierigkeiten:
- Eine "Tabelle" in Notes ist ein rein grafisches Element in einer Maske. Notes ist Dokument-orientiert und kann bestenfalls mit üblen Tricks in "Spalten und Zeilen" aufgeteilt werden.
- Felder: Wenn Du mit LS arbeiten willst, vergißt Du besser auch das ganz fix. Ein "Feld" (wie im Designer für eine spezielle Maske definiert) kann durchaus aus mehreren "Items" bestehen. Ergo: Besser auf "Item"-Ebene denken - das senkt das Frust-Potential, wenn es ans "Eingemachte" geht ;-) Hier reicht uns jetzt aber die Annahme "item = Feld" ;-)
- Datensatz: In Notes ein "Dokument". Während in RDMS pro Datensatz immer x "Felder" enthalten sind, muß dies in Notes überhaupt nicht so sein - es können mehr oder weniger oder ganz andere sein.
Das jetzt bitte nicht als altkluge Belehrung verstehen, sondern als ein Tip aus sehr langer Erfahrung über die "no-no"'s in Notes ;-)
Jetzt zu Deinem eigentlichen Problem:
Den gesandten Code kannst Du erstmal getrost vergessen - Du machst da ja ganz wilde Sachen, die sich gleich wieder gegenseitig aufheben. Im Kern geht es Dir ja aber, einer LISTE (= ein Notes-Feld, das ein eindimensionales Array darstellt) in Feld y aus Feld x einen Wert anzuhängen.
Und das geht in LS am einfachsten mit ArrayAppend:
ArrayAppend( v1 As Variant, v2 As Variant ) As Variant v3
Du weist v1 den Inhalt Deines Ziel-Items zu, v2 Deinem Quell-Item, und v3 wird dann wieder das ZielItem.
Beispiel für eine solche Aktion im gerade aktuellen NotesUIDocument (Field2 ist das Feld, das die gesammelten Ergebnisse aufnehmen soll, Feld1 liefert den anzuhängenden Wert):
Dim ws as New NotesUIWorkpace
Dim uidoc as NotesUIDocument
Set uidoc = ws.CurrentDocument
uidoc.Document.Field2 = Arrayappend (uidoc.Document.Field2, uidoc.Document.Field1 (0))
Call uidoc.Reload
Dies läßt sich natürlich genau so auch quer über Dokumente erledigen.
Wenn Du weitere Fragen hast, rühr' Dich einfach.
HTH,
Bernhard