このコードの目的は、レポートを生成するためのユーザー入力を取得することです。ユーザーは月とタイプを選択します。コードは部分的に示されているように機能しますが、別のJSLファイル(「インクルード」で呼び出される)にある関数に変換しようとするとすぐに失敗します。 2つの変数を返すことができず、常に「名前が未解決」というエラーが発生します。Monthはリストとして返され、typeは文字列(?)として返されることを知っています。 不足しているものと、関数によって返される月とタイプを取得するにはどうすればよいですか。
ありがとう!
Names Default To Here( 1 );
monthLst = {"may", "June", "July"};
nw = New Window( "Select Month",
<<MODAL>","Accounting", "Financial"},
),
Spacer Box( size( 10, 10 ) ),
H List Box(
Align( left ),
Spacer Box(),
Button Box( "Cancel", bbCancelled = 1 ),
Button Box( "OK",
bbCancelled = 0;
selectMo = tb2 << Get Selected;
rcb = cb << Get Selected;
)
)
),
Spacer Box( size( 50, 10 ) )
),
Spacer Box( size( 25, 30 ) )
);
If( bbCancelled == 1,
Stop(),
If( selectMo == {},
//error modal
::dialogModalNoEdit( "Please select a Month." );
//recursively call modal window function
SelExpModal( monthLst );
,
//if values were selected return results
//Return(selectMo[1] ),
)
);
Print(selectMo);
Print(rcb);</MODAL>正しく理解できれば…
関数を作成する場合は、関数の実行後に使用する値を返す必要があります(グローバル変数を使用する場合を除く)。
この場合、たとえば次のようにそれらを返すことができます(連想配列の方が良いかもしれません):
return(selectMo, rcb);
そして、そのスクリプトを含むスクリプトでは、それらにアクセスできます。
Names Default To Here(1);
Include("MonthTypeFunc.jsl");
retVal = MonthTypeWindow();
show(retVal[1],retVal[2]);添付のサンプルスクリプト。 同じフォルダーに配置し、Main.jslを実行します。
jthiありがとうございます!連想配列を使用することを考えたことはありません。