Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: chock am 04.12.03 - 11:12:01

Titel: Felder automatisch anlegen
Beitrag 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?
Titel: Re:Felder automatisch anlegen
Beitrag von: mahonri am 04.12.03 - 11:17:11
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)

Titel: Re:Felder automatisch anlegen
Beitrag von: Glombi am 04.12.03 - 11:17:29
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
Titel: Re:Felder automatisch anlegen
Beitrag von: chock am 04.12.03 - 11:25:13
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.
Titel: Re:Felder automatisch anlegen
Beitrag von: Gandhi am 04.12.03 - 11:29:31
Fürchte, das wird nicht gehen.
Titel: Re:Felder automatisch anlegen
Beitrag von: Gandhi am 04.12.03 - 11:30:24
Also ohne die Buttons könntest Du es mit einer embedded view versuchen.
Titel: Re:Felder automatisch anlegen
Beitrag von: Glombi am 04.12.03 - 11:36:14
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
Titel: Re:Felder automatisch anlegen
Beitrag von: mahonri am 04.12.03 - 11:41:53
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)

Titel: Re:Felder automatisch anlegen
Beitrag von: chock am 04.12.03 - 11:51:48
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?
Titel: Re:Felder automatisch anlegen
Beitrag von: Gandhi am 04.12.03 - 11:57:41
über formula:
field xyz:=....
oder @setfield("feldname";wert)

Über script
via uidocument:
uidoc.fieldsettext("feldname",wert)

via document:
doc.appendItemValue("feldname",wert)
Titel: Re:Felder automatisch anlegen
Beitrag von: Glombi am 04.12.03 - 12:37:28
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
Titel: Re:Felder automatisch anlegen
Beitrag von: chock am 04.12.03 - 14:46:30
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?
Titel: Re:Felder automatisch anlegen
Beitrag von: Gandhi am 04.12.03 - 14:51:52
kannst Du automatisieren:
...
dim feldname as string
for i=1 to....
feldname="hallo_"&str(i)
call doc.replaceitemvalue(feldname,wert)
...
Titel: Re:Felder automatisch anlegen
Beitrag von: Glombi am 04.12.03 - 15:01:33
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
Titel: Re:Felder automatisch anlegen
Beitrag von: chock am 04.12.03 - 15:31:02
Danke für die schnelle Hilfe