Autor Thema: Mehrfachfeld bei sendto funktioniert nicht  (Gelesen 1392 mal)

Offline arieger

  • Aktives Mitglied
  • ***
  • Beiträge: 169
  • Geschlecht: Männlich
Mehrfachfeld bei sendto funktioniert nicht
« am: 24.02.23 - 16:59:21 »
Hallo,

habe ein Problem beim Verarbeiten einer temporären Variablen mit Mehrfachwerte.

Habe ein geöffnetes Dokument mit einer Schaltfläche zum Senden eines Mails.

Die Mailempfänger hole ich mit:
Z4 = docs.GetItemValue( "SendTo" ) aus eine vorbelegten Konfigdokument
M09 = doc.Rekl_Erfasser(0)

Nun versuche ich dies über die Recipientsfunktion zu versenden:

Dim recipients( 1 To 2 ) As String
recipients( 1 ) = M09
recipients( 2 ) = Z4
Call gdoc.AppendItemValue("SendTo", recipients)

Die M09 Adresse wird versendet, bei der Z4 Mehrfachadresse läuft er auf einen Fehler (Type Mismach)?

Im Debugger zeigt er den Wert Z4 richtig als Mehrfachwert an.

Frage:  Wie bringe ich den Sendto dazu , den Mehrfachwert in Z4 zu versenden ?

Vielen Dank für Tips.
Das Nasshorn und das Trockenhorn, spazierten durch die Wüste,
da stolperte das Trockenhorn uns Nasshorn sagte – siehste!

pantelis.botsas

  • Gast
Antw:Mehrfachfeld bei sendto funktioniert nicht
« Antwort #1 am: 24.02.23 - 19:43:25 »
Da Du die Variable recipients als Array von Strings deklarierst, wirst Du dort niemals Mehrfachwerte zuweisen können (type mismatch).

Der einfache Weg: die Variable recipient als Variant deklarieren.

Der aufwändigere Weg: die Empfängerliste mit Array-Methoden zusammenstellen und dann dem Feld zuweisen.

Offline arieger

  • Aktives Mitglied
  • ***
  • Beiträge: 169
  • Geschlecht: Männlich
Antw:Mehrfachfeld bei sendto funktioniert nicht
« Antwort #2 am: 25.02.23 - 10:39:50 »
Da Du die Variable recipients als Array von Strings deklarierst, wirst Du dort niemals Mehrfachwerte zuweisen können (type mismatch).

Der einfache Weg: die Variable recipient als Variant deklarieren.

Der aufwändigere Weg: die Empfängerliste mit Array-Methoden zusammenstellen und dann dem Feld zuweisen.

Danke für die Antwort. Stimmt habe ich mehrmals probiert.

Wenn der Variant gesetzt ist, kommt folgende Fehlermeldung: "Arrays of arrays are not supported" ??
'Call gdoc.AppendItemValue("SendTo", recipients)  ->  da kommt die Fehlermeldung

Wenn die Z4 als SendTo angebe funktioniert und sendet, wobei dann M09 fehlt  (Z4 Mehrfachfeld, M09 nur 1 Wert)
Call gdoc.AppendItemValue("SendTo", Z4) ->  funktioniert

Call gdoc.Send( False )
« Letzte Änderung: 25.02.23 - 11:01:17 von arieger »
Das Nasshorn und das Trockenhorn, spazierten durch die Wüste,
da stolperte das Trockenhorn uns Nasshorn sagte – siehste!

pantelis.botsas

  • Gast
Antw:Mehrfachfeld bei sendto funktioniert nicht
« Antwort #3 am: 25.02.23 - 13:51:09 »
Hmm, ich bin mir gerade nicht sicher, ob ich hier verschaukelt werde, aber vermutlich ist meine Antwort zu ungenau gewesen.

Deshalb hier die Lösung 1:

Code
Dim sendTo As NotesItem
sendTo = gDoc.getFirstItem("SendTo") ' hole das zu manipulierende Feld

sendTo.AppendToTextList(doc.Rekl_Erfasser(0)) ' füge Wert M09 in das Feld hinzu
sendTo.AppendToTextList(docs.GetItemValue( "SendTo" )) ' füge Wert Z4 in das Feld hinzu

...

Oder die Lösung 2:

Code
Dim sendTo As Variant

sendTo = Split("", "") ' erstelle eine leerere Liste mit einem leeren ersten Eintrag

sendTo = ArrayAppend(sendTo, gDoc.getItemValue("SendTo")) ' sichere eventuell vorhandene Einträge aus dem Feld in die zuvor erstellte Liste
sendTo = ArrayAppend(sendTo, doc.Rekl_Erfasser(0)) ' übertrage den Wert M09 in die Liste
sendTo = ArrayAppend(sendTo, docs.GetItemValue( "SendTo" )) ' ergänze die Liste mit den Werten von Z4
sendTo = ArrayUnique(sendTo) ' entferne mögliche Dopplungen aus der Liste
sendTo = FullTrim(sendTo) ' entferne mögliche Leereinträge aus der Liste

Call gDoc.ReplaceItemValue("SendTo", sendTo)

...

Warum Dein Code nicht funktionieren kann:

Du dimensionierst ein Array (es ist jetzt auch egal ob String oder Variant), und sagst diesem, dass es zwei Einträge haben wird.

Code
Dim recipients (1 to 2) As String/Variant

Dann weist Du dem ersten Eintrag einen Textwert zu.
Dem zweiten weist Du ein Array zu.

Somit steht in Deiner Variable recipients:
Code
(1): Name0
(2): [ Name1, Name2, Name3, ...]

oder zusammengefasst:
Code
[ Name0, [Name1, Name2, Name3, ...] ]

Im Falle eines Strings fällt die Zuweisung an der zweiten Stelle auf die Nase.
Im Falle eines Variants kann die Zuweisung zum Feld im Dokument nicht funktionieren, weil Du ein Array von Arrays (siehe Fehlermeldung) zuordnen möchtest. Die Methode AppendItemValue jedoch maximal ein Array verarbeiten kann.

Offline arieger

  • Aktives Mitglied
  • ***
  • Beiträge: 169
  • Geschlecht: Männlich
Antw:Mehrfachfeld bei sendto funktioniert nicht
« Antwort #4 am: 26.02.23 - 11:07:59 »
... und genau da bei dem Mehrfachwert kommt dann die Array-Fehlermeldung.
Vielleicht liegt es daran dass ich diesen Wert aus dem KonfigDok hole und nicht vom UI - egal.
Sende nun 2 mal dann gehts auch raus.
Trotzdem Danke.
Das Nasshorn und das Trockenhorn, spazierten durch die Wüste,
da stolperte das Trockenhorn uns Nasshorn sagte – siehste!

Offline Tode

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Antw:Mehrfachfeld bei sendto funktioniert nicht
« Antwort #5 am: 27.02.23 - 08:42:28 »
Du hast doch ZWEI funktionierende Lösungen von Pantelis bekommen... das verstehe ich jetzt nicht...
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline DominoDancing

  • Aktives Mitglied
  • ***
  • Beiträge: 141
  • Geschlecht: Männlich
  • Kugel im Käfig, lsmf, hurz ...
Antw:Mehrfachfeld bei sendto funktioniert nicht
« Antwort #6 am: 27.02.23 - 09:05:36 »
Hallo A und alloha  :),

so wie Torsten verstehe ich es auch nicht, aber vielleicht verstehst Du die Lösungsansätze von Pantelis nicht? Hier noch Ansatz 3:

...
Dim recipients As Variant
recipients = Z4
Redim Preserve recipients Ubound(recipients) + 1
recipients(Ubound(recipients)) = M09
Call gdoc.AppendItemValue("SendTo", recipients)
Call gdoc.Send
...

Liebe Grüße
René
... ich fühl' mich so ... Regenbogen ... ;D
... man muss die Ursache des Problems finden ... oder eine Tüte Glitzerfeenstaub ...
... Ich bin rhythm, I'm a dancer und I don't like Influenzer ...

pantelis.botsas

  • Gast
Antw:Mehrfachfeld bei sendto funktioniert nicht
« Antwort #7 am: 27.02.23 - 13:34:18 »
Hui, René :D. Auch schick  :o

Ich traue mich meistens nicht dieses REDIM zu nutzen, weil ich nicht wirklich weiß, ob es sich so benimmt, wie ich es erwarte  ::)

Und Danke Dir und Torsten für die Unterstützung.
Ich dachte schon, dass ich irgendetwas falsch gemacht habe bei der Lösung.

Euch eine schöne Woche.

Ich würde mich freuen, wenn wir uns wieder in Gelsenkirchen treffen.

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.290
  • Geschlecht: Männlich
Antw:Mehrfachfeld bei sendto funktioniert nicht
« Antwort #8 am: 27.02.23 - 17:19:21 »
Ich nutze REDIM auch nicht mehr so oft, aber der Ansatz von René ist falsch, denn ein REDIM benötigt als Variable zwingend ein dynamisches Array.

Ja Gelsenkirchen, da bin ich dieses Jahr auch dabei ;D

Gruss Erik :: Freelancer :: KI-Dev, Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16 / OLI 2.0

--
Nur ein toter Bug, ist ein guter Bug!

Offline DominoDancing

  • Aktives Mitglied
  • ***
  • Beiträge: 141
  • Geschlecht: Männlich
  • Kugel im Käfig, lsmf, hurz ...
Antw:Mehrfachfeld bei sendto funktioniert nicht
« Antwort #9 am: 28.02.23 - 09:07:36 »
Hallo jBB, hallo Pantelis,

nope, der Code funktioniert genauso wie dargestellt, allerdings hatte ich in der Redim-Zeile ein Paar Klammern vergessen. Zum Testen mit einem beliebigen Dokument in einer beliebigen Anwendung mit einem Mehrfachfeld aus Strings (hier: Z4):

   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim view As NotesView
   Dim doc As NotesDocument
   Dim recipients As Variant
   Dim Z4 As Variant
   Dim M09 As String
   
   Set db = session.CurrentDatabase
   Set view = db.GetView("Einstellung")
   Set doc = view.GetFirstDocument
   Z4 = doc.Z4
   M09 = "last.empfaenger@maildomaene.de"
   
   recipients = Z4
   ReDim Preserve recipients (UBound(recipients) + 1)
   recipients(UBound(recipients)) = M09
   Print "Letzter Empfänger ist " + recipients(UBound(recipients))

Ergebnis: Alle Elemente des Feldes Z4 des Dokumentes werden in die Variable recipients übertragen und als letzter Wert "last.empfaenger@maildomaene.de" angehängt und ausgegeben. Allerdings wurde ja bisher wohl keiner der drei Ansätze durch den Ersteller ausprobiert.

Ich hatte mit Redim bisher noch nie Probleme: Ohne Preserve werden alle Werte der Variable gelöscht, mit Preserve werden diese beim Redim übernommen. Ich werde auf Schalke fehlen. :)

Liebe Grüße
René
... ich fühl' mich so ... Regenbogen ... ;D
... man muss die Ursache des Problems finden ... oder eine Tüte Glitzerfeenstaub ...
... Ich bin rhythm, I'm a dancer und I don't like Influenzer ...

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.290
  • Geschlecht: Männlich
Antw:Mehrfachfeld bei sendto funktioniert nicht
« Antwort #10 am: 28.02.23 - 09:45:38 »
Ich lerne auch immer gerne dazu ;)

Eine einfache Variable erzeugt beim "REDIM Preserve" einen Fehler, aber durch die Zuweisung eines Arrays wird aus "recipients" ein dynamisches Array, das war mir so nicht bekannt.
Aber so kenne ich jetzt einen Weg, wie man ein Array in ein dynamisches Array umwandeln kann.
Gruss Erik :: Freelancer :: KI-Dev, Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16 / OLI 2.0

--
Nur ein toter Bug, ist ein guter Bug!

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz