既知の VBScript 構文に加えて、ビジネス ロジック計算式は以下の特別なプロシージャを含むことができます。
計算の開始時に 1 回コールされます。 グローバル変数の初期化に使用できます。
期間が終了するごとにコールされまます。 IsCompleteRecord は、トラッキング期間の終了時には True、中間の計算を作成しているときは False です。
新しい期間の開始ごとにコールされます。
ユーザ定義のプロシージャをイベントに関連付けるための必須プロシージャです。 OnRegistration は、計算エンジンによって、メトリックの計算の開始時に 1 回コールされます。
イベントは以下のようなディスパッチャ オブジェクトのメソッドを使用して、プロシージャと関連付けられます。
このプロパティにより、ユーザは Onregistration メソッドが実際の計算の一部として実行されているか、インフラストラクチャ処理中であるかを知ることができます。 ときおり顧客は OnRegistration メソッドに大量のコードを持つ場合があるため便利です。 このコードは登録に対して無効ですが、リソース構造が変更された場合は常に実行される必要があります(つまり、OnRegistration メソッドの内部で実行される必要があります)。
多くの場合ユーザは、リソース構造のマップを維持して、計算に使用します。 リソース構造が動的であるため、リソース構造が変更されるときにマップ内の構造が更新される必要があります。 リソース構造が変更された場合は常に、登録関数がコールされます。
ただし、マップを満たすことは登録の目的には無関係です。 このことは、マップを満たすことが OnRegistration 関数のパフォーマンス下げることを意味します。 これは、頻繁に発生するわけではないので、ランタイム中は重要ではありません。 ただしインフラストラクチャ処理中は何度も発生する可能性があるため、その結果として重大なパフォーマンスの低下をもたらし、メリットはありません。
実際、コードが実行されるのはシステムが実質的に計算を行っているときのみに限る必要があります。 IsRuntimeMode プロパティにより、顧客はコードが実行される必要があるかどうかを検出することができます。
マップを満たすタスクと、リソース構造が変更された場合に実行する必要のあるその他のすべての初期化(ただし、実際の登録には無関係)は、別々の関数で実行できます。
2 つの部分で構成される例 1 では、最初のルーティン(OnRegistration(dispatcher))には登録に関連するコードが含まれ、OnRegistration 関数に残る必要があります。 2 番目のルーチン(New)には、登録に無関係なコードが含まれ、新しい関数に配置できます。
例 1
Sub OnRegistration(dispatcher) Dim MyResource MyResource = Context.ClusterItem Dispatcher.RegisterByResource "OnEvent", "My Event Type", MyResource End Sub
Sub New
Dim ThisResourceMap
Set GlobalResourceVector= CreateObject("SlalomVector.Vector")
Dim resource
Set ThisResourceMap = Context.ResourcesOfResourceGroup(Context.ClusterItem)
For Each resource In ThisResourceMap
GlobalResourceVector.Add resource
Next
End Sub
例 2
Sub OnRegistration(dispatcher)
Dispatcher.RegisterByResource “OnEvent”, ”my event type”, “my resource”
Dim a
For a = 1 to 1000000: next
End Sub
このコードは、計算のインフラストラクチャ処理段階で負の影響を及ぼします。
代わりに、以下を使用できます。
Sub OnRegistration(dispatcher)
Dispatcher.RegisterByResource “OnEvent”, ”my event type”, “my resource”
If (dispatcher.IsRuntimeMode) then
Dim a
For a = 1 to 1000000: next
End If
End Sub
注: このメソッドは使用されなくなりました。
このメソッドは、特定のメトリックによって送信されたイベントの登録を有効化します。 メソッドは以下のパラメータを受信します。
イベントの受け取り時にコールするメソッドの名前。
この登録によって受信されるイベントのタイプ。
リソースの名前、イベントが送信されるリソース グループ、または Context.ClusterItem。 このパラメータには空の文字列("")を含めることができます。 この場合(空の文字列)、登録は(SendEvent 内の)すべてのリソースに送信されたイベント上で実行されます。
このパラメータは、現在のメトリックがトラッキング エージェントのみからメトリック イベントを受け取るよう登録する(その場合、提供される値は 「tracking」)、またはすべてのエージェントからイベントを受け取るよう登録する(現在のメトリックの各作業エージェントは、送信するメトリックの対応するエージェントからイベントを受信します。 たとえば、時間単位のエージェントは時間単位のエージェントからイベントを受け取り、日単位エージェントは日単位エージェントから、などです。この場合提供されるべき値は「equivalent」です)のどちらかを定義します。 2 つの可能な値は「tracking」および「equivalent」です。
イベントの受信元となるメトリックの名前。
上記のメトリックが属している契約の名前。 このパラメータはオプションです。これが提供されない場合、ContractPartyName(以下を参照)の提供もされません。 これらのパラメータが与えられない場合、システムは MetricName が現在の契約に属すると仮定します。
上記の契約が属する契約関係者の名前。 このパラメータはオプションです。 パラメータが提供されない場合、システムは ContractName が現在の契約と同様に契約関係者に属すると仮定します。
注: "ProcedureName"="MethodName" および "EventType=EventTypeName"
タイムスロットの開始時にコールされます。
タイムスロットの終了時にコールされます。
|
Copyright © 2013 CA.
All rights reserved.
|
|