Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: sja am 13.07.05 - 18:33:43
-
Hallo @All,
werde sehr dankbar für einen Rat.
In einer Datenbank soll ein Agent laufen, der die Email an bestimmte User generiert und die Email solle dynamische Tabelle erhalten. Die Tabelle soll eine Coollektion von Dokumenten aus der Datenbank anzeigen, damit meine ich die Spalten, wo die Werte von bestimmten Feldern aus dem Dokument und in einer von Spalten die Verknüpfung zur Dokument angezeigen sollen.
Als erste Möglichkeit sehe ich das NotesRichTextTable class. Habe noch nie gemacht und möchte ausprobieren
Ausserdem überlege ich die zweite Möglichkeit, ob man kann eine Tabelle mit HTML-Code erstellen. Wenn ich das richtig verstehe kann man mit
...
Dim richText As New NotesRichTextItem(doc, "Body")
richStyle.PassThruHTML = True
und dann
Call richText.AppendStyle(richStyle)
Call richText.AppendText("<table>")
dann in einer Schleife auch mit Call richText.AppendText
<tr diverse Optionen...> Start neue Zeile
<td diverse Optionen...> Start neue Spalte in neuer Zeile
Hier steht der Inhalte der 1.ten Spalte
</td> Ende neue Spalte in Zeile
<td diverse Optionen...> Start neue Spalte in neuer Zeile
Hier steht der Inhalte der 2.ten Spalte
</td> Ende neue Spalte in Zeile
</tr> Ende neue Zeile
...
Call richText.AppendText("</ table>")
eine dynamische Tabelle generieren.
Möchte gerne wissen, ob die zweite Variante überhaupt möglich ist, oder verstehe ich das alles falsch.
Wenn jemand hat eine Erfahrung mit HTML in LotusScript, wäre sehr nett, wenn es mitgeteilt würde.
Vielen Dank schon voraus für jeden Rat, Typ etc.
Schöne Gruesse
Sofia
-
Ich glaub nicht, dass das so eine gute Idee ist, v.a. wenn das komplexeres HTML sein soll.
Wie jede GUI-Library, die ich kenne, sind die Html Fähigkeiten der Notes Richtext Klasse beschränkt (ist bei swing.text.html aber auch nicht besser).
Es müsste eine bessere Lösung geben, ich weiss aber nicht wie.
Axel
-
Hallo Axel,
danke Dir für Hilfe.
Dann fange ich mit NotesRichTextTable class an.
Da die beide Richtungen sind für mich neue Gebite, wusste ich nicht mit welcher anzufangen, deshalb möchte ich gerne hörwn, was die erfahrene Leute dazu sagen
Noch Mal vielen Dank.
Schöne Gruesse
Sofia
-
Hallo Sofia,
ich habe sowas schonmal gemacht. Ein Agent sendet eine Mail mit einer Tabelle an einen User. Vielleicht hilft Dir dieser Code Schnipsel weiter (Tabelle mit 4 Spalten):
Dim rtItem as NotesRichTextItem
Dim rtnav As NotesRichTextNavigator
Set rtnav = rtItem.CreateNavigator
Set doc = view.getFirstDocument
While not (doc is Nothing)
Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL)
Call rtItem.BeginInsert(rtnav)
Call rtItem.AppendText(doc.Feld1(0))
Call rtItem.EndInsert
Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL)
Call rtItem.BeginInsert(rtnav)
Call rtItem.AppendText(doc.Feld2(0))
Call rtItem.EndInsert
Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL)
Call rtItem.BeginInsert(rtnav)
Call rtItem.AppendText(doc.Feld3(0))
Call rtItem.EndInsert
Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL)
Call rtItem.BeginInsert(rtnav)
Call rtItem.AppendText(doc.Feld4(0))
Call rtItem.EndInsert
Set doc = view.getNextDocument(doc)
Wend
Gruß
Stefan
-
Hallo Stefan,
es ist sehr nett, dass Du hier Deine Code zur Verfügung stellst.
Es ist immer schwer was neues anzufangen und solche Bsp. ist schon reiche Hilfe. Ich probiere es.
Ich habe mir auch schon das
http://joelitton.net/A559B2/home.nsf/plinks/JLIN-677398
angeschaut. Für einen Anfang relativ kompliziert.
Also, ich habe jetzt was damit zu tun.
Die Ergebnisse teile ich mit.
Danke schön und viele Gruesse
Sofia
-
Hallo @All,
also, habe ich die Code von
Joe Litton - http://joelitton.net
http://joelitton.net/A559B2/home.nsf/plinks/JLIN-677398
in meinem Agent verwendet (s. Anhang).
Es funktioniert hervorragend, aber ich habe in meinem Agent noch zwei Probleme.
1.
In der Spalte 10 soll den Wert von Stundenanzahl angezeigt werden
s. in dem Anchang die Function populateTable() As Integer
....
Case 10
Call body.AppendText(doc.Stunden(0))
‘tmp_Stunden =Csng( doc.Stunden(0) )
‚Call body.AppendText( tmp_Stunden )
….
Es wird ja angezeigt, aber in den Fällen, wo ganze Teil = 0 ist, wird z.B. statt des Wertes 0,33 den Wert ,33 angezeigt! (s. die Tabelle in dem anhang Spalte „Dauer“)
2.
in dem Script benutze ich eine Ansicht, die die Dokumente enhält, die in der Tabelle kommen sollen. Der Report soll nur am Mongag erzeugt werden. In der Ansicht sollen nur die Dokumente angezeigt werden, die in dem Feld „datum“ den Wert haben, der in der der Zeitraum liegt vom
datum < @ToDay
bis
zurück zum Zeitpunkt vom 1.ten des Monats bis zum dem Montag vorhergehende Woche.
D.h wenn der Monat z.B Juli ist (fängt mit KW 26 an) und der Montag, an dem der Report erzeugt wird, der 25te ist (=KW 30), dann sollen die Kalenderwochen 26 bis 29 angezeigt werden.
Jahr := @Year(@Today);
Monat :=@Month(@Today);
Datum := @Date(Jahr;Monat;1);
Tag := @Weekday(Datum );
Datum1 := @If( Tag = 2; Datum ; Tag = 3; @Adjust(Datum ;0;0;-1;0;0;0) ; Tag = 4; @Adjust(Datum ;0;0;-2;0;0;0) ; Tag = 5; @Adjust(Datum ;0;0;-3;0;0;0) ; Tag = 6; @Adjust(Datum ;0;0;-4;0;0;0) ; Tag = 7; @Adjust(Datum ;0;0;-5;0;0;0) ; @Adjust(Datum ;0;0;-6;0;0;0));
Datum2 := @Adjust(@Now;0;0;-1;0;0;0);
SELECT Form = "awn" & (@Date(datum)>= @Date(Datum1)) & (@Date(datum)< @Today)
Ich habe in der ansicht zusäzlich Spalte erzeigt, die zeigt
Jahr := @Year(@Today);
Monat :=@Month(@Today);
Datum := @Date(Jahr;Monat;1);
Tag := @Weekday(Datum );
Datum1 := @If( Tag = 2; Datum ; Tag = 3; @Adjust(Datum ;0;0;-1;0;0;0) ; Tag = 4; @Adjust(Datum ;0;0;-2;0;0;0) ; Tag = 5; @Adjust(Datum ;0;0;-3;0;0;0) ; Tag = 6; @Adjust(Datum ;0;0;-4;0;0;0) ; Tag = 7; @Adjust(Datum ;0;0;-5;0;0;0) ; @Adjust(Datum ;0;0;-6;0;0;0));
Datum1
Genau den richtigen Wert = 27.06.2005
Aber die Auswahlformul zeig alle Dokumente, die auch älter sind als 27.06.2005
Für jede Hilfe Danke sehr im Voraus
Schöne Gruesse
Sofia
-
Zu Frage 1: Du kannst dafür eine eigene Function schreiben - oder die Format$-Funktion von LS verwenden. Hier also:
Call body.AppendText(Format$ (doc.Stunden(0), "0.00"))
Bernhard
-
Zu Deiner 2. Frage: In Deiner Ansichtsauswahl beziehst Du Dich auf die beiden Variablen Datum und Datum1, die Du vorher in Deiner Formel berechnet hast. Ich finde jedoch keinen Bezug zu einem Datumsfeld aus den Dokumenten, die Du prüfen willst. Das heisst dann, dass die Ansichtsauswahl nur noch auf das Form-Feld beschränkt ist - Dir werden also alle Dokumente angezeigt. Wenn Dein Feld in den Dokumenten auch Datum heisst, so überschreibst Du dieses (intern, temporär) mit
Jahr := @Year(@Today);
Monat :=@Month(@Today);
Datum := @Date(Jahr;Monat;1);
Bernhard
-
Hallo Bernhard,
Du bist eine Perle! Ich finde keine richtigen Wörter, um meine Dankbarkeit völlig auszudrücken.
Jetzt alles funktioniert!
Zu Frage 1
das war für mich sehr wichtige Info, ich wusste nichts über Format$-Funktion. Herzlichen Dank!
Zu Frage 2
Das Feld heisst "datum", die Variable heisst "Datum". Habe gedacht dass es case sensitive ist. Aber das ist wohl nur in LS und nicht in der Formelsprache.
Habe die Variable anders genannt und alles läuft ohne Problem!
Schöne Gruesse und noch Mal herzlichen Dank!
Sofia
-
Hallo Sofia,
ich habe es eben einfach nur gewusst :) Nur bei der Auswahlformel musste ich etwas länger schauen, wo da der Hase im Pfeffer lag (bis es dann eindeutig wurde). Ich freue mich jedenfalls sehr, dass ich Dir helfen konnte. Und Dir gebührt auf jeden Fall ein ganz besonderes Lob für Deine hervorragenden Problembeschreibungen - die Suche nach einer Lösung wird dadurch derart erleichtert, dass sich manch anderer daran dringend eine Scheibe abschneiden sollte. Wenn man dann noch weiss, dass Du zusätzlich mit der deutschen Sprache (noch) mehr Mühen hast als ein hier geborener ...
Eine Anmerkung noch: Auch LS reagiert nicht sensitiv auf Gross- und Kleinschreibung, weder beim Zugriff auf Items noch bei eigenen Variablendeklarationen. Leider oder glücklicherweise - ich bin da durchaus gespaltener Meinung.
Ein schönes Restwochenende wünscht
Bernhard
-
Oh, vielen Dank, Bernhard, für die Anmerkung!
Es ist sehr wichtig zu wissen.
Und Du hast ja Recht, es ist mir manch Mal unheimlich schwer, mich richtig auf deutsch auszudrücken, deshalb bin ich besonders dankbar für Euro Verständnis und Geduld.
Ich bin nie müde, es zu wiederholen:
ich liebe dieses Forum!
Ihr seid so nett und habt mir schon so viel geholfen!
Herzlichen Dank und liebe Gruesse
Sofia
-
Sofia, ich will jetzt hier nicht anfangen, mit Komplimenten um mich zu werfen, aber: Was die Sprachfähigkeit angeht, geht das Lob an DICH. Und wir sind dankbar, dass Du so klar formulieren kannst. Und ich ahne, wie schwer das manchmal ist. Du könntest mit ja auch in Deiner Muttersprache schreiben, ich bin mir aber ganz sicher, dass ich mit grossem Abstand nicht so antworten könnte wie Du das auf deutsch machst ;)
Und nochmals: Wenn die Frage klar formuliert ist, fällt es um Grössenordnungen leichter, eine Antwort zu geben (so man diese auch weiss). Auch in dieser Sache geht das Lob an Dich.
Ihr seid so nett und habt mir schon so viel geholfen!
Da gibt es ein gutes Sprichwort: "So, wie man in den Wald hineinruft, so schallt es auch wieder heraus." ;)
Bernhard
-
Hallo,
vielen Dank, Bernhard, für nette Wörter. Und das Sprichwort klingt auf russisch so: "Kak auknitssa tak i otkliknitssa". :)
Aber ich habe noch eine Frage. Habe in dem NotesRichTextParagraphStyle Claas nicht gefunden, wie kann ich in einer Zelle linken Abstand (horizontalen Abstand) machen. Habe auch in Internet Recherche gemacht und auch nichts. Wenn jemand mir dabei helfen würde.
Vielen Dank im Voraus!
Schöne Gruesse
Sofia
-
Das ist die LeftMargin property. Zu beachten ist, dass man die vorgegebenen Constants auch mit arithmetischen Operationen verwenden kann.
Bernhard
-
Hallo Bernhard,
Danke schön für Deine Hilfe.
Habe auch so gedacht, aber bei mir funktionier das nicht.
Ich habe so gemacht:
Dim tableColStyles(1 To 12) As NotesRichTextParagraphStyle
...
...
Case 2
tableColStyles(i).LeftMargin = RULER_ONE_CENTIMETER * 0.2
tableColStyles(i).RightMargin = RULER_ONE_CENTIMETER * 3
...
und habe erwartet dass den Abstand = 2 mm wird, aber bei mir funktioniert nicht.
Was mache ich falsch?
Danke im Voraus
Sofia
-
Ich habe lange nichts mehr "extraordinäres" mit der RichtTextParagraphStyle gemacht, aber bezog sich der veränderte Rand immer relativ zum "Standardrand" von 1 Zoll ? Ggf. müsstest Du also auch mit negativen Werten arbeiten.
Bernhard
-
leider ist es alles für mich nicht ganzklar: wo wird "Standardrand" fest gestellt und wo und wie sonn negative Werte verwndet werden?
die Code für die Tabelle sehen so aus:
Dim color As NotesColorObject
Dim columnHeader(12) As String
Dim tableColStyles(1 To 12) As NotesRichTextParagraphStyle
columnHeader(1) = "Link" ' Initialize column header values
columnHeader(2) = "Projekt"
columnHeader(3) = "Bereich"
columnHeader(4) = "Vorgang"
columnHeader(5) = "Stufe"
columnHeader(6) = "Ort"
columnHeader(7) = "Datum"
columnHeader(8) = "von"
columnHeader(9) = "bis"
columnHeader(10) = "Dauer"
columnHeader(11) = "MA"
columnHeader(12) = "Tätigkeit"
' Populate the array of NotesRichTextParagraphStyle - one array element (one NotesRichTextParagraphStyle) for each column.
For i = 1 To COLUMN_COUNT Step 1
Set tableColStyles(i) = session.CreateRichTextParagraphStyle ' Create the rt paragraph style for this column
tableColStyles(i).FirstLineLeftMargin = 0 ' Set left margin for the first line of each cell in column
tableColStyles(i).LeftMargin = 0 ' Set left margin for all but the first line of each cell in column
Select Case i
Case 1
tableColStyles(i).RightMargin = RULER_ONE_CENTIMETER * 0.7
tableColStyles(i).Alignment = ALIGN_CENTER
Case 2
tableColStyles(i).LeftMargin = RULER_ONE_CENTIMETER * 0.2
tableColStyles(i).RightMargin = RULER_ONE_CENTIMETER * 3
Case 3
tableColStyles(i).LeftMargin = RULER_ONE_CENTIMETER * 0.2
tableColStyles(i).RightMargin = RULER_ONE_CENTIMETER * 2
Case 4
tableColStyles(i).RightMargin = RULER_ONE_CENTIMETER * 4
Case 5
tableColStyles(i).LeftMargin = RULER_ONE_CENTIMETER * 0.2
tableColStyles(i).RightMargin = RULER_ONE_CENTIMETER * 3
Case 6
tableColStyles(i).RightMargin = RULER_ONE_CENTIMETER * 1
tableColStyles(i).Alignment = ALIGN_CENTER
Case 7
tableColStyles(i).RightMargin = RULER_ONE_CENTIMETER * 2
tableColStyles(i).Alignment = ALIGN_CENTER
Case 8
tableColStyles(i).RightMargin = RULER_ONE_CENTIMETER * 1
tableColStyles(i).Alignment = ALIGN_CENTER
Case 9
tableColStyles(i).RightMargin = RULER_ONE_CENTIMETER * 1
tableColStyles(i).Alignment = ALIGN_CENTER
Case 10
tableColStyles(i).RightMargin = RULER_ONE_CENTIMETER * 1.5
tableColStyles(i).Alignment = ALIGN_RIGHT
Case 11
tableColStyles(i).RightMargin = RULER_ONE_CENTIMETER * 1
tableColStyles(i).Alignment = ALIGN_CENTER
Case 12
tableColStyles(i).LeftMargin = RULER_ONE_CENTIMETER * 0.2
tableColStyles(i).RightMargin = RULER_ONE_CENTIMETER * 8
End Select
Next
Call body.AppendTable( totalRows, COLUMN_COUNT,,, tableColStyles)
Set rtNav = body.CreateNavigator
Call rtNav.GetFirstElement(RTELEM_TYPE_TABLE)
Set rtTable= rtNav.GetElement
rtTable.Style = TABLESTYLE_TOP
Set color = session.CreateColorObject ' Create color object for use in setting cell colors
color.NotesColor = COLOR_LIGHT_GRAY
Call rtTable.SetColor( color ) ' Set the top row color to light gray background
color.NotesColor = COLOR_WHITE
Call rtTable.SetAlternateColor( color ) ' Set all rows after the top row to white background
Call rtNav.FindFirstElement( RTELEM_TYPE_TABLECELL ) ' Move to the first cell - row 1, col 1
Call body.AppendStyle( rtHelv8_Black_Bold ) ' Set the font to Helvetica, 8-point, bold black
For col = 1 To COLUMN_COUNT Step 1
Call body.BeginInsert( rtNav )
Call body.AppendText( columnHeader(col) ) ' Write the text for this column's header
Call body.EndInsert ' Move insertion point to the end of this cell
Call rtNav.FindNextElement( RTELEM_TYPE_TABLECELL ) ' Move to the next cell
Next
Danke schön
Sofia
-
Wo weist Du eigentlich den Style Deinem RTI zu ? Hier fehlt doch noch sowas wie
Call richText.AppendParagraphStyle(rtpStyle)
... oder ich habe es übersehen ... ;)
Bernhard
-
Hallo Bernhard,
da ich NotesRichTextParagraphStyle noch nie verwendet habe (das ist meine erste Erfahrung), ehrlich zu sagen, weiss ich nicht wo sollte das kommen. Da ich nur der Code von Joe Litton - http://joelitton.net angepasst habe, und da ist Call richText.AppendParagraphStyle(rtpStyle) nicht zu finden, verstehe ich auch nicht wo und wie das kommen sollte.
Habe versucht folgendes
For i = 1 To COLUMN_COUNT Step 1
Set tableColStyles(i) = session.CreateRichTextParagraphStyle
Call Body.AppendParagraphStyle(tableColStyles(i))
tableColStyles(i).FirstLineLeftMargin = 0 tableColStyles(i).LeftMargin = 0
ohne Erfolg, es sieht schreklich aus. ???
Man kann natürlich ohne diesen Abstand überleben, da alles anderes OK ist.
Aber, wenn trotzdem es wird mir damit geholfen, werde ich riesig dankbar :)
Den ganzen Code findet man in dem Anhang
http://www.atnotes.de/index.php?PHPSESSID=9f5687d90685229a7f2b1cddbb9c1315&action=dlattach;topic=24293.0;id=2642
Vielen Dank und schöne Gruesse
Sofia
-
Sorry Sofia, ich habe übersehen, dass das ja bereits AppendTable übernimmt ...
Ich muss mal schauen, ob ich dem Problem näherkommen kann.
Bernhard
-
vielen Dank, Bernhard,
man kann natürlich damit leben, da es nur Schönheits-Sache ist, aber trotzdem es wäre gut, das zu beherrschen. Ich habe alles versucht, aber es ist für mich noch zu hoch :)
Also, herzlichen Dank für die Hilfe und liebe Gruesse
Sofia