Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: chock am 04.12.03 - 11:12:01
-
Hallo,
ich möchte aus einem View, der nach Abteilungen kategorisiert ist, die Mitarbeiter in eine Tabelle eintragen. D.h. nach der Auswahl der Abteilung sollen alle Mitarbeiter in diese Tabelle geschrieben werden.
Da die Anzahl immer verschieden ist, ist jetzt meine Frage, kann ich es realisieren das benötigte Felder in dieser Tabelle automatisch angelegt werden?
-
Warum machst du das nicht mit einem Mehrfachwerte-Feld.
Einem für alle Werte (Verborgen durch das Auslesen gefüllt) und für jede Spalte eins (berechnet zur Anzeige)
-
Was meinst Du mit Tabelle? Handelt es sich um eine Tabelle in einem Notesdokument, welches vorhanden ist/neu erstellt werden soll oder um einen Export nach Excel/Lotus 1-2-3 ???
[Kaffeesatzlesen]
Du willst eine dynamische Tabelle in Notes machen !?
[/Kaffeesatzlesen]
Andreas
-
Es handelt sich um eine Tabelle in einem anderem Notesdokument.
Im Moment werden die Mitarbeiter einzeln ausgewählt.
Eine dynamische Tabelle wäre genau das Richtige.
-
Fürchte, das wird nicht gehen.
-
Also ohne die Buttons könntest Du es mit einer embedded view versuchen.
-
Das hatten wir bereits öfter hier im Forum. Es geht nur (wenn es eine reine Notes Anwendung und keine Web Anwendung ist) nur "halbdynamisch".
Du kannst sagen wir mal 50 Zeilen in der Tabelle vorsehen, mit Verbergenformeln aber nur Die anzeigen, deren Felder gefüllt sind.
Andreas
-
Wenn mann die Spaltenbreite kennt kann man wie schon beschrieben alle Informationen in ein Feld packen
Die Darstellung läuft dan über zur Anzeige berechnete Felder die Jeweils nur eine Spalte repräsentieren und die Mehrfachwerte zeilenweise dastellen.
Grenzen
64K
Spaltenbreite (kann man aber auch durch @Left begrenzen)
-
Also d.h. ich erweitere meine Tabelle z.B. um 20 Zeilen, muss für jede Zeile Felder vorsehen und dann die über verbergen die nicht gefüllten Felder ausblenden.
Nur wie kann ich mir die Felder füllen lassen? Über DbLookup geht es nicht?
-
über formula:
field xyz:=....
oder @setfield("feldname";wert)
Über script
via uidocument:
uidoc.fieldsettext("feldname",wert)
via document:
doc.appendItemValue("feldname",wert)
-
Ich würde die Felder mit einen Index als Suffix versehen, also bspw.
Mitarbeiter_1 Antwort_1
Mitarbeiter_2 Antwort_2
... ... ...
Mitarbeiter_20 Antwort_20
Du markierst die Mitarbeiter in der View und klickst dann auf den Button. Der Button ist in Script programmiert.
Die gewählten Dokumente bekommst Du als Collection. Darüber dann iteriere
dim ... das übliche...
dim dc as NotesDocumentCollection
dim i as integer
set ... das übliche
set dc = db.UnprocessedDocument
... set doc ... irgendwie beschaffen
set dcdoc = dc.GetFirstDocument
for i = 1 to dc.Count
doc.ReplaceItemvalue("Mitarbeiter_" & cstr(i), dcdoc.Name(0) )
next
set dcdoc = dc.GetDocDocument(dcdoc)
Die Verbergenformel für die beiden Felder in Zeile i müssten dann lauten: Verbergen wenn Formel wahr =
Mitarbeiter_i = ""
Andreas
-
Habe jetzt mal so gemacht. In der Maske mit der Tabelle einen Button mit folgendem Script angelegt.
Dim session As New NotesSession
Dim ws As New NotesUIWorkspace
Dim db As NotesDatabase
Dim view As NotesView
Dim doc As NotesDocument
Dim uidoc As NotesUIDocument
Dim aktdoc As NotesDocument
Dim tmp,tmp1 As Variant
Set db = session.CurrentDatabase
Set view = db.GetView("Mitarbeiter")
Set uidoc = ws.currentdocument
Set aktdoc = uidoc.document
tmp = aktdoc.GetItemValue("t_abt")
Set doc = view.GetFirstDocument
While Not(doc Is Nothing)
tmp1=doc.GetItemValue("abteilung")
If (tmp(0) = tmp1(0)) Then
aktdoc.t1=doc.n_name(0) + " " + doc.v_name(0)
End If
Set doc = view.GetNextDocument(doc)
Wend
aktdoc.t1 ist die erste Tabellenzeile.Die Felder in der Tabelle gehen bis t20.
Muss ich jetzt jedes feld angeben, oder kann ich dies automatisieren, das er wenn Feld t1 gefüllt ist ins Feld t2 springt usw?
-
kannst Du automatisieren:
...
dim feldname as string
for i=1 to....
feldname="hallo_"&str(i)
call doc.replaceitemvalue(feldname,wert)
...
-
Ich hatte es bereits in meinem Codefragment so:
doc.ReplaceItemvalue("t_" & cstr(i), doc.n_name(0) + " " + doc.v_name(0)
)
Dim session As New NotesSession
Dim ws As New NotesUIWorkspace
Dim db As NotesDatabase
Dim view As NotesView
Dim doc As NotesDocument
Dim uidoc As NotesUIDocument
Dim aktdoc As NotesDocument
Dim tmp,tmp1 As Variant
dim i as integer
Set db = session.CurrentDatabase
Set view = db.GetView("Mitarbeiter")
Set uidoc = ws.currentdocument
Set aktdoc = uidoc.document
tmp = aktdoc.GetItemValue("t_abt")
Set doc = view.GetFirstDocument
i = 1
While Not(doc Is Nothing)
tmp1=doc.GetItemValue("abteilung")
If (tmp(0) = tmp1(0)) Then
call aktdoc.ReplaceItemValue("t" &cstr(i),doc.n_name(0) + " " + doc.v_name(0))
End If
Set doc = view.GetNextDocument(doc)
i = i + 1
Wend
Andreas
-
Danke für die schnelle Hilfe