web-dev-qa-db-ja.com

QTP:関数から複数の値を返すにはどうすればよいですか?

2つの引数を持つ関数から複数の値を返すことができる関数を作成しようとしています。

例えば:

function sample_function(arg1,arg2)
    ''#Some code.................

    passenger = list1(0)
    name1 = list1(1)
    age1 = list1(2)
    seatNumber = list1(3)
    ''#This is an Incomplete function...    
end function sample_function

ここで、sample_functionという名前のこの関数には、arg1、arg2という名前の2つの引数があります。ドライバースクリプトでvalue = sample_function(2、Name_person)のようにこの関数を呼び出すと、この関数はpassenger、name1、age1、seatNumberの値を返すはずです。

どうすればこれを達成できますか?

EDIT(LB): QTPはVBScriptを使用してテストルーチンを指定するため、これをVBScriptに再タグ付けしました。VBソリューションはおそらくVBScript内にあるためです。

9
Sam

簡単な解決策は、配列を返すことです。

function foo()
 foo=array("Hello","World")
end function

x=foo()

MsgBox x(0)
MsgBox x(1)

同じ値のバッチを複数回使用する場合は、ユーザー定義のクラスにすることで費用が発生する可能性があります。

class User
 public name
 public seat
end class 

function bar()
 dim r 
 set r = new User
 r.name="J.R.User"
 r.seat="10"
 set bar=r
end function

set x=bar()

MsgBox x.name
MsgBox x.seat
23

VBScriptでは、すべての関数パラメーターは入力/出力パラメーター(ByRefパラメーターとも呼ばれます)です。したがって、関数パラメータを使用するだけでデータを返すことができます。例:

Function Test(a, b, c)
   a = 1
   b = 2
   c = 3
End Function

Test x, y, z
MsgBox x  ' Shows 1
MsgBox y  ' Shows 2
MsgBox z  ' Shows 3
3
user128300

このように関数を宣言します。

function sample (arg1, arg2, passenger, name, age1, seatNumber)
''#Some code.................
passenger = list1(0)
name1 = list1(1)
age1 = list1(2)
seatNumber = list1(3)
''#This is an Incomplete function...
end function sample

次に、それを呼び出すときに、返したい変数を入力するだけです。

1
brian

新しいデータ型を作成し、それに必要なすべてのメンバーを追加できます。次に、この新しいデータ型を関数から返します。

1
schoetbi

関数から辞書オブジェクトを返すことでそれを行うことができます。

set dictFunRetun=foo()
msgbox dictFunRetun.item("Msg1")
msgbox dictFunRetun.item("Msg2")
function foo()
    set fnReturn=CreateObject("Scripting.Dictionary")
    fnReturn.Add "Msg1","First Variable"
    fnReturn.Add "Msg2","Second Variable"
    set foo=fnReturn
end function

ここの辞書では、Msg1とMsg2という名前のキーに同様に追加しました。同様に、int、Boolean、array、任意のタイプのデータなど、さまざまなタイプの値を持つキーを追加できます。

1
Mridul

私は何も持っていない。すべてのクレジットは、私のオンラインの友人であるpradeekと別の友人の努力にかかっています。これが誰かに役立つことを願っています。

'Passing multiple numerical values from one function to another method-1

Function fnFirstFunction()
    value1=1
    value2=2
    value3=3
    A=Array(value1,value2,value3)
    fnFirstFunction=A
    'msgboxA(0)
    'msgboxA(1)
End Function

'Belowfunction passes the value returned from the fnFirstFunction and displays
Function fnSecondFunction(ByVal  A)
    P=A
    B=P(0)
    MsgBox B
    C=P(1)
    Msgbox C
    D=P(2)
    Msgbox D
End Function

A=fnFirstFunction()
'AsfnFirstFunction returns a value, take it to a variable
Call fnSecondFunction(A)'a

'passing multiple character values from one function to another method -2
public function fun1()

    msg1="Hello How are you?"
    msg2="i am fine"
    msg3="Hope you doing fine"

    arr1=Array(msg1,msg2,msg3)
    fun1=arr1
End function

arr1=fun1()
Call fun2(arr1)

public function fun2(byval arr1)
    j=arr1
    usermessage1=j(0)
    msgbox usermessage1
    usermessage2=j(1)
    msgbox usermessage2
    usermessage3=j(2)
    msgbox usermessage3
End Function

'Passing multiple values from one function to another method-3
public function fun1()
    msg1="Hello How are you?"
    msg2="i am fine"
    msg3="Hope you doing fine"
    arr1=msg1 + "@" + msg2 + "@" + msg3
    fun1=arr1
End function

arr1=fun1()
Call fun2(arr1)

public function fun2(byval arr1)
    j=arr1
    k= split(j,"@")
    usermessage1=k(0)
    msgbox usermessage1
    usermessage2=k(1)
    msgbox usermessage2
    usermessage3=k(2)
    msgbox usermessage3
End Function
0
manish

これはあなたを助けます、

2つの方法で実行できます。最初の方法は、たとえばすべての値を配列として渡すことです

function message

message1="Hello How are you?"

message2="i am fine"

message3="Hope you doing fine"

message=Array(message1,message2,message3)

End function

function chat-history

user-history=message

usermessage1=user-history(0)

usermessage2=user-history(1)

usermessage3=user-history(2)

End Function

2番目の方法は連結して分割することです

function message

message1="Hello How are you?"

message2="i am fine"

message3="Hope you doing fine"

message=message1+"@"+message2+"@"+message3

End function

function chat-history

user-history=message

user-message=split(user-history,"@")

usermessage1=user-message(0)

usermessage2=user-message(1)

usermessage3=user-message(2)

End Function
0
user891193

list1配列は、投稿したのと同じ方法で必要なデータのみを伝送します。次に、関数から配列を直接渡すこともできます:-

function sample_function(arg1,arg2)
    ''#Some code.................

    passenger = list1(0)
    name1 = list1(1)
    age1 = list1(2)
    seatNumber = list1(3)
    sample_function list1    
end function 
0
TheMightyNight

辞書オブジェクトを使用することによって。これはあなたの機能です

Function sample_function(ByRef passengerDetails)
    ''#Some code.................
    passengerDetails("passenger")=list(0)
    passengerDetails("name")=list(1)
    passengerDetails("age")=list(2)
    passengerDetails("seatnumber")=list(3)
    '#This is an Incomplete function...    
end function
'Creating a dictionary object
Set passengerDetails= CreateObject("Scripting.Dictionary")
'calling your function
sample_function(passengerDetails)

ディクショナリオブジェクトを使用する利点は、関数がより多くの値を返すようにしたい場合(この関数は多くのプロジェクト/チームで使用されている)、必要な値をディクショナリオブジェクトに追加することです。さらにパラメータを追加する必要があります(この関数を使用している他の人はエラーを取得しません)

0