Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: MarkusL am 25.02.15 - 13:41:35

Titel: Protokoll nach Vergleich erstellen
Beitrag von: MarkusL am 25.02.15 - 13:41:35
Hallo zusammen,

ich mal wieder.......
Ich suche einen Lösung, für folgendes Problem:

In einer Maske sind 9 mal 2 Felder, die miteinander verglichen werden sollen und das Ergebnis soll in einem neuen Dokument gespeichert werden.
Die Felder sind Mehrfachfelder.
Vergleiche Feld 1.1 mit 1.2 per ArrayReplace
Vergleiche Feld 1.2 mit 1.1 per ArrayReplace
Vergleiche Feld 2.1 mit 2.1 per ArrayReplace
Vergleiche Feld 2.2 mit 2.1 per ArrayReplace
usw.

Die Vergleiche schreibe ich in ein Variant-Array (wobei man dies auch diskutieren könnte).

Ich erstelle ein neues Dokument, in dem sich ein RichTextFeld befindet.
In das Feld schreibe ich einige erläuternde Worte und will dann die einzelnen Array-Inhalte in das RichTextFeld einfügen. Und an dieser Stelle läuft der Agent auf einen Fehler.

Set rti = docProto.CreateRichtextItem("Protokoll_Text")
rti.AppendText(vArray(1,2))

Kann mir jemand einen besseren Ansatz nennen?
Oder mir sagen, warum das nicht funktioniert?

Danke schon einmal

Gruß
Markus
Titel: Re: Protokoll nach Vergleich erstellen
Beitrag von: Klafu am 25.02.15 - 14:31:02
Hallo Markus,

prinzipiell gilt: wie lautet denn der Fehler? Ist "rti" und das Array "vArray" richtig deklariert?
Die Noteshilfe sagt zu AppendText übrigens:

Zitat
Inserts text in a rich text item. The text is rendered with the current style of the item (such as bold or italics).
Defined in
NotesRichTextItem
Syntax
Call notesRichTextItem.AppendText( text$ )

Chris
Titel: Re: Protokoll nach Vergleich erstellen
Beitrag von: Tode am 25.02.15 - 14:54:35
Deine zwei Zeilen Code sind syntaktisch korrekt, mit Deinen Informationen kann man also leider keine Hilfe geben.

Ob Dein "Vorgehen" sinnvoll ist, kann ich nicht beurteilen, aber "läuft der Agent auf einen Fehler" ist natürlich nicht wirklich eine hilfreiche Fehlerbeschreibung.

Das ist so, wie wenn Du in der Werkstatt anrufst und sagst "Mein Auto fährt nicht, können Sie mir sagen warum nicht?"

- Welcher Fehler kommt EXAKT
- Wie sind die Variablen deklariert
- Ist Dein vArray WIRKLICH 2- dimensional?
- Hast Du denn ein ErrorHandling (wenn nein: warum nicht?)

Mehr Input, mehr output...

Titel: Re: Protokoll nach Vergleich erstellen
Beitrag von: Peter Klett am 25.02.15 - 14:57:05
NotesRichtextItem.AppendText erwartet als Parameter einen String, evtl. hilft schon ein

rti.AppendText(CStr (vArray(1,2)))

Titel: Re: Protokoll nach Vergleich erstellen
Beitrag von: MarkusL am 25.02.15 - 14:59:25
Hallo Chris,

das Array ist als Variant deklariert: Dim vArray(1 To 9, 1 To 5) As Variant
Allerdings gibt es in einigen Bereichen des Array Mehrfachwerte - und die machen die Probleme.

Wenn ich das Array an das Feld übergeben, kommt der Fehler: Arrays of Arrays not supported

Dim vArray(1 To 9, 1 To 5) As Variant
Dim rti As NotesRichTextItem

...

vArray(1,1) = "Text"
vArray(1,2) = "Text 2"
vArray(1,3) = FullTrim(ArrayReplace(vFeldIst,vFeldSoll,vArray(1,3)))

....

docProto.Protokoll_Text = vArray

Fehler: Arrays of Arrays not supported

Wenn ich die Bereiche des Arrays einzeln übergebe, klappt das mit den einfachen Texten, aber nicht mehr mit den Mehrfach-Inhalten.

War das jetzt verständlich, oder benötigst du weitere Infos?

Gruß Markus
Titel: Re: Protokoll nach Vergleich erstellen
Beitrag von: MarkusL am 25.02.15 - 15:00:22
Hallo Peter,

ich glaube, es liegt an dem String.
Das teste ich jetzt direkt mal.
Danke.
Titel: Re: Protokoll nach Vergleich erstellen
Beitrag von: Peter Klett am 25.02.15 - 16:07:30
Wenn Du mit Mehrfachwerten arbeitest, also so, dass die einzelnen Arrayelemente selbst Mehrfachwerte sein können, solltest du diese beim Schreiben in das Richtextitem mit Join zu einem Einfachwert umwandeln.

Außerdem musst Du durch die Arrays durchlaufen und die einzelnen Elemente heraussuchen, anstatt den ganzen Datensalat irgendwie an den Richtext zu übergeben, das wird nix. Sinngemäß vielleicht so

For i = 1 To 9
   For j = 1 To 5
      rti.AppendText (Join (vArray (i, j), Chr (13) & Chr (10)))
   Next j
Next i
Titel: Re: Protokoll nach Vergleich erstellen
Beitrag von: MarkusL am 25.02.15 - 16:58:09
Hallo Peter,

dass ich das Array durchlaufen muss, habe ich dann auch bei der Suche hier im Forum festgestellt.
Ich übergebe die Vergleichswerte jetzt direkt an das RichTextfeld als String.

vVergleich = FullTrim(ArrayReplace(vFeldSoll,vFeldIst,vVergleich))
For i = LBound(vVergleich) To UBound(vVergleich)
   rti.Appendtext(vVergleich(i))
   rti.AddNewLine(1)
Next i

Der Hinweis von Tode, ob das Array 2-dimensional ist, hat mich auf die Idee gebracht, das Ganze ohne Array umzusetzen.

Wie immer war diese Forum hilfreich und ihr seid spitze.

Danke euch allen.

Gruß
Markus