Autor Thema: Function mit mehreren Rückgabewerten  (Gelesen 1861 mal)

Offline Hedwig14

  • Aktives Mitglied
  • ***
  • Beiträge: 221
Function mit mehreren Rückgabewerten
« am: 08.08.06 - 14:05:20 »
Hallo zusammen,

ich habe eine Funktion, die mir innerhalb eines Scripts einen Wert zurückliefert.
Nun habe ich festgestellt, dass ich mehrere Rückgabewerte aus der Function benötige !

Ist es möglich,dass mir eine Funktion mehrere Rückgabewerte ausgibt ?
Wenn ja, wie deklariere ich diese und übergebe sie ins Script ?

Lieben Gruss
Hedwig14

klaussal

  • Gast
Re: Function mit mehreren Rückgabewerten
« Antwort #1 am: 08.08.06 - 14:11:39 »
Beispiel:

varRueckgabe = FillPosition(doc, docColl, 0, DialogBox)

Function FillPosition(doc As NotesDocument, docColl As NotesDocument, intPosition As Integer, DialogBox As String) As Variant

Offline Thomas Schulte

  • @Notes Preisträger
  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: Function mit mehreren Rückgabewerten
« Antwort #2 am: 08.08.06 - 14:20:01 »
Klaus das ist richtig, löst aber das Problem dann nicht, wenn sie unterschiedliche Typen zurückgeben will.

Grundsätzlich sieht Notes das nämlich nicht vor. Du kannst globale Variablen deklarieren und diese in deiner Funktion setzen. Damit bekommst du das hin, hast aber das Problem, das du immer dann wenn du deine Funktion benutzen willst die globalen Variablen vorher sauber deklariert sein müssen.

Ein Ausweg aus diesem Dilemma ist die Benutzung von Listen. Damit kannst du unterschiedliche Typen (Notesdokument, Notesdatabase, String, Item usw.) in einer Variablen zusammenfassen und auf diese auch sauber über das Element der Liste zugreifen.

Deine Funktion würde so ausschauen:
Function Somename(Parameter1 as String, Parameter2 as Integer) as variant

dim InterneListe list as variant

Fülle deine Liste mit irgendwelchen Werten
InterneListe("Element1") = notesdocument
InterneListe("Element2") = "irgendwas"
InterneListe("Element3") = 790
.
.
Somename = InterneListe
end function

für den Aufruf musst du nur noch eine

Dim Rückgabeliste List as variant

definieren und deine Funktion mit

Rückgabeliste = SomeName(Parameter1, Parameter2)

aufrufen und kannst danach alle Elemente der Liste verarbeiten.
Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Function mit mehreren Rückgabewerten
« Antwort #3 am: 08.08.06 - 14:25:35 »
Ein anderes übliches Verfahren (was die meisten sowieso unbewusst dauernd einsetzen) ist, Variable by reference zu übergeben, sie innerhalb der function zu befüllen und anschliessend ausserhalb wieder abzufragen.

Bernhard

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Re: Function mit mehreren Rückgabewerten
« Antwort #4 am: 08.08.06 - 14:36:08 »
Du kannst den Rückgabewert der Funktion auch als Klasse definieren

z.B.

Class TicketDetails
   Public User As String
   Public TicketNumber As String
   Public Problem As String
   Public Status As String
   '... eine Ahnung was sonst noch
   Public AssociatedTodo As ToDoCollection
End Class

...

Function GetTicketDetails ( TicketNumber as String  ) As TicketDetails

...


dann kannst du auch unterschiedliche Typen zurüchgeben


« Letzte Änderung: 08.08.06 - 14:38:17 von eknori »
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

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: Function mit mehreren Rückgabewerten
« Antwort #5 am: 08.08.06 - 15:26:44 »
Das Ganze geht auch mit einem benutzerdefinierten Datentyp

...
Type phoneRec
   name As String
   areaCode As Integer
   phone As String * 8
End Type
...

Function .... () As phoneRec


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Function mit mehreren Rückgabewerten
« Antwort #6 am: 08.08.06 - 15:37:16 »
Das gibt dann aber einen netten "Illegal function return type" ...

Zitat
You either used a Declare or Function statement to declare or define a function and specified its return type as a fixed-length string or a user-defined data type, or else you used a Declare statement to declare an external C function and specified its return type as Variant, Currency, fixed-length String, or a user-defined data type.
Specify a data type other than the ones listed above for the function's return value.

Bernhard

PS: Schön wär's ja ...

Offline Thomas Schulte

  • @Notes Preisträger
  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: Function mit mehreren Rückgabewerten
« Antwort #7 am: 08.08.06 - 15:47:25 »
Wie war das mit Rom und den vielen Wegen?

Naja jetzt kann sich Hedwig ja einen Weg raussuchen.

Übrigens das mit dem Type geht doch wenn man als Rückgabewert einen Variant nimmt. Man muss dem Type dann nur in der Funktion noch einmal deklarieren wenn man das sauber trennen will.
Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz