# スクリプトVer2

マニュアル > サーバ作成ガイド > アクション編 > アクションの機能解説 > # スクリプトVer2 |

本アクションの特長

スクリプトVer2アクションではSC2構文を用いたスクリプトを実行することができます。

スクリプトVer2は、if文（条件分岐）やfor文（繰り返し処理）などの高度なスクリプトを記述することができます。また、値変化を受け取るOnValueChangeなどのイベント機能も搭載しています。

スクリプトVer2アクションのスクリプトはテキストファイルに記述します。このテキストファイルをスクリプトファイルと呼び、スクリプトVer2アクションのプロパティとしてスクリプトファイルのパスを指定します。

定周期イベント/定刻イベント/タグイベントでスクリプトを実行する周期やタイミングを設定します。

このアクションのサンプルについは、「スクリプトVer2の記述例」を参照して下さい。

| スクリプトVer2で利用可能な構文については、スクリプトVer2 (SC2構文)を参照して下さい。

階層構造について

スクリプトVer2アクションはスクリプトファイルに記述されたスクリプトを実行しますが、このテキストファイルの中身をルートオブジェクトと定義します。オブジェクトには階層構造があり、ルートオブジェクトを第1階層とします。ここで表現される階層構造はオブジェクト同士の親子の関係を指します。ルートオブジェクトは全体にかかわるプロパティやメソッドを持つオブジェクトです。ルートオブジェクトは算術オブジェクト(Mathオブジェクト)を子供として持ちます。ルートオブジェクトに独自のスクリプト（ユーザ定義関数）を記述した場合、その関数は本アクションのスクリプト内で呼び出すことができます。ルートオブジェクトは「::」（コロン２つ）で表現します。つまり頭に「::」を付けるとルートオブジェクトのメソッドやプロパティが呼び出すことが可能です。

スクリプトVer2アクションでは、利用できるオブジェクトは「ルートオブジェクト(root)」と「算術オブジェクト(Math)」と後述するnew演算子にて生成されるオブジェクトを利用できます。オブジェクトはメソッド・イベントを持っています。

本アクションのイベントからの呼び出しについて

他のアクションと同様に、スクリプトVer2アクションの呼び出しはイベントで実行され、定周期イベント/定刻イベント/タグイベントの各イベントでスクリプトを実行する周期やタイミングを設定します。イベントによりアクションが実行される毎に、スクリプトの内部処理が行われ、OnValueChanged/OnExpressionValueChanged/OnTimer等が呼び出されます。

また、OnHeartBeatイベントはイベントによりアクションが実行される毎に必ず呼び出されます。

例えば、1秒の定周期イベントでアクションを呼び出すと設定をするとOnHeartBeatイベントは１秒ごとに呼び出されます。

また、OnTimerイベントのタイマー処理（一定間隔で処理を実行する）についてですが、10秒の定周期イベントにてアクションを呼び出す設定にした場合、スクリプト中にてSetTimer(0, 5000, -1)で5秒タイマーを発生させたとしても、OnTimerイベントは10秒毎しか発生しません。OnTimerイベントのタイマー処理を実装する場合は、タイマーより早い周期のイベントでスクリプトアクションを呼び出す必要があります。

| OnHeartBeatイベントはイベントによりアクションが実行される毎に必ず呼び出されます。 尚、定周期的な処理を実装する場合には、SetTimerメソッドによるOnTimerイベントの使用を推奨します。SetTimerには、複数のタイマーを同時に起動する、個々の周期を設定できるなどのメリットがあります。 例えば、定周期的な処理はOnTimerイベントを使用し、定刻イベントなどでスクリプトを実行したい場合は、OnHeartBeatイベントを使用するといった使い分けをしてください。

| OnTimerイベントは、スクリプトVer2アクションがイベントにより呼ばれた時に、条件（OnTimerで設定した周期が経過している）を満たしていた場合に実行されます。 例えば、 イベントの周期：10秒 OnTimerの周期：11秒 と指定している場合、最初の実行から11秒後にOnTimerの処理がされるのではなく、下記のようにイベントでアクションが再び呼ばれた段階で、処理が実行されます。 1：初回実行（0秒）→OnTimerのカウント開始。 2：イベントで1度目の実行（10秒経過）→タイマー周期は11秒なので条件が不成立の為、まだ処理はされない。 3：OnTimerの周期経過（11秒経過）→スクリプトVer2アクションは呼び出されていない為、まだ実行されない。 4：イベントで2度目の実行（20秒経過）→OnTimerの設定周期を超えている為、条件が成立し、処理が実行される。 イベント毎にOnTimerの処理を行いたい場合は、イベントの周期よりも短い周期をOnTimerの周期とする必要があります。

スクリプトVer2アクションで利用できるメソッド及びイベント

スクリプトVer2アクションで利用できるメソッド及びイベント
ルートオブジェクト (root) | 共通メソッド 共通イベント | コントロールリファレンスの「共通メソッド」に掲載されているメソッド及びイベントが利用できます。 ※コントロールリファレンスのサポート対象の「スクリプトアクション」に○が付いているメソッドやイベントが利用できます。
ルートメソッド | コントロールリファレンスの「ルートメソッド」に掲載されているメソッドが利用できます。 ※コントロールリファレンスのサポート対象の「スクリプトアクション」に○が付いているメソッドが利用できます。
new演算子 | new演算子によりオブジェクトの生成ができます。new演算子により下記のオブジェクトをスクリプト内で使用できます。
テキストダンプコントロール (TextDump) | テキストファイルへの出力を可能とします。 使用できるプロパティ・メソッドは、コントロールリファレンスの「テキストダンプコントロール」を参照して下さい。
ダイレクトクエリーデータベースコントロール (DirectQueryDB) | データベースへ接続し、クエリーの発行を可能とします。 使用できるプロパティ・メソッドは、コントロールリファレンスの「ダイレクトクエリーデータベースコントロール」を参照して下さい。 本コントロールのサンプルとして「スクリプトVer2でDB連携」を参照して下さい。
ヒストリカルデータコントロール (HistoricalData) | ヒストリカルデータサーバから時系列のデータを取得 使用できるプロパティ、メソッドは下記です。 メソッド） AddField/DelField/ClearField/ReadHistoricalData プロパティ） HDSRequestType プロパティ、メソッドの仕様は「コントロールリファレンスマニュアル」を参照して下さい。 本コントロールのサンプルとして「スクリプトVer2で履歴取得」を参照して下さい。
new 演算子の使用方法は下記のようになります。
    var objDirectQueryDB;
    event OnInitialize()
    {
    	// データベースオブジェクト生成
    	objDirectQueryDB = new DirectQueryDB;
    }
算術オブジェクト (Math) | メソッド | コントロールリファレンスの「ルートメソッド」に掲載されているメソッドの内、頭に「Math.」がついているメソッドが利用できます。 ※コントロールリファレンスのサポート対象の「スクリプトアクション」に○が付いているメソッドが利用できます。

| コントロールリファレンスにて共通メソッド、共通イベント、ルートメソッドの一覧表の「スクリプトアクション」に○が付いているメソッド、イベントが利用できます。 また、各メソッドのページで「スクリプトアクション」に○が付いているかどうかでも判断できます。

設定仕様

アクション仕様
パラメータ | なし。
ダイアログ | ■スクリプト スクリプトはテキストファイルに記述します。アクションで実行したいスクリプトファイルのパスを指定します。