Autor Thema: Daten aus Collection in ein Richtext schreiben  (Gelesen 2723 mal)

Offline Greenthumb

  • Frischling
  • *
  • Beiträge: 17
  • Ich liebe dieses Forum!
Daten aus Collection in ein Richtext schreiben
« am: 02.12.03 - 11:38:03 »
Hallo,
Ich möchte in einer Maske Daten aus mehreren Masken zu einem Kunden zeigen.
Erst werden die Daten aus vorhandenen Dokument gelesen (unprocessedDocuments) und in die Zielmaske geschrieben.

Sub Initialize
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim ws As New NotesUIWorkspace
   Dim collection As NotesDocumentCollection
   
   Set db = session.CurrentDatabase
   Set collection = db.UnprocessedDocuments
   
   Dim coldoc As NotesDocument
   Set coldoc = collection.GetFirstDocument
   
' Daten lesen aus der Sales-Maske...
   coldocid = coldoc.UniversalID
   firma = coldoc.GetItemValue("firma")(0)
   salesnum = coldoc.GetItemValue("salesnum")(0)
   status = coldoc.GetItemValue("status")(0)
                ...

'Daten in  Zielmaske schreiben....   
   Dim doc As NotesDocument
   Set doc= db.CreateDocument
   doc.Form = "SchnellInfo-sdoc"
   doc.salesdocid= coldocid
   doc.firma = firma
   doc.salesnum = salesnum
   doc.status = status
   ...


Dann sollen 3 nächsten ToDo für den markierten Kunden aus der Maske "ToDo" ausgelesen werden (das funktioniert auch)   


   Dim collection1 As NotesDocumentCollection
   SSTR = "FORM = ""ToDo"" & firma = """ + firma + """ & salesnum = """ + salesnum + """"
   Set collection1 = db.Search(SSTR, Nothing, 0)
   
   For I=1 To collection1.Count      
      
      Dim doc1 As NotesDocument
      Set doc1 = collection1.GetNthDocument(I)
      ansprpart = doc1.GetItemValue ("ansprpart")
      ...
      
Und hier habe ich mein Problem: ich will jetzt die ausgelesenen Informationen aus der Kollektion in die entsprechenden RichTextFelder schreiben (um die vorherigen Werte der Collection nicht zu überschreiben), was aber nicht  funktioniert

      Dim item As NotesItem
      Set item = doc.GetFirstItem("ansprpart")
      Call item.AppendToTextList (ansprpart)
                                ...
   Next
   
'Document anzeigen   
   Call ws.EditDocument (False , doc, False)
   
End Sub

Debugger hängt an der Zeile Call.item.AppendToTextList... mit der Fehlermeldung: "Object variable not set" obwohl alles initialisiert ist. Könnt ihr mir sagen wo ich Fehler mache oder wie ich es lösen kann?

Vielen Dank!

Glombi

  • Gast
Re:Daten aus Collection in ein Richtext schreiben
« Antwort #1 am: 02.12.03 - 13:58:32 »
Das
  Set item = doc.GetFirstItem("ansprpart")

geht nicht, da das Feld  "ansprpart" vorher nie gesetz wurde. Also weiter oben
doc.firma = firma
   doc.salesnum = salesnum
   doc.status = status
doc.ansprpart = ""              'Item initialisieren

Und dann noch
ansprpart = doc1.GetItemValue ("ansprpart")

durch
ansprpart = doc1.GetItemValue ("ansprpart")(0)
ersetzen, sonst hast Du keinen String.

oder - falls es ein Variant sein muss -
Call item.AppendToTextList (ansprpart(0))


Andreas

Offline Greenthumb

  • Frischling
  • *
  • Beiträge: 17
  • Ich liebe dieses Forum!
Re:Daten aus Collection in ein Richtext schreiben
« Antwort #2 am: 02.12.03 - 14:19:22 »
Vielen, vielen Dank Glombi!
Ich habe das übersehen, jetzt funktioniert`s!

Offline Greenthumb

  • Frischling
  • *
  • Beiträge: 17
  • Ich liebe dieses Forum!
Re:Daten aus Collection in ein Richtext schreiben
« Antwort #3 am: 02.12.03 - 17:28:22 »
Hallo,
kennt ihr irgendeinen Trick, mit dem ich eine leere Zeile (newline) in NotesItem-Klasse machen kann. Ich schreibe nämlich verschiedene Werte in ein RT-Feld und würde sie gerne mit der leeren Zeile trennen.

Bis jetzt werden alle Einträge in eine Zeile geschreiben :-(

Ich habe schon auch mit NotesRichtTextItem-Klasse versucht, sie weist nämlich die Methode AppendText und AddNewLine auf.
....
Dim item As NotesRichTextItem
Set item = doc.GetItemValue("kontakt1")
Call item.AppendText (thema (0))
Call item.AddNewLine (1)
....

Aber das Problem ist hier, dass die Methode GetFirstItem (s.o.)ein Objekt vom Typ NotesItem zurückliefert, das an eine Objektvariable vom Typ NotesRichTextItem zugewiesen wird. Der Compiler meldet einen Fehler (Type mismatch), weil er nicht weiss, dass tatsächlich ein Objekt vom Typ NotesRichTextItem zurückgegeben wird.

Kennt Ihr Lösungen zu diesem Problem?

Ich bin für alle Antworten sehr dankbar!


Glombi

  • Gast
Re:Daten aus Collection in ein Richtext schreiben
« Antwort #4 am: 02.12.03 - 17:34:48 »
Du musst ein Chr$(13) verwenden:
"Das ist eine Zeile" & chr$(13) & "und das die nächste"

oder war es ein andere ASCII-Code?

Andreas

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Daten aus Collection in ein Richtext schreiben
« Antwort #5 am: 02.12.03 - 17:41:23 »
Um auf Nummer sicher zu gehen: Chr$ (10)
Damit hatte ich noch nie Probleme (auch bei Exports), obwohl es in alten Zeiten ja eigentlich Chr$ (10) & Chr$ (13) heissen musste:
10 = Neue Zeile resp. "Eine Zeile tiefer - bei gleicher CharPos
13 = Zeilenschaltung resp. Zeilenanfang

Bernhard

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:Daten aus Collection in ein Richtext schreiben
« Antwort #6 am: 02.12.03 - 18:06:14 »
Historisches:

Carriage Return / Wagenrücklauf: Chr (13)

war ursprünglich alleine Positionierung des Schreibmaschinenwagens auf die erste Position (Rücklauf, wie der Name sagt, ohne Zeilenschaltung). Wurde schon früh auch für die Zeilenschaltung verwendet, weil das bei der elektrischen Schreibmaschine miteinander gekoppelt war.

Line Feed / Zeilenschaltung: Chr 10

war ursprünglich reine Zeilenschaltung, ohne den Wagen neu zu positionieren. Wenn wir also auf Pos 23 waren, blieb der wagen dort, einfach auf der nächsten Zeile

Anders ausgedrückt: für eine vollständige, saubere neue Zeile müssten theoretisch beide Kontrollzeichen verwendet werden.

Leider ist die Theorie einfach und die Praxis kompliziert.

Wir haben es allgemein mit 4 Zeichensequenzen zu tun, mit denen eine Neue Zeile definiert sein kann, plus noch eine Notes-Spezialvariante:

Allgemein: eine oder mehrere der folgenden Zeichen(kombinationen) können in einer Umgebung als "NewLine" definiert sein, wobei das sowohl vom Betriebssystem als auch von der Applikation abhängig sein kann:

10
13
10 + 13
13 + 10

Manchmal funktionieren mehrere, manchmal funktioniert aber genau eine Variante. Ein regelrechtes Rätselraten, wenn Dateien zwischen unterschiedlichen Plattformen ausgetauscht werden sollen.


Notes-spezifisch: Zum Teil wird von Notes Chr (0) als Zeichen für eine neue Zeile verwendet.
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline Greenthumb

  • Frischling
  • *
  • Beiträge: 17
  • Ich liebe dieses Forum!
Re:Daten aus Collection in ein Richtext schreiben
« Antwort #7 am: 03.12.03 - 10:38:32 »
Hallo!
Vielen Dank für die zahlreichen Antworten. Ich habe verschiedene Kombinationen von Chr(10) und Chr(13) ausprobiert und bekomme jetzt meinen nächsten Eintrag aus der Collection in der nächtsten Zeile aber am ihren Ende, was etwas unstrukturiert in meiner Maske aussieht.
Wie kann ich die Eintrage zum Anfang der Zeile ziehen?

Ich möchte auch die letzten 3 Dokumente aus der Collection in meiner neuen Maske schreiben. Könnt ihr mir ungefähr sagen wie ich das machen kann? Ich habe schon mit GetLastDocument versucht, wusste aber nicht wie ich hier die letzten drei definiren kann. Oder soll ich alle Dokus zählen, dann drei abziehen und die Ordungsnummer an die GetNthDocument übergeben.

Ich hoffe, ich nerve Euch nicht mit meinen Fragen nicht.

Vielen Dank!

Glombi

  • Gast
Re:Daten aus Collection in ein Richtext schreiben
« Antwort #8 am: 03.12.03 - 10:47:10 »
Hi,
poste doch mal etwas Code - so aus der Luft gegriffen ist das eher mühsam.

Generell: Um was in ein Textfeld vorne anzuhängen (wenn es keine Mehrfachwerte sind):
doc.FeldMitText = "Neuer Text" & Chr$(13) &  doc.FeldMitText(0)

Es sei darauf hingewiesen, dass man nicht allzuviel in ein Textfeld schreiben kann - bei 32K ist Finito.

Andreas

Glombi

  • Gast
Re:Daten aus Collection in ein Richtext schreiben
« Antwort #9 am: 03.12.03 - 10:48:44 »
Wenn ich mir den Thread nochmal genau ansehen: Hast Du denn jetzt ein Text- oder ein Rich-Text-Feld ???

Andreas

Offline Greenthumb

  • Frischling
  • *
  • Beiträge: 17
  • Ich liebe dieses Forum!
Re:Daten aus Collection in ein Richtext schreiben
« Antwort #10 am: 03.12.03 - 11:01:56 »
Danke für so schnelle Antwort! Ich habe ein Richtext-Feld (ich will an das Feld letzten 3 Einträge aus Collection anhängen=> wenn ich mich nicht irre ist das in einem Textfeld nicht möglich). Hier mein Code:

Sub Initialize
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim ws As New NotesUIWorkspace
   Dim collection As NotesDocumentCollection
   
   Set db = session.CurrentDatabase
   Set collection = db.UnprocessedDocuments
   
   Dim coldoc As NotesDocument
   Set coldoc = collection.GetFirstDocument
   
' Daten lesen aus der Sales-Maske...
   coldocid = coldoc.UniversalID
   firma = coldoc.GetItemValue("firma")(0)
   salesnum = coldoc.GetItemValue("salesnum")(0)
   projnum = coldoc.GetItemValue("projnum")(0)
   status = coldoc.GetItemValue("status")(0)
   ansprpart1 = coldoc.GetItemValue("ansprpart")(0)
   ....
'Die ausgelesenen Daten in Maske SchnellInfo(2)-sdoc schreiben....   
   Dim doc As NotesDocument
   Set doc= db.CreateDocument
   doc.Form = "SchnellInfo(2)-sdoc"
   doc.salesdocid= coldocid
   doc.firma = firma
   doc.salesnum = salesnum
   doc.projnum = projnum
   doc.status = status
   ...
   doc.kontakt1 = ""
                ...
   
   Dim collection1 As NotesDocumentCollection
   SSTR = "FORM = ""ToDo"" & firma = """ + firma + """ & salesnum = """ + salesnum + """"
   Set collection1 = db.Search(SSTR, Nothing, 0)
   
   For I=1 To collection1.Count
      
      Dim doc1 As NotesDocument
      Set doc1 = collection1.GetNthDocument(I)
      ansprpart = doc1.GetItemValue ("ansprpart")(0)
      datum = doc1.GetItemValue ("ddatum")(0)
      kontart = doc1.GetItemValue ("kontart")(0)
      thema = doc1.GetItemValue ("ToDo")(0)
      
      Dim item As NotesItem
      Set item = doc.GetFirstItem("kontakt1")
      Call item.AppendToTextList (thema + Chr(10))
                                ....
      
   Next
   
'Document anzeigen   
   Call ws.EditDocument (False , doc, False)

End Sub

Wie oben beschrieben:
1. AppendToTextList (thema +Chr(10)) hängt neuen Eintrag am Ende der nächsten Zeile
2. Collection1 liefert jetzt alle Einträge, ich möchte aber die letzten 3 auslesen und anhängen.  :-[

Danke!

Offline Greenthumb

  • Frischling
  • *
  • Beiträge: 17
  • Ich liebe dieses Forum!
Re:Daten aus Collection in ein Richtext schreiben
« Antwort #11 am: 03.12.03 - 11:16:40 »
Hallo Glombi!
Ich habe die Lösung für das erste Problem (Anhängen der EInträge am Ende der nächsten Zeile).
Für RT-Felder sollte die Zeile so aussehen: Call item.AppendToTextList (Chr(13) + thema(0))

Jetzt werden die EInträge richtig angehängt

Kennst Du welche Lösung für mein zweites Problem? Schlage mir bitte was vor.
Danke!

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Daten aus Collection in ein Richtext schreiben
« Antwort #12 am: 03.12.03 - 11:22:57 »
Wie wäre es mit
For I=collection1.Count - 2 To collection1.Count

Das ist doch dann die Schleife über die letzten drei Einträge.

HTH,
Bernhard

Glombi

  • Gast
Re:Daten aus Collection in ein Richtext schreiben
« Antwort #13 am: 03.12.03 - 11:28:23 »
Um nur die letzten 3 Dokumente der Collection zu bekommen, kannst Du folgendes machen:

dim lbounb_i as integer
select case collection1.Count
case > 4: lbounb_i = collection1.Count -3
case else: lbounb_i = 1
End select

For I = lbounb_i To collection1.Count
     
      Dim doc1 As NotesDocument
      Set doc1 = collection1.GetNthDocument(I)
      ansprpart = doc1.GetItemValue ("ansprpart")(0)
      datum = doc1.GetItemValue ("ddatum")(0)
      kontart = doc1.GetItemValue ("kontart")(0)
      thema = doc1.GetItemValue ("ToDo")(0)
     
      Dim item As NotesItem
      Set item = doc.GetFirstItem("kontakt1")
      Call item.AppendToTextList (thema + Chr(10))
                                ....
     
   Next


Andreas
« Letzte Änderung: 03.12.03 - 11:31:30 von Glombi »

Offline Greenthumb

  • Frischling
  • *
  • Beiträge: 17
  • Ich liebe dieses Forum!
Re:Daten aus Collection in ein Richtext schreiben
« Antwort #14 am: 03.12.03 - 12:35:04 »
Vielen Dank!
Beide von Euch gezeigten Lösungen funktionieren!  :D
Somit ist das Thema abgeschlossen
Danke für Eure Hilfe!

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz