Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet 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
-
Beispiel:
varRueckgabe = FillPosition(doc, docColl, 0, DialogBox)
Function FillPosition(doc As NotesDocument, docColl As NotesDocument, intPosition As Integer, DialogBox As String) As Variant
-
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.
-
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
-
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
-
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
-
Das gibt dann aber einen netten "Illegal function return type" ...
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 ...
-
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.