Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: FlashDance am 09.07.03 - 09:01:38

Titel: Daten kopieren
Beitrag 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

 ??? ???
Titel: Re:Daten kopieren
Beitrag von: Meff am 09.07.03 - 09:08:21
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.
Titel: Re:Daten kopieren
Beitrag von: FlashDance am 09.07.03 - 09:54:34
Danke für die Info. Habe leider mit Arrays noch nichts gemacht.
Titel: Re:Daten kopieren
Beitrag von: ata am 09.07.03 - 13:05:03
... 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
Titel: Re:Daten kopieren
Beitrag von: koehlerbv am 15.07.03 - 21:42:59
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