$CLASSMETHOD(classname, methodname, arg1, arg2, arg3, ... )
説明
$CLASSMETHOD は、ObjectScript プログラムが任意のクラス内の任意のクラス・メソッドを呼び出すことを許可します。クラス名とメソッド名はいずれも、実行時に計算することもできれば、文字列定数として指定しておくこともできます。クラス・メソッドではなくインスタンス・メソッドを呼び出すには、$METHOD 関数を使用します。
メソッドが引数を取る場合は、メソッド名の後の引数リストで引数を指定します。最大 255 の引数値がメソッドに渡されます。
関数またはプロシージャとして $CLASSMETHOD を呼び出すと、ターゲット・メソッドの呼び出しが確定します。$CLASSMETHOD は、JOB コマンド、または DO コマンドを使用して呼び出して、返り値を破棄できます。すべての DO コマンド引数と同様に、$CLASSMETHOD は DO によって呼び出されたときに後置条件パラメータを取ることができます。
存在しないクラスを呼び出そうとすると、<CLASS DOES NOT EXIST> の後に現在のネームスペース名と指定されたクラス名が記述されたエラーが出力されます。例えば、存在しない classname “Fred” を呼び出そうとすると、エラー <CLASS DOES NOT EXIST> *User.Fred が出力されます。classname に空の文字列を指定すると、<CLASS DOES NOT EXIST> *(No name) が出力されます。
存在しないクラス・メソッドを呼び出そうとすると、<METHOD DOES NOT EXIST> エラーが発生します。
例
以下は、$CLASSMETHOD を関数として使用する例です。
SET classname = "%Dictionary.ClassDefinition"
SET classmethodname = "NormalizeClassname"
SET singleargument = "%String"
WRITE $CLASSMETHOD(classname,classmethodname,singleargument),!
%Library.String が返されます。
以下は、2 つの引数を指定して $CLASSMETHOD を使用する例です。
WRITE $CLASSMETHOD("%Library.Persistent","%PackageName"),!
WRITE $CLASSMETHOD("%Library.Persistent","%ClassName")
この呼び出しでは、%Library と %Persistent が返されます。
以下の例では、$CLASSMETHOD を使用してダイナミック SQL クエリを実行します。
SET q1="SELECT Age,Name FROM Sample.Person "
SET q2="WHERE Age > ? AND Age < ? "
SET q3="ORDER by Age"
SET myquery=q1_q2_q3
SET rset=$CLASSMETHOD("%SQL.Statement","%ExecDirect",,myquery,12,20)
DO rset.%Display()
WRITE !,"Teenagers in Sample.Person"