Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Wilhelm Weber am 04.02.09 - 12:14:00

Titel: Optimierung Lotus Script
Beitrag von: Wilhelm Weber am 04.02.09 - 12:14:00
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 ??
Titel: Re: Optimierung Lotus Script
Beitrag von: koehlerbv am 04.02.09 - 12:16:29
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
Titel: Re: Optimierung Lotus Script
Beitrag von: atbits am 04.02.09 - 12:19:01
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
Titel: Re: Optimierung Lotus Script
Beitrag von: eknori am 04.02.09 - 12:37:48
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 
Titel: Re: Optimierung Lotus Script
Beitrag von: Wilhelm Weber am 04.02.09 - 12:44:06
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
Titel: Re: Optimierung Lotus Script
Beitrag von: koehlerbv am 04.02.09 - 12:47:40
Der Sinn der ganzen Sache ist für jeden Tag im Monat ein einzelnes Dokument in eine Klaenderansicht zu bringen.

Und wozu brauchst Du dazu 31 Felder??

Bernhard
Titel: Re: Optimierung Lotus Script
Beitrag von: Wilhelm Weber am 04.02.09 - 13:15:39
weil z.B. Sonntags keine Einträge gemacht werden sollen und sich hinter jedem tag je nach Verfügbarkeit andere werte zur Auswahl ergeben.
Titel: Re: Optimierung Lotus Script
Beitrag von: DAU-in am 04.02.09 - 15:31:05
im Script den Wochentag abfragen ?? ??  :o
Titel: Re: Optimierung Lotus Script
Beitrag von: Wilhelm Weber am 05.02.09 - 08:28:52
erstmal Danke an alle !!

Hab eine für mich gute Lösung zusammenbekommen..

Const AUTH = "[Konfig]"
   
   Dim i As Integer
   For i = 1 To 31
      If Trim(doc.GetItemValue("F" &Cstr(i))(0)) <> "" Then
         Set newdoc =New NotesDocument (db)
         newdoc.form = "xx"
         
         If i > 9 Then
            newdoc.startdatum = Cdat( Cstr(i) & "." & doc.GetItemValue("mon")(0) & "." & doc.GetItemValue("jahr")(0))
         Else
            newdoc.startdatum = Cdat( "0" &Cstr(i) & "." & doc.GetItemValue("mon")(0) & "." & doc.GetItemValue("jahr")(0))
         End If
         
         newdoc.ma = doc.GetItemValue("F" &Cstr(i))(0)
         Dim authorsitem As New NotesItem(newdoc, "autor", AUTH, AUTHORS)
         Call newdoc.ComputeWithForm(True, False)
         Call newdoc.save(True,False)
      End If
   Next 

Damit läuft es einwandfrei..
Titel: Re: Optimierung Lotus Script
Beitrag von: Thomas Schulte am 05.02.09 - 16:54:47
Ich will dir deine Lösung ja nicht verhageln, aber wie schaut es mit Feiertagen, dem Wechsel der AnzahlTage pro Monat und Schaltjahren aus?
Titel: Re: Optimierung Lotus Script
Beitrag von: koehlerbv am 05.02.09 - 17:04:49
Feiertage oder Schaltjahre sind ja gar nicht notwendig - was passiert mit einem Eintrag für den 31. April 2009?

Wilhelm, ich glaube, Du rennst hier mit einer scheinbar funktionierenden Lösung in einen unstatthaften Holzweg. Wenn Du uns beschreibst, was Du *eigentlich* erreichen willst, geben wir Dir sehr gerne Tipps, die Dir bestimmt auch in er Zukunft helfen werden. Derzeit erscheint es aber so, dass man nur sagen kann: "So kann das nix werden!".

Bernhard
Titel: Re: Optimierung Lotus Script
Beitrag von: Wilhelm Weber am 06.02.09 - 21:54:56
Danke für eure Einwände..

Ich fange die Problematik dadurch ab, dass  in der Eingabemaske ein Eintrag für ein nicht
existierendes datum ( 31.4 oder 29.02.2009) deshalb nicht möglich ist, da das Feld  für dieses datum (wenn @weekday -1 ergibt) ausgeblendet wird.

Vlt. nicht elegant, aber es klappt.

Grüße
Wilhelm

P.S. Versuche immer gut zu beschreiben, wenn es manchmal nicht funktioniert... Sorry !!

Titel: Re: Optimierung Lotus Script
Beitrag von: koehlerbv am 06.02.09 - 22:47:28
Ich mag jetzt gar nicht mehr wissen, warum Du nun wirklich diese Maske mit den 31 Feldern brauchst, denn auch dabei wirst Du Dir etwas denken. Das Abfangen ungültiger Tage löst Du auf jeden Fall elegant  :)

Ich freue mich auf weitere Fragen von Dir, Wilhelm.

Bernhard