Domino 9 und frühere Versionen > ND6: Entwicklung

Optimierung Lotus Script

(1/3) > >>

Wilhelm Weber:
Hallo zusammen,

ich bräuchte mal einen Tipp..:-)

Folgendes Problem: Ich habe eine Maske mit ca. 30 Feldern.

Jetzt habe ich ein Skript, das sobald in einem der Felder ein Wert steht, daraus ein Neues Dokument erstellt.
Meine Frage ist, ob ich es in Skript so hinbekomme , dass der die Leeren Felder direkt übersspringt, weil ich sonst einen RiesenCode habe.
In der Formelsprache kann ich ja folgendes machen:
Liste:= @Trim(@Replace(Feld1:Feld2; ""; ""));
Damit kriege ich nur die Felder , die einen Wert haben indie Liste .
Wenn ich das in Skript versuche nachzubauen, klappt es leider nicht.
Deshalb sieht mein Code so aus, dass ich jedes Feld aufrufe , schaue ob was drin steht, wenn ja wird ein neues Dok erstellt, wenn nein gehts zum nächsten Feld.

das sieht dann so aus....

einlesen der Felder, dan die prüfung

If F1 <> "" Then
      Set doc1 =New NotesDocument (db)
      doc1.form = "xx"
      doc1.ma = F1
            
      Dim aut1  As String
      aut1 = "[Konfig]"
      Dim authorsitem As New NotesItem(doc1, "autor", aut1, AUTHORS)
      
      Call doc1.ComputeWithForm(True, False)
      Call doc1.save(True,False)
   End If
   
   If f2 <> "" Then
      Set doc2 =New NotesDocument (db)
      doc2.form = "xx"
      doc2.ma = f2
      
      Dim aut2  As String
      aut2 = "[Konfig]"
      Dim authorsitem2 As New NotesItem(doc2, "autor", aut2, AUTHORS)
      
      Call doc2.ComputeWithForm(True, False)
      Call doc2.save(True,False)
   End If

und so weiter...

Das geht bestimmt eleganter ??

koehlerbv:
NotesDocument.GetItemValue erlaubt die Angabe des auszulesenden Items durch eine Variable. Du brauchst tatsächlich also nur eine einzige Schleife.
Die Itemnamen kannst Du in ein Array packen oder ggf. "errechnen", wenn die Dinger wirklich "Feld1", "Feld2", ... heissen.

Bernhard

atbits:
Eine eigene Funktion und eine Schleife?
Die Frage nach dem Sinn für jeden Feldwert immer ein Dokument zu schreiben stellt sich irgendwie aber auch.

Grüße David

eknori:
Sollte dann etwa so gehen

const AUTH = "[Konfig]"
Dim retVal as Variant
Dim i as integer
For i = 1 to 30
  if Trim(doc.GetItemValue("Feld" &cstr(i))(0)) <> "" then
      Set newdoc =New NotesDocument (db)
      newdoc.form = "xx"
      newdoc.ma = "Feld" & cstr(i)
      Dim authorsitem As New NotesItem(newdoc, "autor", AUTH, AUTHORS)
      Call newdoc.ComputeWithForm(True, False)
      Call newdoc.save(True,False)
  end if
next 

Wilhelm Weber:
Der Ansatz hilft mir schonmal wesentlich weiter.

Der Sinn der ganzen Sache ist für jeden Tag im Monat ein einzelnes Dokument in eine Klaenderansicht zu bringen.

dazu müsste noch ein Startdatum gesetzt werden durch Auslesen des aktuellen Monats und Jahr.
Der Tag entspricht dann dem Feld.

Sprich Feld1 sollte am ersten Tag des Monats einen Eintrag erzeugen.

Kann man das auch variabel lösen.

Sorry, ist mein 2. Post bin noch sehr neu in der Thematik..

Grüße
Wilhelm

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln