Autor Thema: Rückgabewert einer Function  (Gelesen 2529 mal)

Offline Annette

  • Frischling
  • *
  • Beiträge: 11
  • Geschlecht: Weiblich
Rückgabewert einer Function
« 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

Offline Untitled

  • Senior Mitglied
  • ****
  • Beiträge: 364
    • Musiker24.ch - Musiker und Bands finden
Re: Rückgabewert einer Function
« Antwort #1 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

Offline Annette

  • Frischling
  • *
  • Beiträge: 11
  • Geschlecht: Weiblich
Re: Rückgabewert einer Function
« Antwort #2 am: 29.05.06 - 13:42:10 »
Hallo Moritz,

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

Gruß, Annette

Offline Annette

  • Frischling
  • *
  • Beiträge: 11
  • Geschlecht: Weiblich
Re: Rückgabewert einer Function
« Antwort #3 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

Offline DAU-in

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.129
  • Geschlecht: Weiblich
  • - unterwegs -
Re: Rückgabewert einer Function
« Antwort #4 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?
mühsam ernährt sich das Eichhörnchen

aktuelle Tätigkeit: Feldschubse

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Rückgabewert einer Function
« Antwort #5 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

Offline Untitled

  • Senior Mitglied
  • ****
  • Beiträge: 364
    • Musiker24.ch - Musiker und Bands finden
Re: Rückgabewert einer Function
« Antwort #6 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)

 ;)

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Rückgabewert einer Function
« Antwort #7 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
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline Annette

  • Frischling
  • *
  • Beiträge: 11
  • Geschlecht: Weiblich
Re: Rückgabewert einer Function
« Antwort #8 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 ???

Offline Annette

  • Frischling
  • *
  • Beiträge: 11
  • Geschlecht: Weiblich
Re: Rückgabewert einer Function
« Antwort #9 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!?

Offline Untitled

  • Senior Mitglied
  • ****
  • Beiträge: 364
    • Musiker24.ch - Musiker und Bands finden
Re: Rückgabewert einer Function
« Antwort #10 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

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.885
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Rückgabewert einer Function
« Antwort #11 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
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 Annette

  • Frischling
  • *
  • Beiträge: 11
  • Geschlecht: Weiblich
Re: Rückgabewert einer Function
« Antwort #12 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

Offline Annette

  • Frischling
  • *
  • Beiträge: 11
  • Geschlecht: Weiblich
Re: Rückgabewert einer Function
« Antwort #13 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!!!

Offline LN4ever

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 505
  • Geschlecht: Männlich
Re: Rückgabewert einer Function
« Antwort #14 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.
« Letzte Änderung: 29.05.06 - 23:10:34 von LN4ever »
Situs vilate in isse tabernit.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz