Adobe Flex 3 ヘルプ

記録エージェントの作成

customagent_src.zip ファイルに含まれるクラスを使用して、ユーザーがアプリケーションを操作するたびにメトリックデータを記録するカスタムエージェントを作成することができます。ユーザーの操作を記録して再生するエージェントを作成する方法については、再生エージェントの作成を参照してください。

customagent_src.zip ファイルに含まれるカスタムエージェントは、CustomAdapter クラスです。このクラスは、イベントデータをデータベースに書き出す HTTPService を呼び出します。

CustomAdapter クラスがサポートするクラスは次のとおりです。

  • IAutomationEnvironment を実装する CustomEnvironment クラス
  • IAutomationClass を実装する CustomAutomationClass
  • CustomAutomationEventDescriptor クラス
  • CustomAutomationMethodDescriptor クラス
  • CustomAutomationPropertyDescriptor クラス

これらのクラスに加え、ZIP ファイルには環境 XML ファイルおよびこのファイルを解析するユーティリティクラスも含まれています。

また、ユーザーのセッション情報を提供するカスタムエージェントから RemoteObject にアクセスすることもできます。例を単純化するため、ここではデータをデータベースに書き込むのではなくトレースログに書き出します。

CustomAdapter クラスの使用

CustomAdapter クラスとそれがサポートするファイルを使用して、オートメーションイベントを記録する Flex アプリケーションを作成するには、このセクションの手順説明に従います。

このカスタムエージェントは、異なる環境情報を使用するエージェント(Flex のオートメーション機能に含まれる QTP エージェントなど)と一緒には使用できません。そのため、この例のエージェントを使用する場合は、QTP を使用してスクリプトを記録することは避けてください。

Flex インストールの設定

オートメーション API を使用して自動化可能なイベントを記録するアプリケーションを作成するには、まず次のことを実行する必要があります。

  1. Flex Builder Professional を実行していることを確認します。
  2. customagent_src.zip ファイル内のすべてのファイルをディレクトリに抽出します(例えば c:/myfiles/flex3/agent など)。このファイルには、custom.* パッケージの中にエージェントおよびヘルパーのクラスが含まれています。また、Flex アプリケーションをデータベースに接続する際に使用できる MySQL および PHP コードも含まれています。
  3. AutomationGenericEnv.xml ファイルを、Flex アプリケーションを配置するディレクトリの最上位に保存します。ここでは、c:/myfiles/flex3/agent に保存します。

環境の設定を終えたら、CustomAdapter クラスを編集して、Flex アプリケーションの操作を記録するように設定します。

CustomAdapter クラスの編集

CustomAdapter クラスは、recordHandler() メソッドの RECORD イベントを処理します。RECORD イベントには、次のプロパティがあります。

  • name - エージェントの呼び出しをトリガした、エージェントのイベントの名前(例:Click)。これはエージェントの環境で定義される名前です。
  • replayableEvent - エージェントの呼び出しをトリガしたイベント。
  • automationObject - replayableEvent をトリガしたコントロール。例えば、ユーザーがボタンをクリックした場合、このプロパティには Button コントロールへの参照が格納されます。automationObject プロパティにアクセスするには、これを IAutomationObject にキャストします。その後、そのオブジェクトのプロパティ(Button label プロパティなど)にアクセスするには、次の例のように、AutomationManager getProperties() メソッドを使用します。
    var obj:IAutomationObject = event.automationObject;
    var label:String = automationManager.getProperties(obj, ["label"])[0];
    
    
  • args - イベントに関する追加情報。TextInput コントロールに入力されたテキストや、マウスクリックの際に Alt キーが押されたかどうかなど。すべての引数は、次のようなコードを使用して表示できます。
    for (var i:int = 0; i<event.args.length; i++) {
        trace("event.args[" + i + "]: " + event.args[i]);
    }
    
    

CustomAdapter の recordHandler() メソッドのデフォルトバージョンには、イベント情報をデータベースに書き込むコードが含まれています。データベースを設定せずに例を実行できるよう、メソッドを単純化するには、このセクションの手順に従います。手順を実行し終えたら、前に戻ってデータベースを作成し、CustomAdapter クラスの recordHandler() メソッドを取り消すことができます。

CustomAdapter の例の単純化

  1. CustomAdapter.as ファイルを開きます。
  2. recordHandler() メソッドを編集します。サービスのアクセスをコメントアウトし、次のように trace ステートメントに置き換えます。
    trace("automation name:" + obj.automationName);
    trace("event name:" + event.name);
    trace("replayable event:" + event.replayableEvent);
    trace("event target:" + event.target);
    // Arguments to be sent are '#' separated.
    var arguments:String = event.args.join("#");
    trace("args:" + arguments);
    
    // Show all event args.
    for (var i:int = 0; i<event.args.length; i++) {
        trace("event.args[" + i + "]: " + event.args[i]);
    }
    trace("------------------------");
    
    

    後でサービスメソッドのコメントを解除すれば、データベースサポートを追加できます。

  3. コンストラクタを編集します。次のような trace() メソッドを追加します。
    trace("in CustomAdapter constructor") 
    
    

    こうすると、アプリケーションの起動時にカスタムエージェントを確実にインスタンス化できます。

  4. カスタムエージェントの SWC ファイルをコンパイルします。これを行うには、次の例のように compc ユーティリティを使用してカスタムパッケージにクラスを含めます。
    compc -source-path+=c:/myfiles/flex3/agent -include-classes
    custom.CustomAdapter custom.CustomAutomationClass
    custom.CustomAutomationEventDescriptor
    custom.CustomAutomationMethodDescriptor
    custom.CustomAutomationPropertyDescriptor
    custom.CustomEnvironment
    custom.utilities.EnvXMLParser
    -library-path+=c:/home/dev/depot/flex/sdk/frameworks/libs
    -output=c:/myfiles/flex3/agent/CustomAgent.swc

    こうすると、c:/myfiles/flex3/agent ディレクトリに CustomAgent.swc ファイルが作成されます。

Flex アプリケーションの作成と実行

Flex でオートメーションを使用するには、Flex アプリケーションとそれがサポートするラッパーファイルを作成する必要があります。

  1. Main.mxml を作成し、以下のサンプル MXML ファイルのように、CustomAgent.swc ファイルと同じディレクトリに保存します(例えば c:/myfiles/flex3/agent など)。
    <?xml version="1.0"?>
    <!-- agent/Main.mxml -->
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" height="100%" width="100%">
        <mx:Script><![CDATA[
            private function changeLabel(newLabel:String):void {
                b1.label = newLabel;
            }        
        ]]></mx:Script>
        <mx:TextInput id="ti1" text=""/>
        <mx:Button id="b1" label="Change Label" click="changeLabel(ti1.text)" />
    </mx:Application>
    
    
  2. Flex アプリケーションをコンパイルします。また、次の例に示すように、CustomAgent.swc ファイルをライブラリとして含める必要があります。
    mxmlc -include-libraries+=c:/myfiles/flex3/agent/CustomAgent.swc        c:/myfiles/flex3/agent/Main.mxml
    
    

    これにより、c:/myfiles/flex3/agent ディレクトリに Main.swf が作成されます。

  3. HTML ラッパーは Flex Builder で自動的に作成されます。コマンドラインコンパイラを使用する場合は、これも手動で作成する必要があります。SWF ファイルはラッパーで要求します。SWF ファイルを直接実行しようとすると、ファイルのセキュリティエラーによって環境 XML ファイルのロードが妨げられます。次のサンプルのラッパーは、mysource.js ファイルをロードします。
    <html><body>
    <script src="mysource.js"></script>
    </body></html>
    
    
  4. Flex アプリケーションの SWF ファイルを埋め込む <OBJECT> タグおよび <EMBED> タグを定義する JavaScript ファイルを作成します。例えば、次のようにします。
    document.write("<object id='tempId' classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000'  height='100%' width='100%'>");
    document.write("<param name='src' value='Main.swf'/>");
    document.write("<embed name='Main' src='Main.swf' height='100%' width='100%'/>");
    document.write("</object>");
    
    
  5. アプリケーションの SWF、ラッパー、JavaScript、および環境 XML の各ファイルを、Web サーバーにコピーします。これで、Web サーバーのディレクトリには以下のものが配置されます。
    • Main.swf
    • index-simple.html
    • mysource.js
    • AutomationGenericEnv.xml

    XML ファイルは実行時にロードされるため、Web サーバー上の SWF ファイルからアクセス可能になっている必要があります。

  6. 次のように、Web サーバーから html ラッパーを要求します。
    http://localhost:8100/flex/agent/index-simple.html
    
    
  7. アプリケーションを実行し、ラベルの名前を「42」に変更します。トレースログには次のようなものが含まれる必要があります。
    in CustomAdapter constructor
    automation name:ti1
    event name:SelectText
    event target:[object AutomationManager]
    args:0#0
    event.args[0]: 0
    event.args[1]: 0
    ------------------------
    automation name:ti1
    event name:Input
    event target:[object AutomationManager]
    args:42
    event.args[0]: 42
    ------------------------
    automation name:Change Label
    event name:Click
    event target:[object AutomationManager]
    args:
    ------------------------
    
    

 

このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート