Das Notes Forum

Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: ManuMF am 04.05.07 - 21:22:03

Titel: FM "Illegal reference to array or List"
Beitrag von: ManuMF am 04.05.07 - 21:22:03
Hallo  liebe Notes-Gurus.

ich habe mal wieder eine Script-Frage mit o.a. FM:

ich habe innerhalb eines Agenten 2 Listen, die ich vergleichen möchte.. wenn ein wert von Liste 1 nicht in Liste 2 vorhanden ist, soll er diesen Wert in eine neue Liste eintragen.


Code
Dim DiffListold() As  Variant
Dim DiffListnew() As Variant
Redim DiffListold(0)
Redim DiffListnew(0)
Dim i As Integer
i=0
Forall m In FullnameListold
	indexresult = Arraygetindex( FullnameListnew , m)
	If Isnull(indexresult) Then
		difflistold= AddToList(m,Difflistold)
		i=i+1			
		Redim Preserve DiffListold(i)
	End If
	i=i+1
End Forall

AddToList ist eine Funktion, die so aussieht.
Code
Function AddToList (Value As Variant, ValueList As Variant)
	Dim tmpValueList As Variant
' Load the array element by element so that the datatype is preserved
	Redim tmpValueList(Ubound(ValueList))
	For i = 0 To Ubound(ValueList)
		tmpValueList(i) = ValueList(i)
	Next
' Determine if we are dealing with a new list, if absolutely no
'values in the first entry, then add new value to 0
	If Ubound(tmpValueList) = 0 And Cstr(tmpValueList(0)) = "" Then
		x = 0
	Else
		x = Ubound(tmpValueList) + 1
	End If
	Redim Preserve tmpValueList(x)
	tmpValueList(x) = Value
	AddToList = tmpValueList
	Valuelist=AddToList
End Function

 bei dem Aufruf von "difflistold= AddToList(m,Difflistold)" bekomm ich die FM.

Wenn ich nur ein "Call AddToList(m,Difflistold)" aufrufe wird die Funktion zwar ausgeführt, aber meine Liste "DiffListold" natürlich nicht gefüllt.

Ich stell mich da grad recht dumm an.
Wie wäre denn der korrekte Aufruf.

Kann jemand helfen?

Danke & viele Grüße
Manu
Titel: Re: FM "Illegal reference to array or List"
Beitrag von: m3 am 04.05.07 - 21:46:41
1) "Option Declare" ist nicht nur eine gute Idee, sondern sollte auch verwendet werden.

2) Der Aufruf ist OK, der Funktionsdefinition fehlt der Rückgabewert. Siehe Designer-Hilfe, Thema "Defining functions".
Titel: Re: FM "Illegal reference to array or List"
Beitrag von: ManuMF am 04.05.07 - 21:55:04
Hallo m3,

Pkt1, ist erledigt - denk ich nicht immer dran ;)

Pkt2: kannst du das in meinem Fall etwas konkretisieren?
Falls du meinst: "Function AddToList (Value As Variant, ValueList As Variant) as Variant", dann bekomm ich immer noch die gleiche FM bei der Zuweisung:
"difflistold= AddToList(m,Difflistold)"

Hilf mir bitte etwas  ???
Titel: Re: FM "Illegal reference to array or List"
Beitrag von: m3 am 04.05.07 - 22:06:19
Bekommst Du wirklich die Fehlermeldung in der Zeile? Debug mal mit "Step Into". Ich würd mal sagen, dass er irgendwo in der Funktion fliegt.

Ausprobieren, ... geht leider nicht, dafür fehlen dem Code entscheidende Elemente (z.B. die definition von "Difflistold").
Titel: Re: FM "Illegal reference to array or List"
Beitrag von: ManuMF am 04.05.07 - 22:11:11
Debug geht ja nicht, ich bekomm die FM ja schon beim Speichern :(

Definition DiffListold -> "Dim DiffListold() As  Variant" steht im Code.

Ich möchte zwei Listen vergleichen, und gehe über die Forall-Schleife über alle Elemente in der Liste "FullnameListold" und suche ob das momentane Element in Liste "Fullnamesnew" drin steht, wenn nicht, dann soll er über die Funktion "AddToList" dieses Element in die Liste "DiffListOld" eintragen.
Titel: Re: FM "Illegal reference to array or List"
Beitrag von: m3 am 04.05.07 - 23:03:36
Debug geht ja nicht, ich bekomm die FM ja schon beim Speichern :(
Hä? Wie bitte? Du kannst (fast) alles debuggen. Diese Aussage ist ein Blödsinn. Aktivier LotusScript Debugging, bevor Du das Dokument öffnest/erstellst und Du kanst jeden Event, auch das Speichern, debuggen.

Darf ich Dir eine Notes-Entwickler-Schulung empfehlen?
Titel: Re: FM "Illegal reference to array or List"
Beitrag von: Axel am 05.05.07 - 18:34:59
Debug geht ja nicht, ich bekomm die FM ja schon beim Speichern :(
Hä? Wie bitte? Du kannst (fast) alles debuggen. Diese Aussage ist ein Blödsinn. ...

Nicht ganz, Martin. Wenn die Fehlermeldung schon beim Speichern des Agenten erscheint, dann ist ein syntaktischer Fehler im Code.

Ich vermute mal, dass der Hund hier begaben liegt:

Function AddToList (Value As Variant, ValueList As Variant)
   Dim tmpValueList As Variant
' Load the array element by element so that the datatype is preserved
   Redim tmpValueList(Ubound(ValueList))

...

Deklariert wird eine "einfache" Variantvariable und dann wird ein Redim versucht. Redim geht nur mit Arrays.

So sollte es richtig sein:

Function AddToList (Value As Variant, ValueList As Variant)
   Dim tmpValueList() As Variant
' Load the array element by element so that the datatype is preserved
   Redim tmpValueList(Ubound(ValueList))
...


Axel
Titel: Re: FM "Illegal reference to array or List"
Beitrag von: thomson666 am 08.05.07 - 07:45:23
kleiner tipp am rande...

zuerst wird oben von listen geredet dann von arrays!? was willst du nun wirklich vergleichen... ich würde hier mit listen arbeiten und nicht mit arrays, ist performanter zum vergleichen als mit einer forall wieder zu schauen ob etwas enthalten ist.

weiters...
im designer kannst im programmierfenster einstellen das option declare immer automatisch aktiviert bzw. eingetragen ist, dann gibts keine ausrede mehr mit ab und zu vergess ichs...  ;) ;D
Titel: Re: FM "Illegal reference to array or List"
Beitrag von: ManuMF am 14.05.07 - 17:14:00
@thomson666: wo stell ich das im Programmierfenster ein?

Titel: Re: FM "Illegal reference to array or List"
Beitrag von: Axel am 14.05.07 - 19:05:15
Du musst eine beliebige Script-Bibliothek im Designer öffnen. Dann klickst du im Bereich des Code-Fensters mit der rechten Maustaste und wählst aus dem Popup-Menü den Punkt Eigenschaften Programmierfenster. Auf dem zweiten Reiter findest du die Option im unteren Teil.


Axel