Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: ManuelPf am 04.05.07 - 13:45:12

Titel: Problem mit Schleife
Beitrag von: ManuelPf am 04.05.07 - 13:45:12
Hallo @all

Ich habe irgendein Problem mit einer Schleife...

Als Fehler bekomm ich folgendes...

>>>ERROR: Subscript out of range in INITIALIZE in line 396

meine Script sieht so aus:


If ( answer = 6) Then
      j = 0   
      While Not(docsend Is Nothing)
         recipients = docsend.GetItemValue( "MailAddress" )(j)
         If recipients = "" Then
            Goto EndSub
         Else
            Messagebox "Das sind die Mailaddressen " & recipients
            tmpMsg = tmpMsg & "~" & docsend.GetItemValue( "MailAddress" )( j )      
         End If   
         Call doc.Send(False, Split(recipients, ","))         
         tmpMsg = tmpMsg & "~" & Cstr( j ) & " Mails have been sent"                  
         j = j + 1
      Wend         
      tellit = ws.Prompt(PROMPT_OK, "ENDE", j & " Mails have been sent")
      Call LogMessage( tmpMsg )      
   End If


Kann mit jemand sagen was hier passiert bzw. was ich machen muss das die Schleife nicht in einen Fehler läuft?
Die Fett markierte Zeile im Code ist die uminöse Zeile 396  :-\

Danke schon mal im Voraus

Gruß
ManuelPf
Titel: Re: Problem mit Schleife
Beitrag von: tks am 04.05.07 - 13:52:12
Also die fette Zeile zu erkennen war nicht so einfach. Die hab' ich erst gesehen, nachdem ich auf Antworten geklickt hatte.

GetItemValue liefert ein Array zurück. Wenn Du nur einen Wert haben willst, dann

reciptients = docsend.MailAddress(0)
Titel: Re: Problem mit Schleife
Beitrag von: MadMetzger am 04.05.07 - 13:56:03
Ich denke mal, dass das Script auf die Bretter geht, sobald du über die Anzahl der Einträge in dem Item Mailaddress hinaus kommst mit dem j. Du musst die Obergrenze für j bestimmen und nur bis dahin auch iterieren.

Insgesamt ist mir aber nicht ganz klar, was dieser Scriptschnipsel macht.
Titel: Re: Problem mit Schleife
Beitrag von: robertpp am 04.05.07 - 14:01:57
Ich denke der Code hat so einige Fehler.

Du willst doc.Send machen obwohl doc nicht gesetzt ist! es gibt nur docsend
Wie lange soll er die While Schleife machen??? Endlosschleife?

Was willst du genau machen?

robert
Titel: Re: Problem mit Schleife
Beitrag von: ManuelPf am 04.05.07 - 14:04:38
Im Feld "MailAddress" Stehen mehrere E-Mail-Addis an die jeweils einzeln eine E-Mail versendet werden soll...

@tks:
Danke für deine Antwort, aber ich wusste bereits das GetItemValue ein Arry zurückliefert...

@MadMetzger:
Ich glaub bei deiner Antwort bin ich auf dem richtigen Weg... Das Problem ist allerdings das im Feld "MailAddress" mal 2, mal 3, oder mal viel mehr Adressen stehen können... Also kann ich keine feste Obergrenze definieren... kann ich nicht vorher irgendwie schauen wie viele Werte in dem Feld "MailAddress" stehen und diesen Wert als Obergrenze definieren?

 ???
Titel: Re: Problem mit Schleife
Beitrag von: ManuelPf am 04.05.07 - 14:07:52
@robertpp:
es ist nur ein Auszug aus dem gesamtscript...

doc ist schon gesetzt als NotesDocument genauso wie docsend...

Ich möchte einfach nur eine Möglichkeit haben, jeden einzlnen Werte aus dem Feld "MailAddress" auszulesen (das geht ja schon) und sofort ne Mail zu senden an diesen Adresse...

Das Problem ist eben das er nicht aus der Schleife geht sobald er an den letzten Wert eine Mail gesendet hat sondern wieder an den Schleifenanfang und dann den Fehler bringt...
Titel: Re: Problem mit Schleife
Beitrag von: koehlerbv am 04.05.07 - 14:08:33
Dafür gibt es Ubound.

Bernhard
Titel: Re: Problem mit Schleife
Beitrag von: m3 am 04.05.07 - 14:09:13
@Manuel:  UBound(docsend.GetItemValue( "MailAddress" )) und Du weißt, wie wieviele Einträge MailAddress hat.

P.S.: Argl. Bernhard war schon wieder schneller.
Titel: Re: Problem mit Schleife
Beitrag von: ManuelPf am 04.05.07 - 14:12:58
Merci für den Tipp aber schon beim Einfügen von der Codezeile meckert er...  ???

Unexpected: UBound; Expected: Statement

Was will er?
Titel: Re: Problem mit Schleife
Beitrag von: koehlerbv am 04.05.07 - 14:13:27
Argl. Bernhard war schon wieder schneller.

Dafür warst Du schneller im Kommunbräu  ;D
Titel: Re: Problem mit Schleife
Beitrag von: ManuelPf am 04.05.07 - 14:15:46
Danke hat sich erledigt ;-) hab es in eine Variable x geschrieben und diese mit Integer deklariert ;-)
Titel: Re: Problem mit Schleife
Beitrag von: umi am 04.05.07 - 14:19:29
Recipients ist doch schon ein Mehrfachfeld oder hast du da Mehrfach-Mehrfachwerte drin?
Dann könntest Du auch einfach ein
Code
Forall rcp in docsend.getitemvalue("Recipients")
if rcp="" then goto endsub
Messagebox "Das sind die Mailaddressen " & recipients
tmpMsg = tmpMsg & "~" & rcp
Call doc.Send(False, Split(rcp, ","))         
end forall

Titel: Re: Problem mit Schleife
Beitrag von: ManuelPf am 04.05.07 - 14:27:46
nein ich hab da keine mehrfach-mehrfachwerte drin  :)

das war noch ein überbleipsel aus nem test ;-)

Aber wie definiere ich denn eine Obergrenze für meine Schleife?
Titel: Re: Problem mit Schleife
Beitrag von: umi am 04.05.07 - 14:31:33
Ubound(Array)
oder via forall x in Array
Titel: Re: Problem mit Schleife
Beitrag von: MadMetzger am 04.05.07 - 14:31:51
Als Abbruchbedingung für die Schleife?

Pseudocode:
Code
while i < Obergrenze
    do something
    i hochzählen
wend
Titel: Re: Problem mit Schleife
Beitrag von: umi am 04.05.07 - 14:34:22
Wenn keine MehrfachMehrfachwerte dann gehts doch auch so:
Code
Dim Recipients as variant
Recipients = docsend.getitemvalue("Recipients")
if recipients(0)="" then goto endsub
Messagebox "Empfänger =" & join(recipients,",")
call docsend.send(false,recipients)
....

ohne Schleife :-)
Titel: Re: Problem mit Schleife
Beitrag von: m3 am 04.05.07 - 14:45:02
Umi, er will aber jedem User einzeln eine Mail schreiben, ohne dass alle Empfänger im "To" auftauchen (so hätte ich den Code interpretiert).
Titel: Re: Problem mit Schleife
Beitrag von: umi am 04.05.07 - 14:49:54
Naja, dafür gibts ja das Feld "BlindCopyTo" :-)
Code
Call docsend.replaceitemvalue("BlindCopyTo",docsend.getitemvalue("Recipients"))
call docsend.send(false)
Titel: Re: Problem mit Schleife
Beitrag von: ManuelPf am 04.05.07 - 14:58:57
@m3:
genau richtig... so soll es sein...

@umi:
ja gibt es schon aber es muss doch auch die möglichkeit geben übers To: jedem einzeln ne Mail zu senden...

@madmetzger:

ich habs mit

"While j>x
       Goto End Sub

"
versucht, aber da springt er mit aus der kompletten funktion raus und beendet alles...
Ist nicht schlecht, aber da ich nach dem versenden noch eine nachricht ausgeben will wieviel Mails versendet wurden ist das dumm...

 :(
Titel: Re: Problem mit Schleife
Beitrag von: m3 am 04.05.07 - 15:00:42
Na dann mach doch das Goto einfach woanders hin und nicht zum Ende der Sub. Maaaah!
Titel: Re: Problem mit Schleife
Beitrag von: umi am 04.05.07 - 15:04:52

Code
If ( answer = 6) Then 
j=0
dim recipients = docsend.getitemvalue("MailAddress")
Forall recp in recipients
if recp<>"" then
            Messagebox "Das sind die Mailaddressen " & recipients
            tmpMsg = tmpMsg & "~" & rcp
         Call doc.Send(False, rcp)         

j = j+1
end if
end forall
         tmpMsg = tmpMsg & "~" & Cstr( j ) & " Mails have been sent"                  
      tellit = ws.Prompt(PROMPT_OK, "ENDE", j & " Mails have been sent")
      Call LogMessage( tmpMsg )      
   End If

Titel: Re: Problem mit Schleife
Beitrag von: ManuelPf am 04.05.07 - 16:01:23
Danke für Eure Tipps...

Es tut wie es tun soll dank der Hinweise...

Gruß
ManuelPf