Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Hedwig14 am 08.08.06 - 14:05:20

Titel: Function mit mehreren Rückgabewerten
Beitrag von: Hedwig14 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
Titel: Re: Function mit mehreren Rückgabewerten
Beitrag von: klaussal 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
Titel: Re: Function mit mehreren Rückgabewerten
Beitrag von: Thomas Schulte 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.
Titel: Re: Function mit mehreren Rückgabewerten
Beitrag von: koehlerbv 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
Titel: Re: Function mit mehreren Rückgabewerten
Beitrag von: eknori 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


Titel: Re: Function mit mehreren Rückgabewerten
Beitrag von: Axel 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
Titel: Re: Function mit mehreren Rückgabewerten
Beitrag von: koehlerbv 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 ...
Titel: Re: Function mit mehreren Rückgabewerten
Beitrag von: Thomas Schulte 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.