Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet 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 ??
-
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
-
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
-
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
-
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
-
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
-
weil z.B. Sonntags keine Einträge gemacht werden sollen und sich hinter jedem tag je nach Verfügbarkeit andere werte zur Auswahl ergeben.
-
im Script den Wochentag abfragen ?? ?? :o
-
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..
-
Ich will dir deine Lösung ja nicht verhageln, aber wie schaut es mit Feiertagen, dem Wechsel der AnzahlTage pro Monat und Schaltjahren aus?
-
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
-
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 !!
-
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