前のトピック: ケース スタディ 16: ビジネス ロジックの設計パターン

次のトピック: ケース スタディ 18: 登録

ケース スタディ 17: 組み込み機能

ACE には、さまざまな目的の組み込み機能およびツールがあります。 この組み込み機能を使用するのは、VBS 内にその機能を記述するよりも望ましい方法です。 VBS はインタープリタ型言語であるため、VBS 内で再現するとパフォーマンスに悪影響します。

組み込み関数のリストおよびそれらを使用する適切な方法を以下に示します。

IsWithinTimeslot

これは最も簡単な組み込み関数です。 その用途は、システムが現在タイムスロット内にあるかどうかをビジネス ロジックが認識できるようにすることです。 これにより、同じことを行うために、OnTimeslotEnter および OnTimeslotExit 関数の変数を管理する必要がなくなります。 たとえば、以下のコードを実行する代わりに、

Dim amIWithinATimeslot
Sub OnTimeslotEnter(time)
     amIWithinATimeslot = 1
End sub
Sub OnTimeslotExit(time)
     amIWithinATimeslot = 0
End sub
Sub OnEvent(eventDetails)
     If amIWithinATimeslot = 1 Then
           count = count + 1
     End if
End sub

以下のより簡単なコードを実行できます。

Sub OnEvent(eventDetails)
     If context.IsWithinTimeslot Then
          count = count + 1
     End if
End sub

OnTimeslotEnter および OnTimeslotExit のタイムスタンプに関する情報を使用または維持する場合、この機能ではそのニーズを満たすことはできません。 ただし、通常それは必要ではなく、このコードで十分です。

TimeOfLastEvent

この関数は、最後に処理された Raw データまたは中間データ イベントのタイムスタンプを返します。 これは、イベント ハンドラにこの情報を保存する必要がなく、この関数を使用して直接利用できることを意味します。 以下に例を挙げます。

Function result
     Dim LastEventTimestamp
     LastEventTimestamp = Context.TimeOfLastEvent
End function

TimeOfLastEventHandler

この関数は、ACE によって最後に呼び出されたイベント ハンドラのタイムスタンプを返します。 これには、Raw データおよび中間データのイベント ハンドラだけでなく、呼び出されたすべてのシステム イベントも含まれます。 これは、時間を受け取らないイベント ハンドラ(たとえば、result 関数)で特に役立ちます。 以下に例を挙げます。

Function result
     Dim LastEventHandlerTimestamp
     LastEventHandlerTimestamp= Context.TimeOfLastEventHandler
End function

NetTime

この関数は、2 つのタイムスタンプの指定し、それらの 2 つのタイムスタンプの間で、システムが現在のルールのタイムスロット内にあった実時間(秒単位)を受け取ることができます。 これは特に煩雑な機能なので、VBS 内に実装しないでください。 VBS 内にこれを実装すると、すべての OnTimeslotEnter および OnTimeslotExit のリストを維持するか、それらの間のタイムスパンを算出するために、タイムスロットに入ってから出るまでの時間を毎回直接計算する必要があります。 極端な状況では、これには長い時間がかかる場合があり、計算のパフォーマンスによくありません。 内部関数は、大幅に最適化された後に同じことを行うため、より効率的に実行されます。 以下に例を挙げます。

Function result
     Dim MyNetTime
     MyNetTime = Tools.NetTime(MyBeginTimestamp, MyEndTimestamp)
End function

コンテキスト オブジェクト

コンテキスト オブジェクトには、以下の内容に関する情報を提供するさまざまなパラメータがあります。

安全な ODBC を使用してデータベース内のこの情報に直接アクセスすることは非常に非能率的であり、この情報はコンテキスト オブジェクトから簡単に取得できるので意味がありません。 情報の取得時は、可能であれば常に組み込み機能を使用します。