Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Annette am 29.05.06 - 13:30:37

Titel: Rückgabewert einer Function
Beitrag von: Annette am 29.05.06 - 13:30:37
Hallo liebe Entwickler,
irgendwie habe ich ein Problem mit dem Rückgabewert einer Function :-:, die ich mir selbst nicht erklären kann. Vielleicht weiß jemand von Euch mehr! :)

Ich lese in einer Funktion bestimmte Feldwerte (Mehrfachwerte) aus einem Dokument in einen Variant und möchte diesen als Rückgabewert der Funktion übergeben. Dabei gibt es den Fehler Type mismatch!
Die Methode GetItemValue liefert eine Liste zurück, macht das evtl. Problem? Wie kann ich das umgehen???

Die Funktion sieht etwa so aus:

Function GetOpenValues(doc As NotesDocument)
   Dim VarFields(2) As Variant
   Dim VarValues(2) As Variant
   
   VarFields(0) = "Name"
   VarFields(1) = "Vorname"
   VarFields(2) = "Kategorie"
   
   For i = 0 To Ubound(VarValues)
      VarValues(i) = doc.GetItemValue(VarFields(i))      
   Next
   
   GetOpenValues = VarValues
   
Exit Function
Titel: Re: Rückgabewert einer Function
Beitrag von: Untitled am 29.05.06 - 13:33:19
Hallo Annette

Probier mal:
Code
Function GetOpenValues(doc As NotesDocument) as Variant

Dein Funktionskopf hatte nämlich gar keinen Rückgabewert definiert.

Grüsse
Moritz
Titel: Re: Rückgabewert einer Function
Beitrag von: Annette am 29.05.06 - 13:42:10
Hallo Moritz,

danke für den Tipp, das leider tritt der Fehler trotzdem auf.

Gruß, Annette
Titel: Re: Rückgabewert einer Function
Beitrag von: Annette am 29.05.06 - 13:43:50
Hallo Moritz,

vielen Dank für den Hinweis, leider tritt der Fehler aber trotzdem auf!
Irgendwie hängt das Problem an dem Array das ich nach dem einlesen der Feldwerte erhalte.

Gruß,Annette
Titel: Re: Rückgabewert einer Function
Beitrag von: DAU-in am 29.05.06 - 13:48:33
*Irgendwie hängt das Problem an dem Array das ich nach dem einlesen der Feldwerte erhalte.*

Tritt der Fehler in der Schleife auf oder danach?
Titel: Re: Rückgabewert einer Function
Beitrag von: koehlerbv am 29.05.06 - 13:49:50
Der Debugger hätte Dir die problematische Zeile genau angezeigt ...

VarValues(i) = doc.GetItemValue(VarFields(i))

VarValues ist ein eindimensionales Array. Dieses füllst Du aber statt wie deklariert mit skalaren Werten wiederrum mit Arrays!

Ergo:
VarValues(i) = doc.GetItemValue(VarFields(i) (0))

Bernhard
Titel: Re: Rückgabewert einer Function
Beitrag von: Untitled am 29.05.06 - 13:53:44
Zitat
VarValues(i) = doc.GetItemValue(VarFields(i) (0))
Ne, besser ist
Code
VarValues(i) = doc.GetItemValue(VarFields(i) )(0)

 ;)
Titel: Re: Rückgabewert einer Function
Beitrag von: Axel am 29.05.06 - 13:55:51
VarValues(i) = doc.GetItemValue(VarFields(i) (0))

Dann knallts aber bei Mehrfachwerten. Das geht so nicht.

Siehe hier.

Ich lese in einer Funktion bestimmte Feldwerte (Mehrfachwerte) aus einem Dokument in einen Variant ...


Axel
Titel: Re: Rückgabewert einer Function
Beitrag von: Annette am 29.05.06 - 14:00:28
Hallo zusammen,

vielen Dank für die inzwischen zahlreichen Hilfen!!!
Ich habe jetzt nur das Problem, dass in den Feldern eigentlich Mehrfachwerte stehen und ich nicht immer nur den ersten Wert auslesen möchte  :-[

Eigentlich hatte ich gedacht, dass ich einem Variant (hier also die Funktion) alles übergeben kann, auch Varianten mit Varianten als Elemente sozusagen.

ICh muss wohl weitersuchen ???
Titel: Re: Rückgabewert einer Function
Beitrag von: Annette am 29.05.06 - 14:05:15
Apropos:

der Fehler tritt in der Zeile

"GetOpenValues = VarValues"

auf, d.h. in VarValues stehen meine Werte wie gewünscht im Variant, erst bei der Übergabe an die Funktion habe ich das Problem. Wenn es gar nicht anders geht, muss ich wahrscheinlich die Mehrfachwerte in den Feldern in einen String schrieben und später über 'explode' wieder auseinanderziehen!?
Titel: Re: Rückgabewert einer Function
Beitrag von: Untitled am 29.05.06 - 14:11:54
Also bei mir hat die Übergabe geklappt, wenn ich "VarValues(i) = doc.GetItemValue(VarFields(i) )(0)" geschrieben habe.

Aber dann wird ja, wie gesagt, nur das erste Element übergeben.

Also was du hier machen möchtest, sind mehrere Rückgabewerte. Das funktioniert in Notes so nicht. Du kannst dir mit einem Variant-Array tatsächlich behelfen, aber mit Arrays in Arrays wirds dann ziemlich kompliziert, das Ganze klug zusammenzusetzen um es später wieder auseinanderzupfriemeln.

Was möchtest du denn genau erreichen? Gibts vielleicht einen anderen Weg?

Moritz
Titel: Re: Rückgabewert einer Function
Beitrag von: Tode am 29.05.06 - 14:21:57
das ganze liesse sich durchaus mit Arrays in Arrays behandeln, wird aber schnell unübersichtlich....

Ich würde schlicht und ergreifend mit einer eigenen Klasse arbeiten, da bleibt das ganze auch noch schön sprechend.

Also so:

Class OpenValues

   Public Namen as Variant
   Public Vornamen as Variant
   Public Kategorien as Variant

   Sub New( doc as NotesDocument )
      Me.Namen = doc.GetItemValue( "Name" )
      Me.Vornamen = doc.GetItemValue( "Vorname" )
      Public Kategorien = doc.GetItemValue( "Kategorie" )
   End Sub
End Class

Das ganze dann so aufrufen:

Dim openVals as OpenValues

...
Set openVals = New OpenValues( doc )

und dann können die Werte jederzeit ohne kenntnis des jeweiligen Array- Index aufgerufen werden:

Forall kategorie in openVals.Kategorien
...
End Forall

oder so
tmpName = openVals.Vorname( i ) & " " & openVals.Name( i )

nur um mal ein paar Beispiele zu nennen...

Ist doch allemal lesbarer als

name1 = openVals( 0 )( 0 )

(was nebenbei LotusScript auch gar nicht zulässt, man müsste mit "Zwischen- Arrays" arbeiten)

HTH
Tode
Titel: Re: Rückgabewert einer Function
Beitrag von: Annette am 29.05.06 - 14:29:03
Hallo Moritz,
Ziel ist es, im Postopen best. Feldwerte einzulesen und diese mit den Feldwerten im Querysave zu vergleichen um bei Änderungen weitere Aktionen starten zu können (das Ganze soll ich Backend ablaufen).
Ich wollte den Code möglichst in einer Funktion haben, um nicht ständig in den verschiedenen Masken ändern zu müssen.

Gruß,
Annette
Titel: Re: Rückgabewert einer Function
Beitrag von: Annette am 29.05.06 - 15:03:10
die Idee mit der Klasse gefällt mir ganz gut, auch wenn ich damit gar keine Erfahrung habe  ::)
ICh denke mal, hier im Forum werde ich dazu noch ein paar gute Tipps finden!

Vielen Dank für die Hilfe!!!
Titel: Re: Rückgabewert einer Function
Beitrag von: LN4ever am 29.05.06 - 22:27:07
Liebe Annette,

das riecht doch nach einer Document-History der Feldinhalte.

Schau einmal hier: http://www.sw-guide.de/lotus-notes-domino/lotusscript-history/

Das ist vielleicht für dich schon die fertige Lösung.